README.md edited

This commit is contained in:
2024-12-06 10:45:08 +09:00
parent 09e4edee6b
commit 1aa387aa59
13921 changed files with 2057290 additions and 10 deletions

View File

@@ -0,0 +1,29 @@
{% load i18n jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
<div class="actions">
{% block actions %}
{% block actions-form %}
{% for field in action_form %}<label>{{ field }}</label>{% endfor %}
{% endblock %}
{% block actions-submit %}
<button type="submit" class="btn {{ jazzmin_ui.button_classes.primary }}" style="margin-right: 5px; margin-left: 15px;" title="{% trans "Run the selected action" %}" name="index" value="{{ action_index|default:0 }}">
{% trans "Go" %}
</button>
{% endblock %}
{% block actions-counter %}
{% if actions_selection_counter %}
<span class="action-counter" data-actions-icnt="{{ cl.result_list|length }}">{{ selection_note }}</span>
{% if cl.result_count != cl.result_list|length %}
<span class="all hidden">{{ selection_note_all }}</span>
<span class="question hidden">
<a href="#" title="{% trans "Click here to select the objects across all pages" %}">
{% blocktrans with cl.result_count as total_count %}Select all {{ total_count }} {{ module_name }}{% endblocktrans %}
</a>
</span>
<span class="clear" style="display: none;"><a href="#">{% trans "Clear selection" %}</a></span>
{% endif %}
{% endif %}
{% endblock %}
{% endblock %}
</div>

View File

@@ -0,0 +1,15 @@
{% extends "admin/index.html" %}
{% load i18n %}
{% block content_title %} {{ app_label|capfirst }} {% endblock %}
{% block bodyclass %}{{ block.super }} app-{{ app_label }}{% endblock %}
{% if not is_popup %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item">{% for app in app_list %}{{ app.name }}{% endfor %}</li>
</ol>
{% endblock %}
{% endif %}

View File

@@ -0,0 +1,10 @@
{% extends "admin/change_form.html" %}
{% load i18n %}
{% block form_top %}
{% if not is_popup %}
<p class="text-center">{% trans "First, enter a username and password. Then, you'll be able to edit more user options." %}</p>
{% else %}
<p class="text-center">{% trans "Enter a username and password." %}</p>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,112 @@
{% extends "admin/base_site.html" %}
{% load i18n static jazzmin %}
{% load admin_urls %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% block extrahead %}{{ block.super }}
<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
{% endblock %}
{% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.model_name }} change-form{% endblock %}
{% if not is_popup %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a></li>
<li class="breadcrumb-item"><a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a></li>
<li class="breadcrumb-item"><a href="{% url opts|admin_urlname:'change' original.pk|admin_urlquote %}">{{ original|truncatewords:"18" }}</a></li>
<li class="breadcrumb-item active">{% trans 'Change password' %}</li>
</ol>
{% endblock %}
{% endif %}
{% block content_title %} {% trans 'Change password' %} {% endblock %}
{% block content %}
<div class="col-12">
{% if form.errors %}
<div class="callout callout-danger">
{% if errors|length == 1 %}
{% trans "Please correct the error below." %}
{% else %}
{% trans "Please correct the errors below." %}
{% endif %}
</div>
{% endif %}
<div class="card">
<div class="card-header with-border">
<h4 class="card-title">
{% blocktrans with username=original %}Enter a new password for the user <strong>{{ username }}</strong>.{% endblocktrans %}
</h4>
</div>
<div class="card-body">
<div id="content-main">
<form action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form">
{% csrf_token %}
{% block form_top %}{% endblock %}
<input type="text" name="username" value="{{ original.get_username }}" style="display: none">
<div>
{% if is_popup %}<input type="hidden" name="_popup" value="1">{% endif %}
<fieldset class="module aligned">
<div class="row form-group">
<div class="col-12 col-md-2">
<label class="control-label float-md-right">
{{ form.password1.field.label }}
</label>
</div>
<div class="col-12 col-md-6">
{{ form.password1 }}
{% if form.password1.help_text %}
<div class="help-block">{{ form.password1.help_text|safe }}</div>
{% endif %}
</div>
<div class="col-12 col-md-4">
<div class="help-block text-red">
{{ form.password1.errors }}
</div>
</div>
</div>
<div class="row form-group">
<div class="col-12 col-md-2">
<label class="control-label float-md-right">
{{ form.password2.field.label }}
</label>
</div>
<div class="col-12 col-md-6">
{{ form.password2 }}
{% if form.password2.help_text %}
<div class="help-block">{{ form.password2.help_text|safe }}</div>
{% endif %}
</div>
<div class="col-12 col-md-4">
<div class="help-block text-red">
{{ form.password2.errors }}
</div>
</div>
</div>
</fieldset>
<div class="row">
<div class="submit-row col-md-12 col-md-push-2">
<input type="submit" value="{% trans 'Change password' %}" class="btn {{ jazzmin_ui.button_classes.primary }} float-right">
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}
{% block extrajs %}
<script>
$('[required]').before('<span class="text-red" style="margin-left: -10px;">* </span>');
</script>
{% endblock %}

View File

@@ -0,0 +1,386 @@
{% load i18n static jazzmin admin_urls %}
{% get_current_language as LANGUAGE_CODE %}
{% get_current_language_bidi as LANGUAGE_BIDI %}
{% get_jazzmin_settings request as jazzmin_settings %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<!-- Prevent admin panel being crawled by search engines -->
<meta name="robots" content="none, noarchive">
<title>{% block title %}{{ title }} | {{ jazzmin_settings.site_title }}{% endblock %}</title>
<!-- Font Awesome Icons -->
<link rel="stylesheet" href="{% static "vendor/fontawesome-free/css/all.min.css" %}">
<!-- Bootstrap and adminLTE -->
<link rel="stylesheet" href="{% static "vendor/adminlte/css/adminlte.min.css" %}" id="adminlte-css">
<!-- Bootswatch theme -->
{% if jazzmin_ui.theme.name != 'default' %}
<link rel="stylesheet" href="{{ jazzmin_ui.theme.src }}" id="jazzmin-theme" />
{% endif %}
{% if jazzmin_ui.dark_mode_theme %}
<link rel="stylesheet" href="{{ jazzmin_ui.dark_mode_theme.src }}" id="jazzmin-dark-mode-theme" media="(prefers-color-scheme: dark)"/>
{% endif %}
<!-- Custom fixes for django -->
<link rel="stylesheet" href="{% static "jazzmin/css/main.css" %}">
{% if jazzmin_settings.custom_css %}
<!-- Custom CSS -->
<link rel="stylesheet" href="{% static jazzmin_settings.custom_css %}">
{% endif %}
<!-- favicons -->
<link rel="shortcut icon" href="{% static jazzmin_settings.site_icon %}" type="image/png">
<link rel="icon" href="{% static jazzmin_settings.site_icon %}" sizes="32x32" type="image/png">
{% if jazzmin_settings.use_google_fonts_cdn %}
<!-- Google Font: Source Sans Pro -->
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700" rel="stylesheet">
{% endif %}
{% block extrastyle %} {% endblock %}
{% block extrahead %} {% endblock %}
</head>
<body class="hold-transition{% if not jazzmin_settings.show_sidebar %} no-sidebar{% else %} sidebar-mini{% endif %} {% sidebar_status request %} {% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %} {{ jazzmin_ui.body_classes }} {% if jazzmin_ui.dark_mode_theme %}theme-dark{% endif %}" data-admin-utc-offset="{% now "Z" %}">
<div class="wrapper">
{% if not is_popup %}
<nav class="main-header navbar navbar-expand {{ jazzmin_ui.navbar_classes }}" id="jazzy-navbar">
<ul class="navbar-nav">
{% if jazzmin_settings.show_sidebar %}
<li class="nav-item">
<a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a>
</li>
{% else %}
<li class="nav-item">
<a href="{% url 'admin:index' %}" class="brand-link">
<img src="{% static jazzmin_settings.site_logo %}" alt="{{ jazzmin_settings.site_header }} Logo" class="{{ jazzmin_settings.site_logo_classes }} brand-image" style="opacity: .8; margin: 0 0 0 5px;">
</a>
</li>
{% endif %}
{% get_top_menu user request.current_app|default:"admin" as top_menu %}
{% for link in top_menu %}
<li class="nav-item d-none d-sm-inline-block{% if link.children %} dropdown{% endif %}">
{% if link.children %}
<a class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
{{ link.name }}
</a>
<div class="dropdown-menu">
{% for child in link.children %}
<a class="dropdown-item" href="{{ child.url }}" {% if link.new_window %}target="_blank"{% endif %}>{{ child.name }}</a>
{% endfor %}
</div>
{% else %}
<a href="{{ link.url }}" class="nav-link" {% if link.new_window %}target="_blank"{% endif %}>{{ link.name }}</a>
{% endif %}
</li>
{% endfor %}
</ul>
{% if jazzmin_settings.search_model %}
{% for search_model in jazzmin_settings.search_models_parsed %}
<form action="{{ search_model.search_url }}" method="GET" class="form-inline ml-3">
<div class="input-group input-group-sm">
<input class="form-control form-control-navbar" name="q" type="search" placeholder="{% trans 'Search' %} {{ search_model.search_name }}..." aria-label="{% trans 'Search' %} {{ search_model.search_name }}...">
<div class="input-group-append">
<button class="btn btn-navbar" type="submit">
<i class="fas fa-search"></i>
</button>
</div>
</div>
</form>
{% endfor %}
{% endif %}
<ul class="navbar-nav ml-auto">
{% if jazzmin_settings.show_ui_builder %}
<li class="nav-item">
<a class="nav-link" data-widget="control-sidebar" data-slide="true" href="#" role="button">
<i class="fas fa-th-large"></i>
</a>
</li>
{% endif %}
{% if 'django.contrib.admindocs'|app_is_installed %}
<li class="nav-item">
<a class="nav-link" href="{% url 'django-admindocs-docroot' %}" role="button">
<i class="fas fa-book"></i>
</a>
</li>
{% endif %}
{% if jazzmin_settings.language_chooser %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
<li class="nav-item dropdown">
<a class="nav-link btn" data-toggle="dropdown" href="#" title="Choose language">
<i class="fas fa-globe" aria-hidden="true"></i>
</a>
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-left" id="jazzy-languagemenu">
<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ request.get_full_path|remove_lang:LANGUAGE_CODE }}" />
{% for language in languages %}
<button
type="submit"
name="language"
value="{{ language.code }}"
class="dropdown-item {% if language.code == LANGUAGE_CODE %}active{% endif %}"
lang="{{ language.code }}"
>
{{ language.name_local|title }}
</button>
{% endfor %}
</form>
</div>
</li>
{% endif %}
<li class="nav-item dropdown">
<a class="nav-link btn" data-toggle="dropdown" href="#" title="{{ request.user }}">
<i class="far fa-user" aria-hidden="true"></i>
</a>
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-left" id="jazzy-usermenu">
<span class="dropdown-header">{% trans 'Account' %}</span>
<div class="dropdown-divider"></div>
<a href="{% url 'admin:password_change' %}" class="dropdown-item">
<i class="fas fa-key mr-2"></i> {% trans 'Change password' %}
</a>
<div class="dropdown-divider"></div>
<form id="logout-form" method="post" action="{% url 'admin:logout' %}">
{% csrf_token %}
<button type="submit" class="dropdown-item"><i class="fas fa-users mr-2"></i> {% translate 'Log out' %}</button>
</form>
{% get_user_menu user request.current_app|default:"admin" as user_menu %}
{% for link in user_menu %}
<div class="dropdown-divider"></div>
<a href="{{ link.url }}" class="dropdown-item" {% if link.new_window %}target="_blank"{% endif %}>
<i class="{{ link.icon }} mr-2"></i> {% trans link.name %}
</a>
{% endfor %}
<div class="dropdown-divider"></div>
{% if perms|can_view_self %}
<a href="{% jazzy_admin_url request.user request.current_app|default:"admin" %}" class="dropdown-item dropdown-footer">{% trans 'See Profile' %}</a>
{% endif %}
</div>
</li>
</ul>
</nav>
{% block sidebar %}
{% if jazzmin_settings.show_sidebar %}
{% get_side_menu as side_menu_list %}
<aside class="main-sidebar elevation-4 {{ jazzmin_ui.sidebar_classes }}" id="jazzy-sidebar">
<a href="{% url 'admin:index' %}" class="brand-link {{ jazzmin_ui.brand_classes }}" id="jazzy-logo">
<img src="{% static jazzmin_settings.site_logo %}" alt="{{ jazzmin_settings.site_header }} Logo" class="{{ jazzmin_settings.site_logo_classes }} brand-image elevation-3" style="opacity: .8">
<span class="brand-text font-weight-light">{{ jazzmin_settings.site_brand }}</span>
</a>
<div class="sidebar">
<div class="user-panel mt-3 pb-3 mb-3 d-flex">
<div class="image">
{% if jazzmin_settings|has_jazzmin_setting:"user_avatar" %}
<img src="{% get_user_avatar request.user %}" width="160px" class="img-circle elevation-2" alt="User Image">
{% else %}
<i class="fas fa-inverse user-profile fa-user-circle"></i>
{% endif %}
</div>
<div class="info">
{% if perms|can_view_self %}
<a href="{% jazzy_admin_url request.user request.current_app|default:"admin" %}" class="d-block">{{ request.user }}</a>
{% else %}
<span class="d-block" style="color: white;">{{ request.user }}</span>
{% endif %}
</div>
</div>
<nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column {{ jazzmin_ui.sidebar_list_classes }}" data-widget="treeview" role="menu" data-collapsible="false">
<li class="nav-item">
<a href="{% url 'admin:index' %}" class="nav-link">
<i class="nav-icon fas fa-th-large"></i>
<p>{% trans 'Dashboard' %}</p>
</a>
</li>
{% if jazzmin_settings.navigation_expanded %}
{% for app in side_menu_list %}
<li class="nav-header">{{ app.name }}</li>
{% for model in app.models %}
<li class="nav-item">
{% if model.url %}
<a href="{{ model.url }}" class="nav-link">
<i class="nav-icon {{ model.icon }}"></i> <p>{{ model.name }}</p>
</a>
{% else %}
<span class="nav-link disabled">
<i class="nav-icon {{ model.icon }}"></i> <p>{{ model.name }}</p>
</span>
{% endif %}
</li>
{% endfor %}
{% endfor %}
{% else %}
{% for app in side_menu_list %}
<li class="nav-item has-treeview">
<a href="#" class="nav-link">
<i class="nav-icon {{ app.icon }}"></i>
<p>{{ app.name|truncatechars:21 }} <i class="fas fa-angle-left right"></i></p>
</a>
<ul class="nav nav-treeview" style="display: none;">
{% for model in app.models %}
<li class="nav-item">
<a href="{% if model.url %}{{ model.url }}{% else %}javascript:void(0){% endif %}" class="nav-link">
<i class="nav-icon {{ model.icon }}"></i>
<p>{{ model.name }}</p>
</a>
</li>
{% endfor %}
</ul>
</li>
{% endfor %}
{% endif %}
</ul>
</nav>
</div>
</aside>
{% endif %}
{% endblock %}
{% endif %}
<div class="content-wrapper" {% if is_popup %}style="margin-left:0px; padding-top: 20px;"{% endif %}>
{% block page_content %}
{% if not is_popup %}
<div class="content border-bottom mb-2">
<div class="container-fluid">
<div class="row">
<div class="col-12 col-md-auto d-flex flex-grow-1 align-items-center">
<h1 class="h4 m-0 pr-3 mr-3 border-right">{% block content_title %}{% endblock %}</h1>
{% block breadcrumbs %}{% endblock %}
</div>
{% block page_actions %}{% endblock %}
</div>
</div>
</div>
{% endif %}
<div class="content">
<div class="container-fluid">
<section id="content" class="content">
{% block messages %}
{% for message in messages %}
{% if message.tags == 'success' %}
<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×
</button>
<i class="icon fa fa-check"></i>{{ message|capfirst }}
</div>
{% elif message.tags == 'error' %}
<div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×
</button>
<i class="icon fa fa-ban"></i>{{ message|capfirst }}
</div>
{% elif message.tags == 'warning' %}
<div class="alert alert-warning alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×
</button>
<i class="icon fa fa-exclamation-triangle"></i>{{ message|capfirst }}
</div>
{% elif message.tags == 'info' %}
<div class="alert alert-info alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×
</button>
<i class="icon fa fa-info"></i>{{ message|capfirst }}
</div>
{% endif %}
{% endfor %}
{% endblock messages %}
<div class="row">
{% block content %} {% endblock %}
</div>
</section>
</div>
</div>
{% endblock %}
</div>
{% block footer %}
{% if not is_popup %}
<footer class="main-footer {{ jazzmin_ui.footer_classes }}">
<div class="float-right d-none d-sm-inline">
<b>{% trans 'Jazzmin version' %}</b> {% get_jazzmin_version %}
</div>
{% autoescape off %}
<strong>{% trans 'Copyright' %} &copy; {% now 'Y' %} {{ jazzmin_settings.copyright }}.</strong> {% trans 'All rights reserved.' %}
{% endautoescape %}
</footer>
{% if jazzmin_settings.show_ui_builder %}
{% include 'jazzmin/includes/ui_builder_panel.html' %}
{% endif %}
{% endif %}
{% endblock %}
</div>
{% if jazzmin_settings.show_ui_builder %}
<div id="codeBox" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{% trans 'UI Configuration' %}</h4>
<button type="button" class="close" data-dismiss="modal">&times;</button>
</div>
<div class="modal-body">
<p>{% trans 'Copy this info your settings file to persist these UI changes' %}</p>
<pre><code></code></pre>
</div>
<div class="modal-footer">
<button type="button" class="btn {{ jazzmin_ui.button_classes.danger }}" data-dismiss="modal">{% trans 'Close' %}</button>
</div>
</div>
</div>
</div>
{% endif %}
<!-- jQuery -->
<script src="{% static "admin/js/vendor/jquery/jquery.js" %}"></script>
<!-- Bootstrap 4 -->
<script src="{% static "vendor/bootstrap/js/bootstrap.min.js" %}"></script>
<!-- AdminLTE App -->
<script src="{% static "vendor/adminlte/js/adminlte.min.js" %}"></script>
<!-- Django customisations -->
<script src="{% static "jazzmin/js/main.js" %}"></script>
{% if jazzmin_settings.custom_js %}
<script src="{% static jazzmin_settings.custom_js %}"></script>
{% endif %}
{% if jazzmin_settings.show_ui_builder %}
<script>
window.ui_changes = {{ jazzmin_ui.raw|as_json|safe }};
</script>
<script src="{% static "jazzmin/js/ui-builder.js" %}"></script>
{% endif %}
{% block extrajs %}{% endblock %}
</body>
</html>

View File

@@ -0,0 +1 @@
{% extends 'admin/base.html' %}

View File

@@ -0,0 +1,128 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_urls static admin_modify jazzmin %}
{% get_jazzmin_settings request as jazzmin_settings %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" href="{% static 'vendor/select2/css/select2.min.css' %}">
{% endblock %}
{% block extrahead %}
{{ block.super }}
<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
{{ media }}
{% endblock %}
{% block coltype %}colM{% endblock %}
{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %}
{% if not is_popup %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a></li>
<li class="breadcrumb-item">
{% if has_view_permission %}
<a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>
{% else %}
{{ opts.verbose_name_plural|capfirst }}
{% endif %}
</li>
<li class="breadcrumb-item active">
{% if add %}
{% blocktrans with name=opts.verbose_name %}Add {{ name }}{% endblocktrans %}
{% else %}
{{ original|truncatewords:"18" }}
{% endif %}
</li>
</ol>
{% endblock %}
{% endif %}
{% block content_title %} {{ opts.verbose_name_plural|capfirst }} {% endblock %}
{% block content %}
<div id="content-main" class="col-12">
<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form" novalidate>
{% csrf_token %}
{% block form_top %}{% endblock %}
{% if errors %}
<div class="alert alert-danger">
{% if errors|length == 1 %}
{% trans "Please correct the error below." %}
{% else %}
{% trans "Please correct the errors below." %}
{% endif %}
</div>
{% for error in adminform.form.non_field_errors %}
<div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<i class="icon fa fa-ban"></i>{{ error|capfirst }}
</div>
{% endfor %}
{% endif %}
<div class="row">
{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1">{% endif %}
{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}">{% endif %}
{% block field_sets %}
<div class="col-12 col-lg-9">
<div class="card">
<div class="card-body">
{% get_changeform_template adminform as changeform_template %}
{% include changeform_template %}
</div>
</div>
</div>
{% endblock %}
{% block after_field_sets %}{% endblock %}
{% block inline_field_sets %}{% endblock %}
{% block after_related_objects %}{% endblock %}
<div class="col-12 col-lg-3">
<div id="jazzy-actions" class="{{ jazzmin_ui.actions_classes }}">
{% block submit_buttons_bottom %}
{% submit_row %}
{% block object-tools %}
{% if change %}
{% if not is_popup %}
<div class="object-tools">
{% block object-tools-items %}
{% change_form_object_tools %}
{% block extra_actions %}{% endblock %}
{% endblock %}
</div>
{% endif %}
{% endif %}
{% endblock %}
{% endblock %}
</div>
</div>
{% block admin_change_form_document_ready %}
<script type="text/javascript" id="django-admin-form-add-constants" src="{% static 'admin/js/change_form.js' %}" {% if adminform and add %}data-model-name="{{ opts.model_name }}"{% endif %}></script>
{% endblock %}
{% prepopulated_fields_js %}
</div>
</form>
</div>
{% endblock %}
{% block extrajs %}
{{ block.super }}
<script type="text/javascript" src="{% static 'vendor/select2/js/select2.min.js' %}"></script>
<script type="text/javascript" src="{% static 'jazzmin/js/change_form.js' %}"></script>
{% if jazzmin_settings.related_modal_active %}
<script type="text/javascript" src="{% static 'jazzmin/plugins/bootstrap-show-modal/bootstrap-show-modal.min.js' %}"></script>
<script type="text/javascript" src="{% static 'jazzmin/js/related-modal.js' %}"></script>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,10 @@
{% load i18n admin_urls jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% block object-tools-items %}
{% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
<a class="btn btn-block {{ jazzmin_ui.button_classes.secondary }} btn-sm" href="{% add_preserved_filters history_url %}">{% trans 'History' %}</a>
{% if has_absolute_url %}
<a href="{{ absolute_url }}" class="btn btn-block {{ jazzmin_ui.button_classes.secondary }} btn-sm">{% trans "View on site" %}</a>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,122 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_urls static admin_list jazzmin %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" href="{% static 'vendor/select2/css/select2.min.css' %}">
{% if cl.formset or action_form %}
<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
{% endif %}
{{ media.css }}
{% if not actions_on_top and not actions_on_bottom %}
<style>
#changelist table thead th:first-child {width: inherit}
</style>
{% endif %}
{% endblock %}
{% block extrahead %}
{{ block.super }}
{{ media.js }}
{% endblock %}
{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-list{% endblock %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a></li>
<li class="breadcrumb-item active">{{ cl.opts.verbose_name_plural|capfirst }}</li>
</ol>
{% endblock %}
{% block content_title %} {{ cl.opts.verbose_name_plural|capfirst }} {% endblock %}
{% block coltype %}flex{% endblock %}
{% block page_actions %}
<div class="col-12 col-md-auto d-flex align-items-center justify-content-end page-actions">
{% block object-tools %}
{% block object-tools-items %}
{% change_list_object_tools %}
{% endblock %}
{% endblock %}
</div>
{% endblock %}
{% block content %}
{% block date_hierarchy %}{% if cl.date_hierarchy %}{% date_hierarchy cl %}{% endif %}{% endblock %}
{% block search %}
{% search_form cl %}
{% endblock %}
<div class="col-12">
<div>
<form id="changelist-form" method="post"{% if cl.formset and cl.formset.is_multipart %}enctype="multipart/form-data"{% endif %} novalidate>{% csrf_token %}
<div id="content-main">
{% if cl.formset and cl.formset.errors %}
<div class="alert alert-warning" role="alert">
{% if cl.formset.total_error_count == 1 %}
{% trans "Please correct the error below." %}
{% else %}
{% trans "Please correct the errors below." %}
{% endif %}
</div>
{{ cl.formset.non_form_errors }}
{% endif %}
<div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
<div class="row">
<div class="col-12">
{% if cl.formset %}
<div>{{ cl.formset.management_form }}</div>
{% endif %}
{% block result_list %}
<div class="change-list-actions row pb-3">
<div class="col-12">
{% if action_form and actions_on_top and cl.show_admin_actions %}
{% admin_actions %}
{% endif %}
</div>
</div>
{% result_list cl %}
{% if action_form and actions_on_bottom and cl.show_admin_actions %}
<div class="row">
<div class="col-12">
{% admin_actions %}
</div>
</div>
{% endif %}
{% endblock %}
</div>
</div>
<div class="row">
{% block pagination %}{% pagination cl %}{% endblock %}
</div>
</div>
</div>
</form>
</div>
<br class="clear"/>
</div>
{% endblock %}
{% block extrajs %}
{{ block.super }}
<script type="text/javascript" src="{% static 'vendor/select2/js/select2.min.js' %}"></script>
<script>
{% comment %} set filterInputLength default and custom values {% endcomment %}
window.filterInputLengthDefault = 0;
window.filterInputLength = {
{% for k,v in cl.model_admin.filter_input_length.items %}
'{{ k }}': {{ v }},
{% endfor %}
}
</script>
<script type="text/javascript" src="{% static 'jazzmin/js/change_list.js' %}"></script>
{% endblock %}

View File

@@ -0,0 +1,11 @@
{% load i18n admin_urls jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% block object-tools-items %}
{% if has_add_permission %}
{% url cl.opts|admin_urlname:'add' as add_url %}
<a href="{% add_preserved_filters add_url is_popup to_field %}" class="btn {{ jazzmin_ui.button_classes.success }} float-right">
<i class="fa fa-plus-circle"></i> &nbsp; {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
</a>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,48 @@
{% load i18n static jazzmin %}
{% if result_hidden_fields %}
<div class="hiddenfields">
{% for item in result_hidden_fields %}{{ item }}{% endfor %}
</div>
{% endif %}
{% if results %}
<div class="card">
<div class="card-body table-responsive p-0">
<table id="result_list" class="table table-striped">
<thead>
<tr>
{% for header in result_headers %}
<th class="{% header_class header forloop %}" tabindex="0" rowspan="1" colspan="1">
<div class="text">
{% if header.sortable %}
<a href="{{ header.url_primary }}">{{ header.text|capfirst }}</a>
{% else %}
<span>{{ header.text|capfirst }}</span>
{% endif %}
{% if header.sorted %}
<a href="{{ header.url_remove }}">
<div style="margin-top: .2em;" class="fa fa-times float-right"> </div>
</a>
{% if header.ascending %}
<i style="margin-top: .2em;" class="fa fa-sort-alpha-down"> </i>
{% else %}
<i style="margin-top: .2em;" class="fa fa-sort-alpha-up"> </i>
{% endif %}
{% endif %}
</div>
</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for result in results %}
<tr role="row" class="{% cycle 'even' 'odd' %}">
{% for item in result %}{{ item }}{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endif %}

View File

@@ -0,0 +1,23 @@
{% load jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% if show %}
<div class="col-12 pb-4" id="change-list-date-hierarchy">
<div class="btn-group date-hierarchy text-sm">
{% block date-hierarchy-toplinks %}
{% block date-hierarchy-back %}
{% if back %}
<a class="btn {{ jazzmin_ui.button_classes.secondary }}" href="{{ back.link }}">&lsaquo; {{ back.title }}</a>
{% endif %}
{% endblock %}
{% block date-hierarchy-choices %}
{% for choice in choices %}
<a {% if choice.link %}href="{{ choice.link }}" class="btn {{ jazzmin_ui.button_classes.primary }}"{% else %}class="btn {{ jazzmin_ui.button_classes.primary }} active"{% endif %}>
{{ choice.title }}
</a>
{% endfor %}
{% endblock %}
{% endblock %}
</div>
</div>
{% endif %}

View File

@@ -0,0 +1,79 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_urls static jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% block extrahead %}
{{ block.super }}
{{ media }}
<script type="text/javascript" src="{% static 'admin/js/cancel.js' %}"></script>
{% endblock %}
{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation{% endblock %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a></li>
<li class="breadcrumb-item"><a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a></li>
<li class="breadcrumb-item"><a href="{% url opts|admin_urlname:'change' object.pk|admin_urlquote %}">{{ object|truncatewords:"18" }}</a></li>
<li class="breadcrumb-item active">{% trans 'Delete' %}</li>
</ol>
{% endblock %}
{% block content_title %} {% trans 'Delete' %} {% endblock %}
{% block content %}
<div class="col-12">
<div class="card card-danger card-outline">
<div class="card-header with-border">
<h4 class="card-title">
{% trans 'Delete' %} {{ object|truncatewords:"18" }}
</h4>
</div>
<div class="card-body">
<div id="content-main">
{% if perms_lacking %}
<p>{% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}</p>
<ol>
{% for obj in perms_lacking %}
<li>{{ obj }}</li>
{% endfor %}
</ol>
{% elif protected %}
<p>{% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would require deleting the following protected related objects:{% endblocktrans %}</p>
<ol>
{% for obj in protected %}
<li>{{ obj }}</li>
{% endfor %}
</ol>
{% else %}
<p>{% blocktrans with escaped_object=object %}Are you sure you want to delete the {{ object_name }} "{{ escaped_object }}"? All of the following related items will be deleted:{% endblocktrans %}</p>
<div class="row">
<div class="col-12 col-sm-9">
<h4>{% trans "Objects" %}</h4>
<ol>{{ deleted_objects|unordered_list }}</ol>
</div>
<div class="col-12 col-sm-3">
{% include "admin/includes/object_delete_summary.html" %}
<form method="post">{% csrf_token %}
<input type="hidden" name="post" value="yes">
{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1">{% endif %}
{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}">{% endif %}
<div class="form-group">
<input type="submit" class="btn {{ jazzmin_ui.button_classes.danger }} form-control" value="{% trans 'Yes, Im sure' %}">
</div>
<div class="form-group">
<a href="#" class="btn {{ jazzmin_ui.button_classes.danger }} cancel-link form-control">{% trans "No, take me back" %}</a>
</div>
</form>
</div>
</div>
{% endif %}
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,83 @@
{% extends "admin/base_site.html" %}
{% load i18n l10n admin_urls static jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% block extrahead %}
{{ block.super }}
{{ media }}
<script type="text/javascript" src="{% static 'admin/js/cancel.js' %}"></script>
{% endblock %}
{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation delete-selected-confirmation{% endblock %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a></li>
<li class="breadcrumb-item"><a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a></li>
<li class="breadcrumb-item active">{% trans 'Delete multiple objects' %}</li>
</ol>
{% endblock %}
{% block content_title %} {% trans 'Delete multiple objects' %} {% endblock %}
{% block content %}
<div class="col-12">
<div class="card card-danger card-outline">
<div class="card-header with-border">
<h4 class="card-title">
{% trans 'Delete multiple objects' %}
</h4>
</div>
<div class="card-body">
<div id="content-main">
{% if perms_lacking %}
<p>{% blocktrans %}Deleting the selected {{ objects_name }} would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}</p>
<ol>
{% for obj in perms_lacking %}
<li>{{ obj }}</li>
{% endfor %}
</ol>
{% elif protected %}
<p>{% blocktrans %}Deleting the selected {{ objects_name }} would require deleting the following protected related objects:{% endblocktrans %}</p>
<ol>
{% for obj in protected %}
<li>{{ obj }}</li>
{% endfor %}
</ol>
{% else %}
<p>{% blocktrans %}Are you sure you want to delete the selected {{ objects_name }}? All of the following objects and their related items will be deleted:{% endblocktrans %}</p>
<div class="row">
<div class="col-12 col-sm-9">
<h4>{% trans "Objects" %}</h4>
{% for deletable_object in deletable_objects %}
<ol>{{ deletable_object|unordered_list }}</ol>
{% endfor %}
</div>
<div class="col-12 col-sm-3">
{% include "admin/includes/object_delete_summary.html" %}
<hr />
<form method="post">
{% csrf_token %}
{% for obj in queryset %}
<input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk|unlocalize }}">
{% endfor %}
<input type="hidden" name="action" value="delete_selected">
<input type="hidden" name="post" value="yes">
<div class="form-group">
<input type="submit" class="btn {{ jazzmin_ui.button_classes.danger }} form-control" value="{% trans 'Yes, Im sure' %}">
</div>
<div class="form-group">
<a href="#" class="btn {{ jazzmin_ui.button_classes.danger }} cancel-link form-control">{% trans "No, take me back" %}</a>
</div>
</form>
</div>
</div>
{% endif %}
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,58 @@
{% load i18n admin_urls static %}
<div class="js-inline-admin-formset inline-group" id="{{ inline_admin_formset.formset.prefix }}-group" data-inline-type="stacked" data-inline-formset="{{ inline_admin_formset.inline_formset_data }}">
<fieldset class="module {{ inline_admin_formset.classes }} card card-outline">
<div class="card-body">
{{ inline_admin_formset.formset.management_form }}
{{ inline_admin_formset.formset.non_form_errors }}
{% for inline_admin_form in inline_admin_formset %}
<div class="panel inline-related{% if inline_admin_form.original or inline_admin_form.show_url %} has_original{% endif %}{% if forloop.last and inline_admin_formset.has_add_permission %} empty-form last-related{% endif %}"
id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
<div class="card card-outline {% if not inline_admin_form.original %}new-stacked card-success{% else %}card-secondary{% endif %}">
<div class="card-header">
<h3 class="card-title">
<span class="card-tools text-sm">
{% if inline_admin_form.original %}
{% if inline_admin_form.model_admin.show_change_link and inline_admin_form.model_admin.has_registered_model %}
<a
href="{% url inline_admin_form.model_admin.opts|admin_urlname:'change' inline_admin_form.original.pk|admin_urlquote %}"
class="{% if inline_admin_formset.has_change_permission %}inlinechangelink{% else %}inlineviewlink{% endif %}">
{% if inline_admin_formset.has_change_permission %}
<i class="fas fa-pencil-alt fa-sm"> </i>
{% else %}
<i class="fas fa-eye fa-sm"> </i>
{% endif %}
</a>
{% endif %}
{{ inline_admin_form.original }}
{% else %}
<i class="fas fa-plus fa-sm text-success"> </i>
{% trans "New" %} {{ inline_admin_formset.opts.verbose_name|capfirst }}
{% endif %}
</span>
{% if inline_admin_form.show_url %}
<a href="{{ inline_admin_form.absolute_url }}" title="{% trans "View on site" %}">
<i class="fas fa-eye fa-sm"> </i>
</a>
{% endif %}
</h3>
{% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission and inline_admin_form.original %}
<span class="card-tools delete">
{{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }}
</span>
{% endif %}
</div>
<div class="card-body">
{% if inline_admin_form.form.non_field_errors %}{{ inline_admin_form.form.non_field_errors }}{% endif %}
{% for fieldset in inline_admin_form %}
{% include "admin/includes/fieldset.html" %}
{% endfor %}
{% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
{% if inline_admin_form.fk_field %}{{ inline_admin_form.fk_field.field }}{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>
</fieldset>
</div>

View File

@@ -0,0 +1,94 @@
{% load i18n admin_urls static admin_modify %}
<div class="js-inline-admin-formset inline-group" id="{{ inline_admin_formset.formset.prefix }}-group"
data-inline-type="tabular"
data-inline-formset="{{ inline_admin_formset.inline_formset_data }}">
<div class="tabular inline-related {% if forloop.last %}last-related{% endif %}">
{{ inline_admin_formset.formset.management_form }}
<fieldset class="module {{ inline_admin_formset.classes }}">
{{ inline_admin_formset.formset.non_form_errors }}
<table class="table table-hover text-nowrap">
<thead><tr>
<th class="original"></th>
{% for field in inline_admin_formset.fields %}
{% if not field.widget.is_hidden %}
<th class="column-{{ field.name }}{% if field.required %} required{% endif %}">{{ field.label|capfirst }}
{% if field.help_text %}<img src="{% static "admin/img/icon-unknown.svg" %}" class="help help-tooltip" width="10" height="10" alt="({{ field.help_text|striptags }})" title="{{ field.help_text|striptags }}">{% endif %}
</th>
{% endif %}
{% endfor %}
{% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission %}<th>{% trans "Delete?" %}</th>{% endif %}
</tr></thead>
<tbody>
{% for inline_admin_form in inline_admin_formset %}
{% if inline_admin_form.form.non_field_errors %}
<tr class="row-form-errors"><td colspan="{{ inline_admin_form|cell_count }}">{{ inline_admin_form.form.non_field_errors }}</td></tr>
{% endif %}
<tr class="form-row{% if inline_admin_form.original or inline_admin_form.show_url %} has_original{% endif %}{% if forloop.last and inline_admin_formset.has_add_permission %} empty-form{% endif %}"
id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
<td class="original">
{% if inline_admin_form.original or inline_admin_form.show_url %}
<p>
{% if inline_admin_form.original %}
{% if inline_admin_form.model_admin.show_change_link and inline_admin_form.model_admin.has_registered_model %}
<a
href="{% url inline_admin_form.model_admin.opts|admin_urlname:'change' inline_admin_form.original.pk|admin_urlquote %}"
class="{% if inline_admin_formset.has_change_permission %}inlinechangelink{% else %}inlineviewlink{% endif %}">
{% if inline_admin_formset.has_change_permission %}
<i class="fas fa-pencil-alt fa-sm"> </i>
{% else %}
<i class="fas fa-eye fa-sm"> </i>
{% endif %}
</a>
{% endif %}
{% if inline_admin_form.show_url %}
<a href="{{ inline_admin_form.absolute_url }}" title="{% trans "View on site" %}">
<i class="fas fa-eye fa-sm"> </i>
</a>
{% endif %}
{% endif %}
</p>
{% else %}
<i class="fas fa-plus fa-sm text-success"> </i>
{% endif %}
{% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
{% if inline_admin_form.fk_field %}{{ inline_admin_form.fk_field.field }}{% endif %}
{% spaceless %}
{% for fieldset in inline_admin_form %}
{% for line in fieldset %}
{% for field in line %}
{% if not field.is_readonly and field.field.is_hidden %}{{ field.field }}{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
{% endspaceless %}
</td>
{% for fieldset in inline_admin_form %}
{% for line in fieldset %}
{% for field in line %}
{% if field.is_readonly or not field.field.is_hidden %}
<td {% if field.field.name %} class="field-{{ field.field.name }}"{% endif %}>
{% if field.is_readonly %}
<p>{{ field.contents }}</p>
{% else %}
{{ field.field }}
<div class="help-block text-red">
{{ field.field.errors.as_ul }}
</div>
{% endif %}
</td>
{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
{% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission %}
<td class="delete">{% if inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }}{% endif %}</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</fieldset>
</div>
</div>

View File

@@ -0,0 +1,30 @@
{% load i18n %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}" title="{% trans 'Go back to admin homepage' %}"><i class="fas fa-tachometer-alt"></i> {% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a></li>
{% if not instance.is_root and instance.is_smart_folder %}
<li class="breadcrumb-item">
<a href="{% url 'admin:filer-directory_listing-root' %}" title="{% trans 'Go back to root folder' %}">{% trans "root" %}</a>
</li>
{% endif %}
{% for ancestor_folder in instance.logical_path %}
<li class="breadcrumb-item">
<a href="{{ ancestor_folder.get_admin_directory_listing_url_path }}" title="{% blocktrans with ancestor_folder.name as folder_name %}Go back to '{{ folder_name }}' folder{% endblocktrans %}">
{% if ancestor_folder.label %}
{{ ancestor_folder.label }}
{% else %}
{{ ancestor_folder.name }}
{% endif %}
</a>
</li>
{% endfor %}
{% if breadcrumbs_action %}
<li class="breadcrumb-item">{% if instance.label or instance.name %}
<a href="{{ instance.get_admin_directory_listing_url_path }}" title="{% blocktrans with instance.name as folder_name %}Go back to '{{ folder_name }}' folder{% endblocktrans %}">{% if instance.label %}{{ instance.label }}{% else %}{{ instance.name }}{% endif %}</a></li>
{% endif %}
<li class="breadcrumb-item active">{{ breadcrumbs_action }}</li>
{% else %}
<li class="breadcrumb-item active">{% if instance.label %}{{ instance.label }}{% else %}{{ instance.name }}{% endif %}</li>
{% endif %}
</ol>

View File

@@ -0,0 +1,33 @@
{% extends "admin/change_form.html" %}
{% load i18n admin_modify static filer_admin_tags %}
{% block breadcrumbs %}
{% with original as instance %}
{% include "admin/filer/breadcrumbs.html" %}
{% endwith %}
{% endblock %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static 'filer/css/admin_filer.css' %}">
{% endblock %}
{% block after_field_sets %}
{% filer_admin_context_hidden_formfields %}
{% endblock %}
{% block file_sidebar %}
{% with original.duplicates as duplicates %}
{% if duplicates %}
<div class="file-duplicates">
<h3>{% trans "Duplicates" %}</h3>
<ul>
{% for duplicate in duplicates %}
<li><a href="{{ duplicate.get_admin_change_url }}">{{ duplicate }}</a></li>
{% endfor %}
</ul>
</div>
{% endif %}
{% endwith %}
{% endblock %}

View File

@@ -0,0 +1,75 @@
{% extends "admin/delete_selected_confirmation.html" %}
{% load i18n static admin_urls static jazzmin %}
{% block breadcrumbs %}
{% include "admin/filer/breadcrumbs.html" %}
{% endblock %}
{% block content %}
<div class="col-12">
<div class="card card-danger card-outline">
<div class="card-header with-border">
<h4 class="card-title">
{% trans 'Delete multiple objects' %}
</h4>
</div>
<div class="card-body">
<div id="content-main">
{% if perms_lacking or protected %}
{% if perms_lacking %}
<p>{% blocktrans %}Deleting the selected files and/or folders would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}</p>
<ol>
{% for obj in perms_lacking %}
<li>{{ obj }}</li>
{% endfor %}
</ol>
{% endif %}
{% if protected %}
<p>{% blocktrans %}Deleting the selected files and/or folders would require deleting the following protected related objects:{% endblocktrans %}</p>
<ol>
{% for obj in protected %}
<li>{{ obj }}</li>
{% endfor %}
</ol>
{% endif %}
{% else %}
<p>{% blocktrans %}Are you sure you want to delete the selected files and/or folders? All of the following objects and their related items will be deleted:{% endblocktrans %}</p>
<div class="row">
<div class="col-12 col-sm-9">
<h4>{% trans "Objects" %}</h4>
{% for deletable_object in deletable_objects %}
<ol>{{ deletable_object|unordered_list }}</ol>
{% endfor %}
</div>
<div class="col-12 col-sm-3">
<form action="" method="post">
{% csrf_token %}
{% for f in files_queryset %}
<input type="hidden" name="{{ action_checkbox_name }}" value="file-{{ f.pk }}">
{% endfor %}
{% for f in folders_queryset %}
<input type="hidden" name="{{ action_checkbox_name }}" value="folder-{{ f.pk }}">
{% endfor %}
{% if is_popup %}
<input type="hidden" name="_popup" value="1">
{% if select_folder %}<input type="hidden" name="select_folder" value="1">{% endif %}
{% endif %}
<input type="hidden" name="action" value="delete_files_or_folders">
<input type="hidden" name="post" value="yes">
<div class="form-group">
<input type="submit" class="btn {{ jazzmin_ui.button_classes.danger }} form-control" value="{% trans 'Yes, Im sure' %}">
</div>
<div class="form-group">
<a href="#" onclick="window.history.back(); return false;" class="btn {{ jazzmin_ui.button_classes.danger }} cancel-link form-control">{% trans "No, take me back" %}</a>
</div>
</form>
</div>
</div>
{% endif %}
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,36 @@
{% extends "admin/filer/change_form.html" %}
{% load admin_modify static %}
{% block extrahead %}
{{ block.super }}
{# upload stuff #}
<script type="text/javascript">
var __jQuery = django.jQuery;
window.jQuery = (__jQuery) ? __jQuery : window.jQuery || undefined;
window.$ = window.jQuery;
</script>
<script src="{% static 'filer/js/libs/class.min.js' %}"></script>
<script src="{% static 'filer/js/libs/jquery-ui.min.js' %}"></script>
<script src="{% static 'filer/js/libs/jquery.cookie.min.js' %}"></script>
<script src="{% static 'filer/js/libs/fileuploader.min.js' %}"></script>
<script src="{% static 'filer/js/libs/mediator.min.js' %}"></script>
<script src="{% static 'filer/js/libs/retina.min.js' %}"></script>
<script src="{% static 'admin/js/admin/RelatedObjectLookups.js' %}"></script>
<script src="{% static 'filer/js/addons/popup_handling.js' %}"></script>
<script src="{% static 'filer/js/addons/focal-point.js' %}"></script>
<script src="{% static 'filer/js/addons/toggler.js' %}"></script>
<script src="{% static 'filer/js/base.js' %}"></script>
<script type="text/javascript">
var __jQuery;
var __$;
// reassign jQuery if jQuery is already loaded
__jQuery = (window.jQuery) ? window.jQuery.noConflict(true) : undefined;
__$ = __jQuery;
</script>
{% endblock %}
{% block submit_buttons_bottom %}
{% include "admin/filer/tools/detail_info.html" with file=True %}
{{ block.super }}
{% endblock %}

View File

@@ -0,0 +1,33 @@
{% extends "admin/change_form.html" %}
{% load i18n admin_modify static filer_admin_tags %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}" title="{% trans 'Go back to admin homepage' %}"><i class="fas fa-tachometer-alt"></i> {% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a></li>
<li class="breadcrumb-item">
<a href="{% url 'admin:filer-directory_listing-root' %}" title="{% trans 'Go back to' %} '{% trans 'root'|title %}' {% trans 'folder' %}">{% trans "root"|title %}</a>
</li>
{% for ancestor_folder in original.get_ancestors %}
<li class="breadcrumb-item">
<a href="{% url 'admin:filer-directory_listing' ancestor_folder.id %}" title="{% blocktrans with ancestor_folder.name as folder_name %}Go back to '{{ folder_name }}' folder{% endblocktrans %}">{{ ancestor_folder.name }}</a>
</li>
{% endfor %}
<li class="breadcrumb-item active">{{ original.name }}</li>
</ol>
{% endblock %}
{% block coltype %}{% if is_popup %}colM{% else %}colMS{% endif %}{% endblock %}
{% block object-tools %}
{% if change and not is_popup %}
<a class="btn btn-block {{ jazzmin_ui.button_classes.secondary }} btn-sm" href="{% url history_url object_id %}">{% trans 'History' %}</a>
{% if has_absolute_url %}
<a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="btn btn-block {{ jazzmin_ui.button_classes.secondary }} btn-sm">{% trans "View on site" %}</a>
{% endif%}
{% endif %}
{% endblock %}
{% block after_field_sets %}
{% filer_admin_context_hidden_formfields %}
{% endblock %}

View File

@@ -0,0 +1,258 @@
{% extends "admin/filer/base_site.html" %}
{% load i18n static filer_admin_tags %}
{% block extrahead %}
{{ block.super }}
{% if action_form and actions_on_top or actions_on_bottom %}
<script type="text/javascript">
(function($) {
$(document).ready(function($) {
$('tr input.action-select').actions();
});
})(django.jQuery);
</script>
{% endif %}
{% endblock %}
{% block coltype %}{% endblock %}
{% block bodyclass %}change-list filebrowser{% endblock %}
{% block extrastyle %}
{{ block.super }}
{{ media.css }}
{% if action_form %}
{% url 'admin:jsi18n' as jsi18nurl %}
<script type="text/javascript" src="{{ jsi18nurl|default:'../../jsi18n/' }}"></script>
{% endif %}
{% if query.pop %}
<style type="text/css">
#header {
display: none;
}
</style>
{% endif %}
{% endblock %}
{% block breadcrumbs %}
{% if not is_popup %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}" title="{% trans 'Go back to admin homepage' %}"><i class="fas fa-tachometer-alt"></i> {% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'admin:app_list' app_label='filer' %}">Файлы</a></li>
{% if not folder.is_root and folder.is_smart_folder %}
<li class="breadcrumb-item"><a href="{% url 'admin:filer-directory_listing-root' %}" title="{% trans 'Go back to root folder' %}">{% trans "root" %}</a></li>
{% endif %}
{% for ancestor_folder in folder.logical_path %}
<li class="breadcrumb-item">
<a href="{{ ancestor_folder.get_admin_directory_listing_url_path }}"
title="{% blocktrans with ancestor_folder.name as folder_name %}Go back to '{{ folder_name }}' folder{% endblocktrans %}">
{% if ancestor_folder.label %}{{ ancestor_folder.label }}{% else %}{{ ancestor_folder.name }}{% endif %}
</a>
</li>
{% endfor %}
{% if breadcrumbs_action %}
<li class="breadcrumb-item">
<a href="{{ folder.get_admin_directory_listing_url_path }}"
title="{% blocktrans with folder.name as folder_name %}Go back to '{{ folder_name }}' folder{% endblocktrans %}">
{% if folder.label %}
{{ folder.label }}
{% else %}
{{ folder.name }}
{% endif %}
</a>
</li>
<li class="breadcrumb-item active">{{ breadcrumbs_action }}</li>
{% else %}
{% if folder.label %}
<li class="breadcrumb-item active">{{ folder.label }}</li>
{% else %}
<li class="breadcrumb-item active">{{ folder.name }}</li>
{% endif %}
{% endif %}
</ol>
<div class="breadcrumbs">
</div>
{% endif %}
{% endblock %}
{% block content %}
<div class="navigator-top-nav clearfix">
<div class="breadcrumbs-container-wrapper">
<div class="breadcrumbs-container">
<div class="breadcrumbs-container-inner">
{% for ancestor_folder in instance.logical_path %}
{{ ancestor_folder }}
{% endfor %}
<div class="navigator-breadcrumbs">
<div class="filer-navigator-breadcrumbs-dropdown-container filer-dropdown-container">
<a href="#" data-toggle="filer-dropdown" aria-expanded="false">
<img src="{% static 'filer/icons/breadcrubms_dropdown_28_28.png' %}" alt="" width="28" height="28">
</a>
<ul class="filer-dropdown-menu navigator-breadcrumbs-dropdown">
{% for folder in folder.logical_path %}
<li>
<a href="{% url 'admin:filer-directory_listing' folder.id %}{% filer_admin_context_url_params %}"
title="{% trans 'Go back to the parent folder' %}">
<img src="{% static 'filer/icons/plainfolder_48x48.png' %}" alt="{% trans 'Folder Icon' %}" width="28" height="28">
{{ folder.name }}
</a>
</li>
{% endfor %}
<li>
<a href="{% url 'admin:filer-directory_listing-root' %}{% filer_admin_context_url_params %}"
title="{% trans 'Go back to' %} {% trans 'root'|title %} {% trans 'folder' %}">
<img src="{% static 'filer/icons/root_28x28.png' %}" alt="{% trans 'Folder Icon' %}" width="28" height="28">
Root
</a>
</li>
</ul>
</div>
{% if not folder.is_root or folder.is_smart_folder %}
<span class="icon fa fa-chevron-right"></span>
{% endif %}
</div>
<div class="navigator-breadcrumbs-name-dropdown-wrapper">
{% if not folder.is_root or folder.is_smart_folder %}
<div class="navigator-breadcrumbs-folder-name-wrapper">
<span class="navigator-breadcrumbs-folder-name">
<span class="navigator-breadcrumbs-folder-name-inner">
{{ folder.name }}
</span>
</span>
</div>
<div class="filer-dropdown-container filer-dropdown-container-down">
{% if not is_popup and folder.file_type == 'Folder' and permissions.has_edit_permission %}
<a href="#" data-toggle="filer-dropdown" aria-expanded="false">
<span class="fa fa-caret-down"></span>
</a>
<ul class="filer-dropdown-menu">
<li>
<a href="{% url 'admin:filer_folder_change' folder.id %}" title="{% trans 'Change current folder details' %}">{% trans "Change" %}</a>
</li>
</ul>
{% endif %}
</div>
{% endif %}
<div class="empty-filer-header-cell"></div>
</div>
<form class="filter-files-container js-filter-files-container" action="." method="get" class="js-filer-search-form">
<div class="filter-filers-container-inner">
<button class="navigator-button filter-files-button" title="{% trans 'Click here to run search for entered phrase' %}"><span class="icon fa fa-search"></span></button>
<div class="filter-search-wrapper">
{% filer_admin_context_hidden_formfields %}
<input type="text" placeholder="{% trans 'Search' %}" class="filter-files-field js-filter-files" value="{{ search_string }}" name="q">
<div class="filer-dropdown-container filer-dropdown-container-down">
<a href="#" data-toggle="filer-dropdown" aria-expanded="false">
<span class="fa fa-caret-down"></span>
</a>
</div>
<ul class="filer-dropdown-menu filer-dropdown-menu-checkboxes">
<span class="fa fa-close js-close-dropdown-menu-checkboxes"><span class="sr-only">{% trans "Close" %}</span></span>
<li>
<p>{% trans "Limit" %}</p>
<label>
<input type="checkbox" id="limit_search_to_folder"
name="limit_search_to_folder"
{% if limit_search_to_folder %}checked="checked"{% endif %}
title="{% trans 'Check it to limit the search to current folder' %}">
{% trans "Limit the search to current folder" %}
</label>
</li>
</ul>
</div>
</div>
</form>
</div>
</div>
<div class="tools-container">
{% block object-tools %}
<div class="navigator-tools">
{% if not is_popup %}
<div class="actions-wrapper">
<ul class="actions-separated-list">
<li>
<a href="#" class="js-action-delete" title="{% trans 'Delete' %}"><span class="fa fa-trash"></span></a>
</li>
<li>
<a href="#" class="js-action-copy" title="{% trans 'Copy' %}"><span class="fa fa-copy"></span></a>
</li>
<li>
<a href="#" class="js-action-move" title="{% trans 'Move' %}"><span class="fa fa-cut"></span></a>
</li>
</ul>
<div class="filer-dropdown-container js-actions-menu">
<a href="#" data-toggle="filer-dropdown" aria-expanded="false" class="nav-button nav-button-dots">
<span class="fa fa-ellipsis-h"></span>
</a>
<ul class="create-menu-dropdown filer-dropdown-menu">
{# This list is populated in javascript #}
</ul>
</div>
</div>
{% endif %}
{% block object-tools-items %}
<div class="navigator-button-wrapper">
{% if folder.can_have_subfolders and can_make_folder %}
<a href="{% url 'admin:filer-directory_listing-make_root_folder' %}?parent_id={{ folder.id }}{% if is_popup %}&amp;_popup=1{% endif %}"
title="{% trans 'Adds a new Folder' %}"
class="navigator-button"
onclick="return showAddAnotherPopup(this);">
{% trans "New Folder" %}
</a>
{% endif %}
{% if permissions.has_add_children_permission and not folder.is_root %}
<a href="#" id="id_upload_button" title="{% trans 'Upload Files' %}"
class="navigator-button navigator-button-upload js-upload-button"
data-url="{% url 'admin:filer-ajax_upload' folder_id=folder.id %}"
data-max-uploader-connections="{{ uploader_connections }}">
{% trans "Upload Files" %}
</a>
{% elif folder.is_unsorted_uploads %}
<a href="#" id="id_upload_button" title="{% trans 'Upload Files' %}"
class="navigator-button navigator-button-upload js-upload-button"
data-url="{% url 'admin:filer-ajax_upload' %}"
data-max-uploader-connections="{{ uploader_connections }}">
{% trans "Upload Files" %}
</a>
{% endif %}
{% if folder.is_root and not folder.is_unsorted_uploads %}
<span class="js-upload-button-disabled upload-button-disabled js-filer-tooltip filer-tooltip-wrapper"
title="{% trans 'You have to select a folder first' %}">
<a href="#" class="navigator-button navigator-button-upload" disabled>
{% trans "Upload Files" %}
</a>
</span>
{% endif %}
</div>
{% endblock %}
</div>
{% endblock %}
</div>
</div>
</div>
<div id="content-main">
{% include "admin/filer/tools/search_form.html" %}
<div class="js-navigator navigator{% if not actions_on_top and not actions_on_bottom %}navigator-no-actions{% endif %}">
<form class="js-navigator-form" method="post">
{% csrf_token %}
{% filer_admin_context_hidden_formfields %}
{% if action_form and actions_on_top and paginator.count and not is_popup %}
{% filer_actions %}
{% endif %}
{% include "admin/filer/folder/directory_table_list.html" %}
{% if action_form and actions_on_bottom and paginator.count and not is_popup %}
{% filer_actions %}
{% endif %}
</form>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,36 @@
{% extends "admin/filer/change_form.html" %}
{% load admin_modify static %}
{% block extrahead %}
{{ block.super }}
{# upload stuff #}
<script type="text/javascript">
var __jQuery = django.jQuery;
window.jQuery = (__jQuery) ? __jQuery : window.jQuery || undefined;
window.$ = window.jQuery;
</script>
<script src="{% static 'filer/js/libs/class.min.js' %}"></script>
<script src="{% static 'filer/js/libs/jquery-ui.min.js' %}"></script>
<script src="{% static 'filer/js/libs/jquery.cookie.min.js' %}"></script>
<script src="{% static 'filer/js/libs/fileuploader.min.js' %}"></script>
<script src="{% static 'filer/js/libs/mediator.min.js' %}"></script>
<script src="{% static 'filer/js/libs/retina.min.js' %}"></script>
<script src="{% static 'admin/js/admin/RelatedObjectLookups.js' %}"></script>
<script src="{% static 'filer/js/addons/popup_handling.js' %}"></script>
<script src="{% static 'filer/js/addons/focal-point.js' %}"></script>
<script src="{% static 'filer/js/addons/toggler.js' %}"></script>
<script src="{% static 'filer/js/base.js' %}"></script>
<script type="text/javascript">
var __jQuery;
var __$;
// reassign jQuery if jQuery is already loaded
__jQuery = (window.jQuery) ? window.jQuery.noConflict(true) : undefined;
__$ = __jQuery;
</script>
{% endblock %}
{% block submit_buttons_bottom %}
{% include "admin/filer/tools/detail_info.html" %}
{{ block.super }}
{% endblock %}

View File

@@ -0,0 +1,55 @@
{% load filer_admin_tags i18n static jazzmin %}
<div class="card">
<div class="card-header">
<h3 class="card-title">
<span class="icon fa fa-file{% if original.file_type == 'Image' %}-image-o{% endif %}"></span>
{{ original }}
</h3>
</div>
<div class="card-body">
<div class="image-preview-container">
{% if file %}
<img src="{% if original.icons.48 %}{{ original.icons.48 }}{% else %}{% static 'filer/icons/missingfile_48x48.png' %}{% endif %}">
{% else %}
<div class="image-preview js-focal-point" data-location-selector="#id_subject_location">
<img src="{{ original.thumbnails.admin_sidebar_preview }}" data-ratio="{{ adminform.form.sidebar_image_ratio }}" class="js-focal-point-image">
<div class="image-preview-field">
<div class="js-focal-point-circle image-preview-circle hidden"></div>
</div>
</div>
{% endif %}
</div>
{% if original.file_type or original.modified_at or original.uploaded_at or original.width or original.height or original.size or original.owner %}
<ul>
{% if original.file_type %}
<li><b>{% trans "Type" %}</b>: {{ original.extension|upper }} {{ original.file_type }}</li>
{% endif %}
{% if original.width or original.height %}
<li><b>{% trans "Size" %}</b>: {{ original.width }}x{{ original.height }} px</li>
{% endif %}
{% if original.size %}
<li><b>{% trans "File-size" %}</b>: {{ original.size|filesizeformat }}</li>
{% endif %}
{% if original.modified_at %}
<li><b>{% trans "Modified" %}</b>: {{ original.modified_at }}</li>
{% endif %}
{% if original.uploaded_at %}
<li><b>{% trans "Created" %}</b>: {{ original.uploaded_at }}</li>
{% endif %}
{% if original.owner %}
<li><b>{% trans "Owner" %}</b>: <span class="icon fa fa-user"></span> {{ original.owner }}</li>
{% endif %}
</ul>
{% endif %}
<div class="text-center">
<a href="{{ original.url }}" target="_blank" class="btn {{ jazzmin_ui.button_classes.info }} form-control" download="{{ original.original_filename }}">
{% if file %}
{% trans "Open file" %}
{% else %}
{% trans "Full size preview" %}
{% endif %}
</a>
</div>
</div>
</div>

View File

@@ -0,0 +1,15 @@
{% load i18n %}
<div class="form-group">
<select class="form-control search-filter" style="width: 100%;" tabindex="-1" aria-hidden="true" data-name="{{ field_name }}">
<option value="">{{ title }}</option>
<option value="">---------</option>
{% for choice in choices %}
{% if choice.name %}
<option data-name="{{ choice.name }}" value="{{ choice.value }}" {% if choice.selected %}selected {% endif %}>
{{ choice.display }}
</option>
{% endif %}
{% endfor %}
</select>
</div>

View File

@@ -0,0 +1,19 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_modify %}
{% load admin_urls %}
{% load static %}
{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %}
{% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
{% if not is_popup %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a></li>
<li class="breadcrumb-item"><a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a></li>
<li class="breadcrumb-item active">{% block breadcrumbs_last %}{% endblock %}</li>
</ol>
{% endblock %}
{% endif %}

View File

@@ -0,0 +1,13 @@
{% extends "admin/change_list.html" %}
{# Original template renders object-tools only when has_add_permission is True. #}
{# This hack allows sub templates to add to object-tools #}
{% block object-tools %}
<ul class="object-tools">
{% block object-tools-items %}
{% if has_add_permission %}
{{ block.super }}
{% endif %}
{% endblock %}
</ul>
{% endblock %}

View File

@@ -0,0 +1,6 @@
{% extends "admin/import_export/change_list.html" %}
{% block object-tools-items %}
{% include "admin/import_export/change_list_export_item.html" %}
{{ block.super }}
{% endblock %}

View File

@@ -0,0 +1,8 @@
{% load i18n %}
{% load admin_urls %}
{% if has_export_permission %}
<a href="{% url opts|admin_urlname:'export' %}{{cl.get_query_string}}" class="export_link btn {{ jazzmin_ui.button_classes.secondary }}">
<i class="fas fa-file-export"></i> {% trans "Export" %}
</a>
{% endif %}

View File

@@ -0,0 +1,6 @@
{% extends "admin/import_export/change_list.html" %}
{% block object-tools-items %}
{% include "admin/import_export/change_list_import_item.html" %}
{{ block.super }}
{% endblock %}

View File

@@ -0,0 +1,9 @@
{% extends "admin/import_export/change_list.html" %}
{% block object-tools-items %}
<div class="btn-group float-right">
{% include "admin/import_export/change_list_import_item.html" %}
{% include "admin/import_export/change_list_export_item.html" %}
{{ block.super }}
</div>
{% endblock %}

View File

@@ -0,0 +1,8 @@
{% load i18n admin_urls jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% if has_import_permission %}
<a href='{% url opts|admin_urlname:"import" %}' class="import_link btn {{ jazzmin_ui.button_classes.secondary }}">
<i class="fas fa-file-import"></i> {% trans "Import" %}
</a>
{% endif %}

View File

@@ -0,0 +1,74 @@
{% extends "admin/import_export/base.html" %}
{% load i18n admin_urls static import_export_tags jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" href="{% static 'vendor/select2/css/select2.min.css' %}">
{% endblock %}
{% block breadcrumbs_last %}
{% trans "Export" %}
{% endblock %}
{% block content %}
<div class="col-12">
<form action="" method="POST" class="form-horizontal">
{% csrf_token %}
<div class="row">
<div class="col-12 col-lg-9">
<div class="card">
<div class="card-header">
<div class="card-title">
Export
</div>
</div>
<div class="card-body">
{% for field in form %}
<div class="form-group field-name">
<div class="row">
{{ field.errors }}
<div class="col-sm-2 text-left">
{{ field.label_tag }}
</div>
<div class="col-sm-10 text-left">
{{ field }}
</div>
<div class="help-block red">
{% if field.field.help_text %}
<img src="{% static "admin/img/icon-unknown.svg" %}" class="help help-tooltip" width="10" height="10" alt="({{ field.field.help_text|striptags }})" title="{{ field.field.help_text|striptags }}">
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
<div class="col-12 col-lg-3">
<div class="card">
<div class="card-header">
<h3 class="card-title">
<i class="fas fa-edit"></i>
Actions
</h3>
</div>
<div class="card-body">
<div class="form-group">
<input type="submit" class="btn {{ jazzmin_ui.button_classes.success }} form-control" value="{% trans "Submit" %}">
</div>
</div>
</div>
</div>
</div>
</form>
</div>
{% endblock %}
{% block extrajs %}
{{ block.super }}
<script type="text/javascript" src="{% static 'vendor/select2/js/select2.min.js' %}"></script>
<script type="text/javascript" src="{% static 'jazzmin/js/change_form.js' %}"></script>
{% endblock %}

View File

@@ -0,0 +1,272 @@
{% extends "admin/import_export/base.html" %}
{% load i18n admin_urls import_export_tags static jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "import_export/import.css" %}"/>
<link rel="stylesheet" href="{% static 'vendor/select2/css/select2.min.css' %}">
{% endblock %}
{% block breadcrumbs_last %}
{% trans "Import" %}
{% endblock %}
{% block content %}
<div class="col-12">
{% if confirm_form %}
<form action="{% url opts|admin_urlname:"process_import" %}" method="POST">
{% csrf_token %}
<div class="row">
<div class="col-12 col-lg-9">
<div class="card">
<div class="card-header">
<div class="card-title">
{% trans 'Confirm Import' %}
</div>
</div>
<div class="card-body">
<div class="col-12 col-lg-9">
{{ confirm_form.as_p }}
<p>
{% trans "Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'" %}
</p>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-3">
<div class="card">
<div class="card-header">
<h3 class="card-title">
<i class="fas fa-edit"></i>
{% trans 'Actions' %}
</h3>
</div>
<div class="card-body">
<div class="form-group">
<input type="submit" class="btn {{ jazzmin_ui.button_classes.success }} form-control" name="confirm" value="{% trans "Confirm import" %}">
</div>
</div>
</div>
</div>
</div>
</form>
{% else %}
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="row">
<div class="col-12 col-lg-9">
<div class="card">
<div class="card-header">
<div class="card-title">
{% trans 'Confirm Import' %}
</div>
</div>
<div class="card-body">
{% for field in form %}
<div class="form-group field-name">
<div class="row">
{{ field.errors }}
<div class="col-sm-2 text-left">
{{ field.label_tag }}
</div>
<div class="col-sm-10 text-left">
{{ field }}
</div>
<div class="help-block red">
{% if field.field.help_text %}
<img src="{% static "admin/img/icon-unknown.svg" %}" class="help help-tooltip" width="10" height="10" alt="({{ field.field.help_text|striptags }})" title="{{ field.field.help_text|striptags }}">
{% endif %}
</div>
</div>
</div>
{% endfor %}
<div class="col-12 col-lg-9">
<p>
<b>{% trans "This importer will import the following fields: " %}</b>
<ul>
{% for field in fields %}
<li>{{ field }}</li>
{% endfor %}
</ul>
</p>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-3">
<div class="card">
<div class="card-header">
<h3 class="card-title">
<i class="fas fa-edit"></i>
{% trans 'Actions' %}
</h3>
</div>
<div class="card-body">
<div class="form-group">
<input type="submit" class="btn {{ jazzmin_ui.button_classes.success }} form-control" name="confirm" value="{% trans "Submit" %}">
</div>
</div>
</div>
</div>
</div>
</form>
{% endif %}
{% if result %}
{% if result.has_errors %}
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<div class="card-title">
{% trans "Errors" %}
</div>
</div>
<div class="card-body">
<ul>
{% for error in result.base_errors %}
<li>
{{ error.error }}
<div class="language-bash traceback">
<div class="highlight">
{{ error.traceback|linebreaks }}
</div>
</div>
</li>
{% endfor %}
{% for line, errors in result.row_errors %}
{% for error in errors %}
<li>
{% trans "Line number" %}: {{ line }} - <span class="text-danger">{{ error.error }}</span>
<div>
<code>{{ error.row.values|join:", " }}</code>
</div>
<div class="language-bash traceback">
<div class="highlight">
{{ error.traceback|linebreaks }}
</div>
</div>
</li>
{% endfor %}
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
{% elif result.has_validation_errors %}
<h2>{% trans "Some rows failed to validate" %}</h2>
<p>{% trans "Please correct these errors in your data where possible, then reupload it using the form above." %}</p>
<table class="import-preview">
<thead>
<tr>
<th>{% trans "Row" %}</th>
<th>{% trans "Errors" %}</th>
{% for field in result.diff_headers %}
<th>{{ field }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in result.invalid_rows %}
<tr>
<td>{{ row.number }} </td>
<td class="errors">
<span class="validation-error-count">{{ row.error_count }}</span>
<div class="validation-error-container">
<ul class="validation-error-list">
{% for field_name, error_list in row.field_specific_errors.items %}
<li>
<span class="validation-error-field-label">{{ field_name }}</span>
<ul>
{% for error in error_list %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
{% if row.non_field_specific_errors %}
<li>
<span class="validation-error-field-label">{% trans "Non field specific" %}</span>
<ul>
{% for error in row.non_field_specific_errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</li>
{% endif %}
</ul>
</div>
</td>
{% for field in row.values %}
<td>{{ field }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<div class="card-title">
{% trans "Preview" %}
</div>
</div>
<div class="card-body table-responsive p-0" style="overflow-x:auto;">
<table class="table table-hover text-nowrap import-preview">
<thead>
<tr>
<th></th>
{% for field in result.diff_headers %}
<th>{{ field }}</th>
{% endfor %}
</tr>
</thead>
{% for row in result.valid_rows %}
<tr class="{{ row.import_type }}">
<td class="import-type">
{% if row.import_type == 'new' %}
{% trans "New" %}
{% elif row.import_type == 'skip' %}
{% trans "Skipped" %}
{% elif row.import_type == 'delete' %}
{% trans "Delete" %}
{% elif row.import_type == 'update' %}
{% trans "Update" %}
{% endif %}
</td>
{% for field in row.diff %}
<td>{{ field }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
</div>
</div>
</div>
</div>
{% endif %}
{% endif %}
</div>
{% endblock %}
{% block extrajs %}
{{ block.super }}
<script type="text/javascript" src="{% static 'vendor/select2/js/select2.min.js' %}"></script>
<script type="text/javascript" src="{% static 'jazzmin/js/change_form.js' %}"></script>
{% endblock %}

View File

@@ -0,0 +1,59 @@
{% load jazzmin %}
{% if card %}
<div class="card {{ fieldset.classes|cut:"collapse" }}">
{% if card_header and fieldset.name %}
<div class="card-header">
<div class="card-title">
<strong>{{ fieldset.name }}</strong>{% if fieldset.description %} - <i>{{ fieldset.description }}</i>{% endif %}
</div>
</div>
{%elif fieldset.description %}
<div class="card-header">
<div class="card-title">
{{ fieldset.description }}
</div>
</div>
{%endif%}
<div class="p-5{% if fieldset.name %} card-body{% endif %}">
{% endif %}
{% for line in fieldset %}
<div class="form-group{% if line.fields|length == 1 and line.errors %} errors{% endif %}{% if not line.has_visible_field %} hidden{% endif %}{% for field in line %}{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% endfor %}">
<div class="row">
{% for field in line %}
<label class="{% if not line.fields|length == 1 and forloop.counter != 1 %}col-auto {% else %}col-sm-3 {% endif %}text-left" for="id_{{ field.field.name }}">
{{ field.field.label|capfirst }}
{% if field.field.field.required %}
<span class="text-red">* </span>
{% endif %}
</label>
<div class="{% if not line.fields|length == 1 %} col-auto fieldBox {% else %} col-sm-7 {% endif %}
{% if field.field.name %} field-{{ field.field.name }}{% endif %}
{% if not field.is_readonly and field.errors %} errors{% endif %}
{% if field.field.is_hidden %} hidden {% endif %}
{% if field.is_checkcard %} checkcard-row{% endif %}">
{% if field.is_readonly %}
<div class="readonly">{{ field.contents }}</div>
{% else %}
{{ field.field }}
{% endif %}
<div class="help-block red">
{% if not line.fields|length == 1 and not field.is_readonly %}{{ field.errors }}{% endif %}
</div>
{% if field.field.help_text %}
<div class="help-block">{{ field.field.help_text|safe }}</div>
{% endif %}
<div class="help-block text-red">
{% if line.fields|length == 1 %}{{ line.errors }}{% endif %}
</div>
</div>
{% endfor %}
</div>
</div>
{% endfor %}
{% if card %}
</div>
</div>
{% endif %}

View File

@@ -0,0 +1,12 @@
{% load i18n %}
<h4>{% trans "Summary" %}</h4>
<table class="table table-striped">
<tbody>
{% for model_name, object_count in model_count %}
<tr>
<td>{{ model_name|capfirst }}</td>
<td>{{ object_count }}</td>
</tr>
{% endfor %}
</tbody>
</table>

View File

@@ -0,0 +1,133 @@
{% extends "admin/base_site.html" %}
{% load i18n static jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% block bodyclass %}{{ block.super }} dashboard{% endblock %}
{% block content_title %} {% trans 'Dashboard' %} {% endblock %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item">{% trans 'Dashboard' %}</li>
</ol>
{% endblock %}
{% block content %}
{% get_side_menu using="app_list" as dashboard_list %}
{% if dashboard_list %}
{% widthratio dashboard_list|length 2 1 as middle %}
{% endif %}
<div class="col-lg-9 col-12">
<div class="row">
<div class="col-md-6 col-sm-12">
{% for app in dashboard_list %}
<div class="card">
<div class="card-header">
<h5 class="m-0">{{ app.name }}</h5>
</div>
<div class="card-body">
<table class="table table-sm">
<tbody>
{% for model in app.models %}
<tr>
<td>
{% if model.url %}<a href="{{ model.url }}">{{ model.name }}</a>{% else %}{{ model.name }}{% endif %}
</td>
<td>
<div class="btn-group float-right">
{% if model.add_url %}
<a href="{{ model.add_url }}" class="btn btn-xs {{ jazzmin_ui.button_classes.success }} addlink">{% trans 'Add' %}</a>
{% endif %}
{% if model.url %}
{% if model.view_only %}
<a href="{{ model.url }}" class="btn btn-xs {{ jazzmin_ui.button_classes.info }} viewlink">{% trans 'View' %}</a>
{% else %}
<a href="{{ model.url }}" class="btn btn-xs {{ jazzmin_ui.button_classes.info }} changelink">{% if model.custom %}{% trans 'Go' %}{% else %}{% trans 'Change' %}{% endif %}</a>
{% endif %}
{% endif %}
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% if forloop.counter == middle|add:"0" %}
</div>
<div class="col-md-6 col-sm-12">
{% endif %}
{% endfor %}
</div>
</div>
</div>
<div class="col-lg-3 col-12">
<div id="content-related">
<div class="module" id="recent-actions-module">
<h4 class="mb-3">{% trans 'Recent actions' %}</h4>
{% load log %}
{% get_admin_log 6 as admin_log for_user user %}
{% if not admin_log %}
<p>{% trans 'None available' %}</p>
{% else %}
<div class="timeline">
{% for entry in admin_log %}
<div>
{% if entry.is_change %}
<i class="fas fa-edit bg-gray text-xs"></i>
{% elif entry.is_deletion %}
<i class="fas fa-trash bg-danger text-xs"></i>
{% elif entry.is_addition %}
<i class="fas fa-plus-circle bg-success text-xs"></i>
{% endif %}
<div class="timeline-item">
<span class="time"><i class="fas fa-clock"></i> {% blocktrans with timesince=entry.action_time|timesince %}{{ timesince }} ago{% endblocktrans %}</span>
<h3 class="timeline-header no-border">
{% if entry.is_deletion or not entry.get_admin_url %}
{{ entry.object_repr }}
{% else %}
<a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
{% endif %}
{% if entry.model %}
<span class="mini quiet">
{% filter capfirst %}
{{ entry.model }}
{% endfilter %}
</span>
{% endif %}
</h3>
{% if not entry.is_deletion %}
<div class="timeline-body">
{% if entry.is_addition %}
{{ entry }}
{% else %}
<ul style="list-style: none; padding: 0;">
{% action_message_to_list entry as action_message_list %}
{% for action_message in action_message_list %}
<li>{{ action_message.msg|style_bold_first_word }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
{% endif %}
</div>
</div>
{% endfor %}
<div>
<i class="fa fa-clock bg-gray"></i>
</div>
</div>
{% endif %}
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,76 @@
{% extends "registration/base.html" %}
{% load i18n jazzmin %}
{% get_jazzmin_settings request as jazzmin_settings %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% block content %}
<p class="login-box-msg">{{ jazzmin_settings.welcome_sign }}</p>
<form action="{{ app_path }}" method="post">
{% csrf_token %}
{% if user.is_authenticated %}
<p class="errornote">
<div class="callout callout-danger">
<p>
{% blocktrans trimmed %}
You are authenticated as {{ username }}, but are not authorized to
access this page. Would you like to login to a different account?
{% endblocktrans %}
</p>
</div>
</p>
{% endif %}
{% if form.errors %}
{% if form.username.errors %}
<div class="callout callout-danger">
<p>{{ form.username.label }}: {{ form.username.errors|join:', ' }}</p>
</div>
{% endif %}
{% if form.password.errors %}
<div class="callout callout-danger">
<p>{{ form.password.label }}: {{ form.password.errors|join:', ' }}</p>
</div>
{% endif %}
{% if form.non_field_errors %}
<div class="callout callout-danger">
{% for error in form.non_field_errors %}
<p>{{ error }}</p>
{% endfor %}
</div>
{% endif %}
{% endif %}
<div class="input-group mb-3">
<input type="text" name="username" class="form-control" placeholder="{{ form.username.label }}" required>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-user"></span>
</div>
</div>
</div>
<div class="input-group mb-3">
<input type="password" name="password" class="form-control" placeholder="{{ form.password.label }}" required>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-lock"></span>
</div>
</div>
</div>
{% url 'admin_password_reset' as password_reset_url %}
{% if password_reset_url %}
<div class="mb-3">
<div class="password-reset-link" style="text-align: center;">
<a href="{{ password_reset_url }}">
{% trans 'Forgotten your password or username?' %}
</a>
</div>
</div>
{% endif %}
<div class="row">
<div class="col-12">
<button type="submit" class="btn {{ jazzmin_ui.button_classes.primary }} btn-block">
{% trans "Log in" %}
</button>
</div>
</div>
</form>
{% endblock %}

View File

@@ -0,0 +1,16 @@
{% load i18n %}
{% load mptt_admin %}
<div class="form-group">
<select class="form-control search-filter-mptt" style="width: 100%;" tabindex="-1" aria-hidden="true" data-name="{{ field_name }}">
<option value="">{{ title }}</option>
<option value="">---------</option>
{% for choice in choices %}
{% if choice.name %}
<option {{ choice.padding_style }} data-name="{{ choice.name }}" value="{{ choice.value }}" {% if choice.selected %}selected {% endif %}>
{{ choice.display }}
</option>
{% endif %}
{% endfor %}
</select>
</div>

View File

@@ -0,0 +1,72 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_urls static jazzmin %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a></li>
<li class="breadcrumb-item"><a href="{% url opts|admin_urlname:'changelist' %}">{{ module_name }}</a></li>
<li class="breadcrumb-item"><a href="{% url opts|admin_urlname:'change' object.pk|admin_urlquote %}">{{ object|truncatewords:"18" }}</a></li>
<li class="breadcrumb-item active">{% trans 'History' %}</li>
</ol>
{% endblock %}
{% block content %}
<div class="row col-md-12">
<div class="col-12">
<div class="card">
<div class="card-header with-border">
<h4 class="card-title">
{% trans 'History' %}
</h4>
</div>
<div class="card-body">
<div id="content-main">
<div class="module">
<div class="timeline">
{% for action in action_list reversed %}
<div class="time-label">
<span class="bg-info">{{ action.action_time|date:"DATETIME_FORMAT" }}</span>
</div>
{% action_message_to_list action as action_message_list %}
{% for action_message in action_message_list %}
<div>
<i class="fas fa-{{ action_message.icon }} bg-{{ action_message.colour }}"></i>
<div class="timeline-item">
<h3 class="timeline-header no-border">
<a href="{% jazzy_admin_url action.user request.current_app|default:"admin" %}" target="_blank">
{{ action.user.get_username }}{% if action.user.get_full_name %} ({{ action.user.get_full_name }}){% endif %}
</a>
{{ action_message.msg|style_bold_first_word }}
</h3>
</div>
</div>
{% endfor %}
{% endfor %}
<div>
<i class="fas fa-clock bg-gray"></i>
{% if not action_list %}
<div class="timeline-item">
<h3 class="timeline-header no-border">
{% trans "This object doesn't have a change history. It probably wasn't added via this admin site." %}
</h3>
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,30 @@
{% load admin_list jazzmin i18n %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
<div class="col-5">
<div class="dataTables_info" role="status" aria-live="polite">
{{ cl.result_count }}
{% if cl.result_count == 1 %}
{{ cl.opts.verbose_name }}
{% else %}
{{ cl.opts.verbose_name_plural }}
{% endif %}
{% if show_all_url %}&nbsp;&nbsp;
<a href="{{ show_all_url }}" class="btn btn-sm {{ jazzmin_ui.button_classes.secondary }}">{% trans 'Show all' %}</a>
{% endif %}
{% if cl.formset and cl.result_count %}
<input type="submit" name="_save" class="btn btn-sm {{ jazzmin_ui.button_classes.success }}" value="{% trans 'Save' %}">
{% endif %}
</div>
</div>
<div class="col-7">
<ul class="pagination pagination-sm m-0 float-right">
{% if pagination_required %}
{% for i in page_range %}
{% jazzmin_paginator_number cl i %}
{% endfor %}
{% endif %}
</ul>
</div>

View File

@@ -0,0 +1,17 @@
{% load i18n static %}
<!DOCTYPE html>
<html>
<head><title>{% trans 'Popup closing...' %}</title></head>
<body>
<script type="text/javascript"
id="django-admin-popup-response-constants"
src="{% static "admin/js/popup_response.js" %}"
{% if popup_response_data %}
data-popup-response="{{ popup_response_data }}"
{% else %}
data-popup-response='{"action":"{{ action|escape }}","value":"{{ value|escape }}","obj":"{{ obj|escape }}","new_value":"{{ new_value|escape }}"}'
{% endif %}>
</script>
</body>
</html>

View File

@@ -0,0 +1,42 @@
{% load i18n static admin_list jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
<div class="col-12 pb-4" id="change-list-filters">
<form id="changelist-search" class="form-inline" method="GET">
{% block filters %}
{% if cl.has_filters %}
{% for spec in cl.filter_specs %}{% jazzmin_list_filter cl spec %}{% endfor %}
{% endif %}
{% endblock %}
{% if cl.search_fields %}
<div class="form-group">
<input class="form-control" type="text" name="{{ search_var }}" value="{{ cl.query }}" id="searchbar">
</div>
{% endif %}
{% if cl.has_filters or cl.search_fields %}
<div class="form-group" id="search_group">
<button type="submit" class="btn {{ jazzmin_ui.button_classes.primary }}">{% trans 'Search' %}</button>
{% if show_result_count %}
<span class="small quiet">
{% blocktrans count counter=cl.result_count %}{{ counter }} result{% plural %}{{ counter }} results{% endblocktrans %}
(<a href="?{% if cl.is_popup %}_popup=1{% endif %}">
{% if cl.show_full_result_count %}
{% blocktrans with full_result_count=cl.full_result_count %}{{ full_result_count }} total{% endblocktrans %}
{% else %}
{% trans "Show all" %}
{% endif %}
</a>)
</span>
{% endif %}
{% admin_extra_filters cl as extra_filters %}
{% for pair in extra_filters.items %}
{% if pair.0 != search_var %}<input type="hidden" name="{{ pair.0 }}" value="{{ pair.1 }}">{% endif %}
{% endfor %}
</div>
{% endif %}
</form>
</div>

View File

@@ -0,0 +1,18 @@
{% extends "admin/change_form.html" %}
{% load admin_urls i18n jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a></li>
<li class="breadcrumb-item active">{{ opts.verbose_name|capfirst }}</li>
</ol>
{% endblock %}
{% block object-tools-items %}
<a class="btn btn-block {{ jazzmin_ui.button_classes.secondary }} btn-sm" href="{% url opts|admin_urlname:'history' %}">{% trans 'History' %}</a>
{% if has_absolute_url %}
<a href="{% url 'admin:view_on_site' content_type_id original.pk %}" class="btn btn-block {{ jazzmin_ui.button_classes.secondary }} btn-sm">{% trans "View on site" %}</a>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,11 @@
{% extends "admin/object_history.html" %}
{% load admin_urls i18n %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a></li>
<li class="breadcrumb-item"><a href="{% url opts|admin_urlname:'changelist' %}">{{ module_name }}</a></li>
<li class="breadcrumb-item active">{% trans 'History' %}</li>
</ol>
{% endblock %}

View File

@@ -0,0 +1,42 @@
{% load i18n admin_urls jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% block submit-row %}
<div>
{% if show_save %}
<div class="form-group">
<input type="submit" value="{% trans 'Save' %}" class="btn {{ jazzmin_ui.button_classes.success }} form-control" name="_save">
</div>
{% endif %}
{% if show_delete_link and original %}
<div class="form-group">
{% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
<a href="{% add_preserved_filters delete_url %}" class="btn {{ jazzmin_ui.button_classes.danger }} form-control">{% trans "Delete" %}</a>
</div>
{% endif %}
{% if show_save_as_new %}
<div class="form-group">
<input type="submit" class="btn {{ jazzmin_ui.button_classes.info }} form-control" value="{% trans 'Save as new' %}" name="_saveasnew">
</div>
{% endif %}
{% if show_save_and_add_another %}
<div class="form-group">
<input type="submit" class="btn {{ jazzmin_ui.button_classes.info }} form-control" value="{% trans 'Save and add another' %}" name="_addanother">
</div>
{% endif %}
{% if show_save_and_continue %}
<div class="form-group">
<input type="submit" class="btn {{ jazzmin_ui.button_classes.info }} form-control" value="{% if can_change %}{% trans 'Save and continue editing' %}{% else %}{% trans 'Save and view' %}{% endif %}" name="_continue">
</div>
{% endif %}
{% if show_close %}
<div class="form-group">
<a href="{% url opts|admin_urlname:'changelist' %}" class="btn {{ jazzmin_ui.button_classes.danger }} form-control">{% trans 'Close' %}</a>
</div>
{% endif %}
{% block extra-actions %}{% endblock %}
</div>
{% endblock %}

View File

@@ -0,0 +1,33 @@
{% extends "admin/base_site.html" %}
{% block extrastyle %}
<style>
.literal-block, .doctest-block {
background: #272822;
color: #f8f8f2;
}
.module {
padding: 20px;
}
.card-header .card-title a {
color: #ffffff !important;
}
.card-header .card-title a:hover {
color: #f8f8f2 !important;
}
</style>
{% endblock %}
{% block content %}
{% block alerts %}{% endblock %}
<div id="content-main" class=col-12>
<div class="col-12">
<div class="card">
<div class="card-body pad table-responsive">
{% block docs_content %}{% endblock %}
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,33 @@
{% extends "admin_doc/base_docs.html" %}
{% load i18n %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a></li>
<li class="breadcrumb-item active">{% trans 'Bookmarklets' %}</li>
</ol>
{% endblock %}
{% block title %}{% trans "Documentation bookmarklets" %}{% endblock %}
{% block alerts %}
<div class="alert alert-info alert-dismissible col-12">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h5><i class="icon fas fa-info"></i> Info</h5>
<p>
{% blocktrans trimmed %}
To install bookmarklets, drag the link to your bookmarks toolbar, or right-click
the link and add it to your bookmarks. Now you can select the bookmarklet
from any page in the site.
{% endblocktrans %}
</p>
</div>
{% endblock %}
{% block docs_content %}
<div class="card-body pad table-responsive">
<h4><a href="javascript:(function(){if(typeof XMLHttpRequest!='undefined'){x=new XMLHttpRequest()}else{return;}x.open('HEAD',location.href,false);x.send(null);try{view=x.getResponseHeader('x-view');}catch(e){alert('No view found for this page');return;}if(view=='undefined'){alert('No view found for this page');}document.location='{% url 'django-admindocs-views-index' %}'+view+'/';})()">{% trans "Documentation for this page" %}</a></h4>
<p>{% trans "Jumps you from any page to the documentation for the view that generates that page." %}</p>
</div>
{% endblock %}

View File

@@ -0,0 +1,40 @@
{% extends "admin_doc/base_docs.html" %}
{% load i18n %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item active">{% trans 'Documentation' %}</li>
</ol>
{% endblock %}
{% block title %}{% trans 'Documentation' %}{% endblock %}
{% block content_title %}{% trans 'Documentation' %}{% endblock %}
{% block content %}
<div id="content-main" class=col-12>
<div class="col-12">
<div class="card">
<div class="card-body pad table-responsive">
<h5><a href="tags/">{% trans 'Tags' %}</a></h5>
<p>{% trans 'List of all the template tags and their functions.' %}</p>
<h5><a href="filters/">{% trans 'Filters' %}</a></h5>
<p>{% trans 'Filters are actions which can be applied to variables in a template to alter the output.' %}</p>
<h5><a href="models/">{% trans 'Models' %}</a></h5>
<p>{% trans 'Models are descriptions of all the objects in the system and their associated fields. Each model has a list of fields which can be accessed as template variables' %}.</p>
<h5><a href="views/">{% trans 'Views' %}</a></h5>
<p>{% trans 'Each page on the public site is generated by a view. The view defines which template is used to generate the page and which objects are available to that template.' %}</p>
<h5><a href="bookmarklets/">{% trans 'Bookmarklets' %}</a></h5>
<p>{% trans 'Tools for your browser to quickly access admin functionality.' %}</p>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,18 @@
{% extends "admin_doc/base_docs.html" %}
{% load i18n %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item active">{% trans 'Documentation' %}</li>
</ol>
{% endblock %}
{% block title %}{% trans 'Please install docutils' %}{% endblock %}
{% block content_title %}{% trans 'Documentation' %}{% endblock %}
{% block docs_content %}
<h3>{% blocktrans with "http://docutils.sf.net/" as link %}The admin documentation system requires Python's <a href="{{ link }}">docutils</a> library.{% endblocktrans %}</h3>
<p>{% blocktrans with "http://docutils.sf.net/" as link %}Please ask your administrators to install <a href="{{ link }}">docutils</a>.{% endblocktrans %}</p>
{% endblock %}

View File

@@ -0,0 +1,86 @@
{% extends "admin_doc/base_docs.html" %}
{% load i18n %}
{% block extrahead %}
{{ block.super }}
<style type="text/css">
.module table { width:100%; }
.module table p { padding: 0; margin: 0; }
</style>
{% endblock %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'django-admindocs-models-index' %}">{% trans 'Models' %}</a></li>
<li class="breadcrumb-item active">{{ name }}</li>
</ol>
{% endblock %}
{% block title %}{% blocktrans %}Model: {{ name }}{% endblocktrans %}{% endblock %}
{% block content_title %}{{ name }}{% endblock %}
{% block docs_content %}
<div class="card card-info">
<div class="card-header"><h4>{% blocktrans %}Description{% endblocktrans %}</h4></div>
<div class="card-body">
{{ summary }}
{{ description }}
</div>
</div>
<div class="card card-success">
<div class="card-header"><h4>{% trans 'Fields' %}</h4></div>
<div class="card-body">
<table class="table table-hover text-nowrap">
<thead>
<tr>
<th>{% trans 'Field' %}</th>
<th>{% trans 'Type' %}</th>
<th>{% trans 'Description' %}</th>
</tr>
</thead>
<tbody>
{% for field in fields|dictsort:"name" %}
<tr>
<td>{{ field.name }}</td>
<td>{{ field.data_type }}</td>
<td>{{ field.verbose }}{% if field.help_text %} - {{ field.help_text|safe }}{% endif %}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% if methods %}
<div class="card card-warning">
<div class="card-header"><h4>{% trans 'Methods with arguments' %}</h4></div>
<div class="card-body">
<table class="table table-hover text-nowrap">
<thead>
<tr>
<th>{% trans 'Method' %}</th>
<th>{% trans 'Arguments' %}</th>
<th>{% trans 'Description' %}</th>
</tr>
</thead>
<tbody>
{% for method in methods|dictsort:"name" %}
<tr>
<td>{{ method.name }}</td>
<td>{{ method.arguments }}</td>
<td>{{ method.verbose }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endif %}
<p class="small"><a href="{% url 'django-admindocs-models-index' %}">&lsaquo; {% trans 'Back to Model documentation' %}</a></p>
{% endblock %}

View File

@@ -0,0 +1,53 @@
{% extends "admin_doc/base_docs.html" %}
{% load i18n %}
{% block coltype %}colSM{% endblock %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a></li>
<li class="breadcrumb-item active">{% trans 'Models' %}</li>
</ol>
{% endblock %}
{% block title %}{% trans 'Models' %}{% endblock %}
{% block content_title %}{% trans 'Models' %}{% endblock %}
{% block docs_content %}
{% regroup models by app_config as grouped_models %}
<div class="row">
<div class="col-4 col-sm-2">
<div class="nav flex-column nav-tabs h-100" id="tabs-tab" role="tablist" aria-orientation="vertical">
{% for group in grouped_models %}
<a class="nav-link" id="tabs-{{ group.grouper.label }}-control" data-toggle="pill" href="#tabs-{{ group.grouper.label }}" role="tab" aria-controls="tabs-{{ group.grouper.label }}" aria-selected="true">
<h6>{{ group.grouper.verbose_name }}</h6>
</a>
{% endfor %}
</div>
</div>
<div class="col-7 col-sm-9">
<div class="tab-content" id="tabs-tabContent">
{% for group in grouped_models %}
<div class="tab-pane text-left fade{% if forloop.first %} show active{% endif %}" id="tabs-{{ group.grouper.label }}" role="tabpanel" aria-labelledby="tabs-{{ group.grouper.label }}-control">
<ul>
{% for model in group.list %}
<li>
<a href="{% url 'django-admindocs-models-detail' app_label=model.app_label model_name=model.model_name %}">
{{ model.object_name }}
</a>
</li>
{% endfor %}
</ul>
</div>
{% endfor %}
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,25 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a></li>
<li class="breadcrumb-item active">{% trans 'Templates' %} {{ name }}</li>
</ol>
{% endblock %}
{% block title %}{% blocktrans %}Template: {{ name }}{% endblocktrans %}{% endblock %}
{% block content_title %}{% blocktrans %}Template: <q>{{ name }}</q>{% endblocktrans %}{% endblock %}
{% block docs_content %}
{# Translators: Search is not a verb here, it qualifies path (a search path) #}
<h2>{% blocktrans %}Search path for template <q>{{ name }}</q>:{% endblocktrans %}</h2>
<ol>
{% for template in templates|dictsort:"order" %}
<li><code>{{ template.file }}</code>{% if not template.exists %} <em>{% trans '(does not exist)' %}</em>{% endif %}</li>
{% endfor %}
</ol>
<p class="small"><a href="{% url 'django-admindocs-docroot' %}">&lsaquo; {% trans 'Back to Documentation' %}</a></p>
{% endblock %}

View File

@@ -0,0 +1,57 @@
{% extends "admin_doc/base_docs.html" %}
{% load i18n %}
{% block coltype %}colSM{% endblock %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a></li>
<li class="breadcrumb-item active">{% trans 'Filters' %}</li>
</ol>
{% endblock %}
{% block title %}{% trans 'Template filters' %}{% endblock %}
{% block content_title %}{% trans 'Template filters' %}{% endblock %}
{% block docs_content %}
{% regroup filters|dictsort:"library" by library as filter_libraries %}
<div class="row">
<div class="col-4 col-sm-2">
<div class="nav flex-column nav-tabs h-100" id="filter-tab" role="tablist" aria-orientation="vertical">
{% for library in filter_libraries %}
<a class="nav-link" id="tabs-{% firstof library.grouper built_in_filters %}-tab" data-toggle="pill" href="#tabs-{% firstof library.grouper built_in_filters %}" role="tab" aria-controls="tabs-{% firstof library.grouper built_in_filters %}" aria-selected="true"><h6>{% firstof library.grouper _("Built-in filters") %}</h6></a>
{% endfor %}
</div>
</div>
<div class="col-7 col-sm-9">
<div class="tab-content">
{% for library in filter_libraries %}
<div class="tab-pane text-left fade{% if forloop.first %} show active{% endif %}" id="tabs-{% firstof library.grouper built_in_filters %}" role="tabpanel" aria-labelledby="tabs-{% firstof library.grouper built_in_filters %}-tab">
{% for view in ns_views.list|dictsort:"url" %}
{% ifchanged %}
<h4><a href="{% url 'django-admindocs-views-detail' view=view.full_name %}">{{ view.url }}</a></h4>
<p class="small quiet">{% blocktrans with view.full_name as full_name and view.url_name as url_name %}View function: <code>{{ full_name }}</code>. Name: <code>{{ url_name }}</code>.{% endblocktrans %}</p>
<p>{{ view.title }}</p>
<hr>
{% endifchanged %}
{% endfor %}
{% if library.grouper %}<p class="small quiet">{% blocktrans with code="{"|add:"% load "|add:library.grouper|add:" %"|add:"}" %}To use these filters, put <code>{{ code }}</code> in your template before using the filter.{% endblocktrans %}</p><hr>{% endif %}
{% for filter in library.list|dictsort:"name" %}
<h4 id="{{ library.grouper|default:"built_in" }}-{{ filter.name }}">{{ filter.name }}</h4>
{{ filter.title }}
{{ filter.body }}
{% if not forloop.last %}<hr>{% endif %}
{% endfor %}
</div>
{% endfor %}
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,47 @@
{% extends "admin_doc/base_docs.html" %}
{% load i18n %}
{% block coltype %}colSM{% endblock %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a></li>
<li class="breadcrumb-item active">{% trans 'Tags' %}</li>
</ol>
{% endblock %}
{% block title %}{% trans 'Template tags' %}{% endblock %}
{% block content_title %}{% trans 'Template tag documentation' %}{% endblock %}
{% block docs_content %}
{% regroup tags|dictsort:"library" by library as tag_libraries %}
<div class="row">
<div class="col-4 col-sm-2">
<div class="nav flex-column nav-tabs h-100" id="tabs-tab" role="tablist" aria-orientation="vertical">
{% for library in tag_libraries %}
<a class="nav-link" id="tabs-{% firstof library.grouper built_in_tags %}-tab" data-toggle="pill" href="#tabs-{% firstof library.grouper built_in_tags %}" role="tab" aria-controls="tabs-{% firstof library.grouper built_in_tags %}" aria-selected="true"><h6>{% firstof library.grouper _("Built-in tags") %}</h6></a>
{% endfor %}
</div>
</div>
<div class="col-7 col-sm-9">
<div class="tab-content" id="tabs-tabContent">
{% for library in tag_libraries %}
<div class="tab-pane text-left fade{% if forloop.first %} show active{% endif %}" id="tabs-{% firstof library.grouper built_in_tags %}" role="tabpanel" aria-labelledby="tabs-{% firstof library.grouper built_in_tags %}-tab">
{% if library.grouper %}<p class="small quiet">{% blocktrans with code="{"|add:"% load "|add:library.grouper|add:" %"|add:"}" %}To use these tags, put <code>{{ code }}</code> in your template before using the tag.{% endblocktrans %}</p><hr>{% endif %}
{% for tag in library.list|dictsort:"name" %}
<h3 id="{{ library.grouper|default:"built_in" }}-{{ tag.name }}">{{ tag.name }}</h3>
<h6 style="font-style: italic;">{{ tag.title|striptags }}</h6>
{{ tag.body }}
{% if not forloop.last %}<hr>{% endif %}
{% endfor %}
</div>
{% endfor %}
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,39 @@
{% extends "admin_doc/base_docs.html" %}
{% load i18n jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'django-admindocs-views-index' %}">{% trans 'Views' %}</a></li>
<li class="breadcrumb-item active">{{ name }}</li>
</ol>
{% endblock %}
{% block title %}{% blocktrans %}View: {{ name }}{% endblocktrans %}{% endblock %}
{% block content_title %}{{ name }}{% endblock %}
{% block docs_content %}
<h3 class="subhead">{{ summary|striptags }}</h3>
{{ body }}
{% if meta.Context %}
<h4>{% trans 'Context:' %}</h4>
<p>{{ meta.Context }}</p>
{% endif %}
{% if meta.Templates %}
<h4>{% trans 'Templates:' %}</h4>
<p>{{ meta.Templates }}</p>
{% endif %}
<div class="row">
<div class="col-lg-3 col-sm-1"></div>
<div class="col-lg-6 col-sm-10">
<a class="btn btn-block {{ jazzmin_ui.button_classes.info }}" href="{% url 'django-admindocs-views-index' %}">{% trans 'Back to View documentation' %}</a>
</div>
<div class="col-lg-3 col-sm-1"></div>
</div>
{% endblock %}

View File

@@ -0,0 +1,60 @@
{% extends "admin_doc/base_docs.html" %}
{% load i18n %}
{% block coltype %}colSM{% endblock %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item"><a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a></li>
<li class="breadcrumb-item active">{% trans 'Views' %}</li>
</ol>
{% endblock %}
{% block title %}{% trans 'Views' %}{% endblock %}
{% block content_title %}{% trans 'View documentation' %}{% endblock %}
{% block docs_content %}
{% regroup views|dictsort:'namespace' by namespace as views_by_ns %}
<div class="row">
<div class="col-4 col-sm-2">
<div class="nav flex-column nav-tabs h-100" id="tabs-tab" role="tablist" aria-orientation="vertical">
{% for ns_views in views_by_ns %}
<a class="nav-link" id="tabs-{{ ns_views.grouper }}-control" data-toggle="pill" href="#tabs-{{ ns_views.grouper }}" role="tab" aria-controls="tabs-{{ ns_views.grouper }}" aria-selected="true">
<h6>
{% if ns_views.grouper %}
{% blocktrans with ns_views.grouper as name %}Views by namespace {{ name }}{% endblocktrans %}
{% else %}
{% blocktrans %}Views by empty namespace{% endblocktrans %}
{% endif %}
</h6>
</a>
{% endfor %}
</div>
</div>
<div class="col-7 col-sm-9">
<div class="tab-content" id="tabs-tabContent">
{% for ns_views in views_by_ns %}
<div class="tab-pane text-left fade{% if forloop.first %} show active{% endif %}" id="tabs-{{ ns_views.grouper }}" role="tabpanel" aria-labelledby="tabs-{{ ns_views.grouper }}-control">
{% for view in ns_views.list|dictsort:"url" %}
<div class="card card-primary">
<div class="card-header">
<h3 class="card-title"><a href="{% url 'django-admindocs-views-detail' view=view.full_name %}">{{ view.url }}</a></h3>
</div>
<div class="card-body">
<p class="small quiet">{% blocktrans with view.full_name as full_name and view.url_name as url_name %}View function: <code>{{ full_name }}</code>. Name: <code>{{ url_name }}</code>.{% endblocktrans %}</p>
<p>{{ view.title }}</p>
</div>
</div>
{% endfor %}
</div>
{% endfor %}
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,37 @@
{% load i18n jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% trans "General" as general_tab %}
{% get_sections adminform inline_admin_formsets as forms %}
<div id="jazzy-carousel" class="carousel slide" data-ride="false" data-wrap="false" data-keyboard="true" data-interval="false">
<div class="row">
<div class="col-sm-2">
<a href="#jazzy-carousel" role="button" data-slide="prev" class="btn {{ jazzmin_ui.button_classes.primary }}"><i class="fas fa-arrow-left"></i></a>
</div>
<div class="col-sm-8 text-center">
<p class="carousel-fieldset-label">
{{ forms.0.name|default:general_tab }}
</p>
</div>
<div class="col-sm-2">
<a href="#jazzy-carousel" role="button" data-slide="next" class="btn {{ jazzmin_ui.button_classes.primary }} float-right"><i class="fas fa-arrow-right"></i></a>
</div>
</div>
<ol class="carousel-indicators">
{% for fieldset in forms %}
<li data-target="#jazzy-carousel" data-slide-to="{{ forloop.counter0 }}"></li>
{% endfor %}
</ol>
<div class="carousel-inner">
{% for fieldset in forms %}
<div class="carousel-item {% if forloop.first %}active{% endif %} {{ fieldset.classes }}" data-carouselid="{{ forloop.counter0 }}" data-label="{{ fieldset.name|default:general_tab|capfirst }}" data-target="#{{ fieldset.name|default:general_tab|unicode_slugify }}-tab">
{% if fieldset.is_inline %}
{% include fieldset.opts.template with inline_admin_formset=fieldset %}
{% else %}
{% include "admin/includes/fieldset.html" with card=True %}
{% endif %}
</div>
{% endfor %}
</div>
</div>

View File

@@ -0,0 +1,24 @@
{% load i18n jazzmin %}
{% trans "General" as general_tab %}
{% get_sections adminform inline_admin_formsets as forms %}
<div id="jazzy-collapsible">
{% for fieldset in forms %}
<div class="card card-default {{ fieldset.classes }}">
<div class="card-header collapsible-header" data-toggle="collapse" data-parent="#jazzy-collapsible" data-target="#{{ fieldset.name|default:general_tab|unicode_slugify }}-tab">
<h4 class="card-title">
{{ fieldset.name|default:general_tab }}
</h4>
</div>
<div id="{{ fieldset.name|default:general_tab|unicode_slugify }}-tab" class="panel-collapse in {% if forloop.first %}show{% else %}collapse{% endif %}">
<div class="card-body">
{% if fieldset.is_inline %}
{% include fieldset.opts.template with inline_admin_formset=fieldset %}
{% else %}
{% include "admin/includes/fieldset.html" with card=True %}
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>

View File

@@ -0,0 +1,27 @@
{% load i18n jazzmin %}
{% trans "General" as general_tab %}
{% get_sections adminform inline_admin_formsets as forms %}
{% block tabs %}
<ul class="nav nav-tabs mb-3" role="tablist" id="jazzy-tabs">
{% for fieldset in forms %}
<li class="nav-item">
<a class="nav-link{% if forloop.first %} active{% endif %}" data-toggle="pill" role="tab" aria-controls="{{ fieldset.name|default:general_tab|unicode_slugify }}-tab" aria-selected="{% if forloop.first %}true{% else %}false{% endif %}" href="#{{ fieldset.name|default:general_tab|unicode_slugify }}-tab">
{{ fieldset.name|default:general_tab }}
</a>
</li>
{% endfor %}
</ul>
{% endblock tabs %}
<div class="tab-content">
{% for fieldset in forms %}
<div id="{{ fieldset.name|default:general_tab|unicode_slugify }}-tab" class="tab-pane fade{% if forloop.first %} active show{% endif %} {{ fieldset.classes }}" role="tabpanel" aria-labelledby="{{ fieldset.name|default:general_tab|unicode_slugify }}-tab">
{% if fieldset.is_inline %}
{% include fieldset.opts.template with inline_admin_formset=fieldset %}
{% else %}
{% include "admin/includes/fieldset.html" with card=True %}
{% endif %}
</div>
{% endfor %}
</div>

View File

@@ -0,0 +1,17 @@
{% load static %}
<!-- Modal -->
<div class="modal fade modal-wide" id="related-modal" tabindex="-1" role="dialog" aria-labelledby="popupModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="popupModalCenterTitle"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,22 @@
{% load jazzmin %}
{% get_sections adminform inline_admin_formsets as forms %}
{% for fieldset in forms %}
{% if fieldset.is_inline %}
{% if adminform|has_fieldsets %}
<div class="card {{ fieldset.classes }}">
<div class="card-header">
{{ fieldset.name }}
</div>
<div class="card-body">
{% include fieldset.opts.template with inline_admin_formset=fieldset %}
</div>
</div>
{% else %}
<h6><strong>{{ fieldset.name }}</strong></h6>
{% include fieldset.opts.template with inline_admin_formset=fieldset %}
{% endif %}
{% else %}
{% include "admin/includes/fieldset.html" with card=adminform|has_fieldsets card_header=adminform|has_fieldsets %}
{% endif %}
{% endfor %}

View File

@@ -0,0 +1,227 @@
{% load static %}
<aside class="control-sidebar control-sidebar-dark ui-customiser">
<div class="p-3 control-sidebar-content">
<h5>Customize</h5>
<hr class="mb-2">
<div class="mb-1">
<label for="jazzmin-theme-chooser">Theme:</label>
<select name="theme" id="jazzmin-theme-chooser">
<option selected="selected">default</option>
<option>cerulean</option>
<option>cosmo</option>
<option>cyborg</option>
<option>darkly</option>
<option>flatly</option>
<option>journal</option>
<option>litera</option>
<option>lumen</option>
<option>lux</option>
<option>materia</option>
<option>minty</option>
<option>pulse</option>
<option>sandstone</option>
<option>simplex</option>
<option>sketchy</option>
<option>slate</option>
<option>solar</option>
<option>spacelab</option>
<option>superhero</option>
<option>united</option>
<option>yeti</option>
</select>
</div>
<div class="mb-1">
<label for="jazzmin-dark-mode-theme-chooser">Dark Theme:</label>
<select name="theme" id="jazzmin-dark-mode-theme-chooser">
<option selected="selected" value="">None</option>
<option>darkly</option>
<option>cyborg</option>
<option>slate</option>
<option>solar</option>
<option>superhero</option>
</select>
</div>
<hr />
<p class="mb-1">Small Text</p>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="body-small-text"><label for="body-small-text">Body</label></div>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="navbar-small-text"><label for="navbar-small-text">NavBar</label></div>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="sidebar-nav-small-text"><label for="sidebar-nav-small-text">SideBar</label></div>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="footer-small-text"><label for="footer-small-text">Footer</label></div>
<div class="mb-4"><input type="checkbox" value="1" class="mr-1" id="brand-small-text"><label for="brand-small-text">Brand</label></div>
<p class="mb-1">SideBar Tweaks</p>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="sidebar-nav-flat-style"><label for="sidebar-nav-flat-style" title="Use a flat style sidebar">Flat style</label></div>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="sidebar-nav-legacy-style"><label for="sidebar-nav-legacy-style">Legacy style</label></div>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="sidebar-nav-compact"><label for="sidebar-nav-compact">Compact</label></div>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="sidebar-nav-child-indent"><label for="sidebar-nav-child-indent">Child indent</label></div>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="main-sidebar-disable-hover-focus-auto-expand"><label for="main-sidebar-disable-hover-focus-auto-expand">Disable auto-expand</label></div>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="sidebar-fixed"><label for="sidebar-fixed">Fixed SideBar</label></div>
<p class="mb-1">Misc</p>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="layout-boxed"><label for="layout-boxed">Boxed Layout</label></div>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="footer-fixed"><label for="footer-fixed">Fixed Footer</label></div>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="actions-fixed"><label for="actions-fixed">Sticky Actions <br />(Change form)</label></div>
<p class="mb-1">Navbar Tweaks</p>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="no-navbar-border"><label for="no-navbar-border">No navbar border</label></div>
<div class="mb-1"><input type="checkbox" value="1" class="mr-1" id="navbar-fixed"><label for="navbar-fixed">Fixed NavBar</label></div>
<p class="mb-1">Button tweaks</p>
<label for="jazzmin-btn-style-primary">primary:</label>
<select name="btn-style-primary" id="jazzmin-btn-style-primary">
<option selected="selected" value="btn-outline-primary">Outline</option>
<option value="btn-primary">Solid</option>
</select>
<label for="jazzmin-btn-style-secondary">secondary:</label>
<select name="btn-style-secondary" id="jazzmin-btn-style-secondary">
<option selected="selected" value="btn-outline-secondary">Outline</option>
<option value="btn-secondary">Solid</option>
</select>
<label for="jazzmin-btn-style-info">info:</label>
<select name="btn-style-info" id="jazzmin-btn-style-info">
<option selected="selected" value="btn-outline-info">Outline</option>
<option value="btn-info">Solid</option>
</select>
<label for="jazzmin-btn-style-warning">warning:</label>
<select name="btn-style-warning" id="jazzmin-btn-style-warning">
<option selected="selected" value="btn-outline-warning">Outline</option>
<option value="btn-warning">Solid</option>
</select>
<label for="jazzmin-btn-style-danger">danger:</label>
<select name="btn-style-danger" id="jazzmin-btn-style-danger">
<option selected="selected" value="btn-outline-danger">Outline</option>
<option value="btn-danger">Solid</option>
</select>
<label for="jazzmin-btn-style-success">success:</label>
<select name="btn-style-success" id="jazzmin-btn-style-success">
<option selected="selected" value="btn-outline-success">Outline</option>
<option value="btn-success">Solid</option>
</select>
<hr />
<h6>Navbar Variants</h6>
<div class="d-flex">
<div class="d-flex flex-wrap mb-3 menu-items" id="navbar-variants">
<!-- dark -->
<div data-classes="navbar-primary navbar-dark" class="bg-primary elevation-2"></div>
<div data-classes="navbar-secondary navbar-dark" class="bg-secondary elevation-2"></div>
<div data-classes="navbar-info navbar-dark" class="bg-info elevation-2"></div>
<div data-classes="navbar-success navbar-dark" class="bg-success elevation-2"></div>
<div data-classes="navbar-danger navbar-dark" class="bg-danger elevation-2"></div>
<div data-classes="navbar-indigo navbar-dark" class="bg-indigo elevation-2"></div>
<div data-classes="navbar-purple navbar-dark" class="bg-purple elevation-2"></div>
<div data-classes="navbar-pink navbar-dark" class="bg-pink elevation-2"></div>
<div data-classes="navbar-navy navbar-dark" class="bg-navy elevation-2"></div>
<div data-classes="navbar-lightblue navbar-dark" class="bg-lightblue elevation-2"></div>
<div data-classes="navbar-teal navbar-dark" class="bg-teal elevation-2"></div>
<div data-classes="navbar-cyan navbar-dark" class="bg-cyan elevation-2"></div>
<div data-classes="navbar-dark" class="bg-dark elevation-2"></div>
<div data-classes="navbar-gray navbar-dark" class="bg-gray-dark elevation-2"></div>
<div data-classes="navbar-gray-dark navbar-dark" class="bg-gray elevation-2"></div>
<!-- light -->
<div data-classes="navbar-light" class="bg-light elevation-2"></div>
<div data-classes="navbar-warning navbar-light" class="bg-warning elevation-2"></div>
<div data-classes="navbar-white navbar-light" class="bg-white elevation-2"></div>
<div data-classes="navbar-orange navbar-light" class="bg-orange elevation-2"></div>
</div>
</div>
<h6>Accent Color Variants</h6>
<div class="d-flex"></div>
<div class="d-flex flex-wrap mb-3 menu-items" id="accent-colours">
<div data-classes="accent-primary" class="bg-primary elevation-2"></div>
<div data-classes="accent-warning" class="bg-warning elevation-2"></div>
<div data-classes="accent-info" class="bg-info elevation-2"></div>
<div data-classes="accent-danger" class="bg-danger elevation-2"></div>
<div data-classes="accent-success" class="bg-success elevation-2"></div>
<div data-classes="accent-indigo" class="bg-indigo elevation-2"></div>
<div data-classes="accent-lightblue" class="bg-lightblue elevation-2"></div>
<div data-classes="accent-navy" class="bg-navy elevation-2"></div>
<div data-classes="accent-purple" class="bg-purple elevation-2"></div>
<div data-classes="accent-fuchsia" class="bg-fuchsia elevation-2"></div>
<div data-classes="accent-pink" class="bg-pink elevation-2"></div>
<div data-classes="accent-maroon" class="bg-maroon elevation-2"></div>
<div data-classes="accent-orange" class="bg-orange elevation-2"></div>
<div data-classes="accent-lime" class="bg-lime elevation-2"></div>
<div data-classes="accent-teal" class="bg-teal elevation-2"></div>
<div data-classes="accent-olive" class="bg-olive elevation-2"></div>
</div>
<h6>Dark Sidebar Variants</h6>
<div class="d-flex"></div>
<div class="d-flex flex-wrap mb-3 menu-items" id="dark-sidebar-variants">
<div data-classes="sidebar-dark-primary" class="bg-primary elevation-2"></div>
<div data-classes="sidebar-dark-warning" class="bg-warning elevation-2"></div>
<div data-classes="sidebar-dark-info" class="bg-info elevation-2"></div>
<div data-classes="sidebar-dark-danger" class="bg-danger elevation-2"></div>
<div data-classes="sidebar-dark-success" class="bg-success elevation-2"></div>
<div data-classes="sidebar-dark-indigo" class="bg-indigo elevation-2"></div>
<div data-classes="sidebar-dark-lightblue" class="bg-lightblue elevation-2"></div>
<div data-classes="sidebar-dark-navy" class="bg-navy elevation-2"></div>
<div data-classes="sidebar-dark-purple" class="bg-purple elevation-2"></div>
<div data-classes="sidebar-dark-fuchsia" class="bg-fuchsia elevation-2"></div>
<div data-classes="sidebar-dark-pink" class="bg-pink elevation-2"></div>
<div data-classes="sidebar-dark-maroon" class="bg-maroon elevation-2"></div>
<div data-classes="sidebar-dark-orange" class="bg-orange elevation-2"></div>
<div data-classes="sidebar-dark-lime" class="bg-lime elevation-2"></div>
<div data-classes="sidebar-dark-teal" class="bg-teal elevation-2"></div>
<div data-classes="sidebar-dark-olive" class="bg-olive elevation-2"></div>
</div>
<h6>Light Sidebar Variants</h6>
<div class="d-flex"></div>
<div class="d-flex flex-wrap mb-3 menu-items" id="light-sidebar-variants">
<div data-classes="sidebar-light-primary" class="bg-primary elevation-2"></div>
<div data-classes="sidebar-light-warning" class="bg-warning elevation-2"></div>
<div data-classes="sidebar-light-info" class="bg-info elevation-2"></div>
<div data-classes="sidebar-light-danger" class="bg-danger elevation-2"></div>
<div data-classes="sidebar-light-success" class="bg-success elevation-2"></div>
<div data-classes="sidebar-light-indigo" class="bg-indigo elevation-2"></div>
<div data-classes="sidebar-light-lightblue" class="bg-lightblue elevation-2"></div>
<div data-classes="sidebar-light-navy" class="bg-navy elevation-2"></div>
<div data-classes="sidebar-light-purple" class="bg-purple elevation-2"></div>
<div data-classes="sidebar-light-fuchsia" class="bg-fuchsia elevation-2"></div>
<div data-classes="sidebar-light-pink" class="bg-pink elevation-2"></div>
<div data-classes="sidebar-light-maroon" class="bg-maroon elevation-2"></div>
<div data-classes="sidebar-light-orange" class="bg-orange elevation-2"></div>
<div data-classes="sidebar-light-lime" class="bg-lime elevation-2"></div>
<div data-classes="sidebar-light-teal" class="bg-teal elevation-2"></div>
<div data-classes="sidebar-light-olive" class="bg-olive elevation-2"></div>
</div>
<h6>Brand Logo Variants</h6>
<div class="d-flex"></div>
<div class="d-flex flex-wrap mb-3 menu-items" id="brand-logo-variants">
<div data-classes="navbar-primary" class="bg-primary elevation-2"></div>
<div data-classes="navbar-secondary" class="bg-secondary elevation-2"></div>
<div data-classes="navbar-info" class="bg-info elevation-2"></div>
<div data-classes="navbar-success" class="bg-success elevation-2"></div>
<div data-classes="navbar-danger" class="bg-danger elevation-2"></div>
<div data-classes="navbar-indigo" class="bg-indigo elevation-2"></div>
<div data-classes="navbar-purple" class="bg-purple elevation-2"></div>
<div data-classes="navbar-pink" class="bg-pink elevation-2"></div>
<div data-classes="navbar-navy" class="bg-navy elevation-2"></div>
<div data-classes="navbar-lightblue" class="bg-lightblue elevation-2"></div>
<div data-classes="navbar-teal" class="bg-teal elevation-2"></div>
<div data-classes="navbar-cyan" class="bg-cyan elevation-2"></div>
<div data-classes="navbar-dark" class="bg-dark elevation-2"></div>
<div data-classes="navbar-gray" class="bg-gray-dark elevation-2"></div>
<div data-classes="navbar-gray" class="bg-gray elevation-2"></div>
<div data-classes="navbar-light" class="bg-light elevation-2"></div>
<div data-classes="navbar-warning" class="bg-warning elevation-2"></div>
<div data-classes="navbar-white" class="bg-white elevation-2"></div>
<div data-classes="navbar-orange" class="bg-orange elevation-2"></div>
<div data-classes="">clear</div>
</div>
<button type="button" class="btn btn-success btn-sm" data-toggle="modal" data-target="#codeBox">Show code</button>
</div>
</aside>

View File

@@ -0,0 +1,28 @@
{% load i18n jazzmin %}
{% trans "General" as general_tab %}
{% get_sections adminform inline_admin_formsets as forms %}
<div class="row" id="jazzy-tabs">
<div class="col-5 col-sm-3">
<div class="nav flex-column nav-tabs h-100" role="tablist" aria-orientation="vertical">
{% for fieldset in forms %}
<a class="nav-link {% if forloop.first %}active{% endif %}" data-toggle="pill" href="#{{ fieldset.name|default:general_tab|unicode_slugify }}-tab" role="tab" aria-controls="{{ fieldset.name|default:general_tab|unicode_slugify }}-tab" aria-selected="{% if forloop.first %}true{% else %}false{% endif %}">
{{ fieldset.name|default:general_tab }}
</a>
{% endfor %}
</div>
</div>
<div class="col-7 col-sm-9">
<div class="tab-content">
{% for fieldset in forms %}
<div class="tab-pane fade {% if forloop.first %}show active{% endif %} {{ fieldset.classes }}" id="{{ fieldset.name|default:general_tab|unicode_slugify }}-tab" role="tabpanel">
{% if fieldset.is_inline %}
{% include fieldset.opts.template with inline_admin_formset=fieldset %}
{% else %}
{% include "admin/includes/fieldset.html" with card=True %}
{% endif %}
</div>
{% endfor %}
</div>
</div>
</div>

View File

@@ -0,0 +1,6 @@
<select name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}>{% for group_name, group_choices, group_index in widget.optgroups %}{% if group_name %}
<optgroup label="{{ group_name }}">{% endif %}{% for option in group_choices %}
{% include option.template_name with widget=option %}{% endfor %}{% if group_name %}
</optgroup>{% endif %}{% endfor %}
</select>
<script>django.jQuery('#id_{{ widget.name }}').select2({ width: 'element' })</script>

View File

@@ -0,0 +1,84 @@
{% load i18n static jazzmin admin_urls %}
{% get_current_language as LANGUAGE_CODE %}
{% get_current_language_bidi as LANGUAGE_BIDI %}
{% get_jazzmin_settings request as jazzmin_settings %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>{% block title %}{{ title }} | {{ jazzmin_settings.site_title }}{% endblock %}</title>
<!-- Font Awesome Icons -->
<link rel="stylesheet" href="{% static "vendor/fontawesome-free/css/all.min.css" %}">
<!-- Bootstrap and adminLTE -->
<link rel="stylesheet" href="{% static "vendor/adminlte/css/adminlte.min.css" %}">
<!-- Bootswatch theme -->
{% if jazzmin_ui.theme.name != 'default' %}
<link rel="stylesheet" href="{{ jazzmin_ui.theme.src }}" id="jazzmin-theme" />
{% endif %}
{% if jazzmin_ui.dark_mode_theme %}
<link rel="stylesheet" href="{{ jazzmin_ui.dark_mode_theme.src }}" id="jazzmin-dark-mode-theme" media="(prefers-color-scheme: dark)"/>
{% endif %}
<!-- Custom fixes for django -->
<link rel="stylesheet" href="{% static "jazzmin/css/main.css" %}">
{% if jazzmin_settings.custom_css %}
<!-- Custom CSS -->
<link rel="stylesheet" href="{% static jazzmin_settings.custom_css %}">
{% endif %}
<!-- favicons -->
<link rel="shortcut icon" href="{% static jazzmin_settings.site_icon %}" type="image/png">
<link rel="icon" href="{% static jazzmin_settings.site_icon %}" sizes="32x32" type="image/png">
{% if jazzmin_settings.use_google_fonts_cdn %}
<!-- Google Font: Source Sans Pro -->
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700" rel="stylesheet">
{% endif %}
{% block extrastyle %} {% endblock %}
{% block extrahead %} {% endblock %}
</head>
<body class="hold-transition jazzmin-login-page">
<div class="login-box">
<div class="login-logo">
<h1>
<picture>
<source
srcset="{% static jazzmin_settings.login_logo_dark %}"
media="(prefers-color-scheme: dark)">
<img src="{% static jazzmin_settings.login_logo %}" alt="{{ jazzmin_settings.site_header }}">
</picture>
</h1>
</div>
<div class="card">
<div class="card-body">
{% block content %} {% endblock %}
</div>
</div>
</div>
<!-- jQuery -->
<script src="{% static "admin/js/vendor/jquery/jquery.js" %}"></script>
<!-- Bootstrap 4 -->
<script src="{% static 'vendor/bootstrap/js/bootstrap.min.js' %}"></script>
<!-- AdminLTE App -->
<script src="{% static 'vendor/adminlte/js/adminlte.min.js' %}"></script>
{% if jazzmin_settings.custom_js %}
<script src="{% static jazzmin_settings.custom_js %}"></script>
{% endif %}
</body>
</html>

View File

@@ -0,0 +1,13 @@
{% extends "registration/base.html" %}
{% load i18n %}
{% block content %}
<p class="login-box-msg">{{ jazzmin_settings.welcome_sign }}</p>
<p class="text-center">
{% trans "Thanks for spending some quality time with the Web site today." %}
</p>
<a class="btn {{ jazzmin_ui.button_classes.primary }} btn-block" href="{% url 'admin:index' %}">
{% trans 'Log in again' %}
</a>
{% endblock %}

View File

@@ -0,0 +1,24 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block userlinks %}
{% url 'django-admindocs-docroot' as docsroot %}
{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %}
{% trans 'Change password' %} /
<a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>
{% endblock %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item active">{% trans 'Password change' %}</li>
</ol>
{% endblock %}
{% block title %}{{ title }}{% endblock %}
{% block content_title %} {{ title }} {% endblock %}
{% block content %}
<div id="content-main" class="col-12">
<div class="callout callout-success">
<p>{% trans 'Your password was changed.' %}</p>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,120 @@
{% extends "admin/base_site.html" %}
{% load i18n static jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{# TODO: This should come through somewhere, also admin docs :( #}
{% block userlinks %}
{% url 'django-admindocs-docroot' as docsroot %}
{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %}
{% trans 'Change password' %} / <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>
{% endblock %}
{% block breadcrumbs %}
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li class="breadcrumb-item active">{% trans 'Password change' %}</li>
</ol>
{% endblock %}
{% block title %}{{ title }}{% endblock %}
{% block content_title %}{{ title }}{% endblock %}
{% block content %}
<div class="col-12">
<div class="card">
<div class="card-header with-border">
<h4 class="card-title">
<p>{% trans "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly." %}</p>
</h4>
</div>
<div class="card-body">
<div id="content-main">
<form method="post">{% csrf_token %}
<div>
{% if form.errors %}
<div class="callout callout-danger">
{% if errors|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
</div>
{% endif %}
<fieldset class="module aligned">
<div class="row form-group">
<div class="col-12 col-md-2">
<label class="control-label float-md-right">
{{ form.old_password.field.label }}
</label>
</div>
<div class="col-12 col-md-6">
{{ form.old_password }}
{% if form.old_password.help_text %}
<div class="help-block">{{ form.old_password.help_text|safe }}</div>
{% endif %}
</div>
<div class="col-12 col-md-4">
<div class="help-block text-red">
{{ form.old_password.errors }}
</div>
</div>
</div>
<div class="row form-group">
<div class="col-12 col-md-2">
<label class="control-label float-md-right">
{{ form.new_password1.field.label }}
</label>
</div>
<div class="col-12 col-md-6">
{{ form.new_password1 }}
{% if form.new_password1.help_text %}
<div class="help-block">{{ form.new_password1.help_text|safe }}</div>
{% endif %}
</div>
<div class="col-12 col-md-4">
<div class="help-block text-red">
{{ form.new_password1.errors }}
</div>
</div>
</div>
<div class="row form-group">
<div class="col-12 col-md-2">
<label class="control-label float-md-right">
{{ form.new_password2.field.label }}
</label>
</div>
<div class="col-12 col-md-6">
{{ form.new_password2 }}
{% if form.new_password1.help_text %}
<div class="help-block">{{ form.new_password2.help_text|safe }}</div>
{% endif %}
</div>
<div class="col-12 col-md-4">
<div class="help-block text-red">
{{ form.new_password2.errors }}
</div>
</div>
</div>
</fieldset>
<div class="row">
<div class="submit-row col-md-12 col-md-push-2">
<input type="submit" value="{% trans 'Change password' %}" class="btn {{ jazzmin_ui.button_classes.primary }}">
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}
{% block extrajs %}
<script>
$('[required]').before('<span class="text-red" style="margin-left: -10px;">* </span>');
</script>
{% endblock %}

View File

@@ -0,0 +1,14 @@
{% extends "registration/base.html" %}
{% load i18n %}
{% block content %}
<p class="login-box-msg">{% trans "Your password has been set. You may go ahead and log in now." %}</p>
<div class="row">
<div class="col-12">
<a href="{{ login_url }}">
<button class="btn {{ jazzmin_ui.button_classes.primary }} btn-block">{% trans 'Log in' %}</button>
</a>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,60 @@
{% extends "registration/base.html" %}
{% load i18n %}
{% block content %}
{% if validlink %}
<p class="login-box-msg">
{% trans "Please enter your new password twice so we can verify you typed it in correctly." %}
</p>
<form method="post">{% csrf_token %}
{% if form.errors %}
{% if form.new_password1.errors %}
<div class="callout callout-danger">
<p>{{ form.new_password1.label }}: {{ form.new_password1.errors|join:', ' }}</p>
</div>
{% endif %}
{% if form.new_password2.errors %}
<div class="callout callout-danger">
<p>{{ form.new_password2.label }}: {{ form.new_password2.errors|join:', ' }}</p>
</div>
{% endif %}
{% if form.non_field_errors %}
<div class="callout callout-danger">
{% for error in form.non_field_errors %}
<p>{{ error }}</p>
{% endfor %}
</div>
{% endif %}
{% endif %}
<input class="hidden" autocomplete="username" value="{{ form.user.get_username }}">
<div class="input-group mb-3">
<input type="password" name="new_password1" class="form-control" placeholder="{{ form.new_password1.label }}" required>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-lock"></span>
</div>
</div>
</div>
<div class="input-group mb-3">
<input type="password" name="new_password2" class="form-control" placeholder="{{ form.new_password2.label }}" required>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-lock"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<button type="submit" class="btn {{ jazzmin_ui.button_classes.primary }} btn-block">
{% trans 'Change my password' %}
</button>
</div>
</div>
</form>
{% else %}
<p>
{% trans "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." %}
</p>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,20 @@
{% extends "registration/base.html" %}
{% load i18n %}
{% block content %}
<p>
{% blocktrans trimmed %}
Weve emailed you instructions for setting your password,
if an account exists with the email you entered.
You should receive them shortly.
{% endblocktrans %}
</p>
<p>
{% blocktrans trimmed %}
If you dont receive an email, please make sure
youve entered the address you registered with,
and check your spam folder.
{% endblocktrans %}
</p>
{% endblock %}

View File

@@ -0,0 +1,46 @@
{% extends "registration/base.html" %}
{% load i18n jazzmin %}
{% get_jazzmin_ui_tweaks as jazzmin_ui %}
{% block content %}
<p class="login-box-msg">
{% blocktrans trimmed %}
Forgotten your password?
Enter your email address below, and well
email instructions for setting a new one.
{% endblocktrans %}
</p>
<form method="post">
{% csrf_token %}
{% if form.errors %}
{% if form.email.errors %}
<div class="callout callout-danger">
<p>{{ form.email.label }}: {{ form.email.errors|join:', ' }}</p>
</div>
{% endif %}
{% if form.non_field_errors %}
<div class="callout callout-danger">
{% for error in form.non_field_errors %}
<p>{{ error }}</p>
{% endfor %}
</div>
{% endif %}
{% endif %}
<div class="input-group mb-3">
<input type="text" name="email" class="form-control" placeholder="{{ form.email.label }}" required>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-envelope"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<button type="submit" class="btn {{ jazzmin_ui.button_classes.primary }} btn-block">
{% trans 'Reset my password' %}
</button>
</div>
</div>
</form>
{% endblock %}