README.md edited
This commit is contained in:
@@ -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>
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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' %} © {% 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">×</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>
|
||||
@@ -0,0 +1 @@
|
||||
{% extends 'admin/base.html' %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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> {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
@@ -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 %}
|
||||
@@ -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 }}">‹ {{ 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 %}
|
||||
@@ -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, I’m 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 %}
|
||||
@@ -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, I’m 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 %}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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 %}
|
||||
@@ -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, I’m 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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}&_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 %}
|
||||
@@ -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 %}
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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>
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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>
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
<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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
|
||||
Reference in New Issue
Block a user