update grappeli templates, fixes 1684

This commit is contained in:
Benjamin Dauvergne 2012-09-19 14:45:15 +00:00
parent 52e1373102
commit ac854b6949
22 changed files with 752 additions and 486 deletions

View File

@ -8,6 +8,6 @@
<!-- CONTENT -->
{% block content %}
<h2>{% trans "Page not found" %}</h2>
<p>{% trans "We're sorry, but the requested page could not be found." %}</p>
<h2>{% trans "Page not found" %}</h2>
<p>{% trans "We're sorry, but the requested page could not be found." %}</p>
{% endblock %}

View File

@ -4,13 +4,18 @@
{% load i18n %}
<!-- BREADCRUMBS -->
{% block breadcrumbs %}<div id="breadcrumbs"><a href="/">{% trans "Home" %}</a> &rsaquo; {% trans "Server error" %}</div>{% endblock %}
{% block breadcrumbs %}
<ul class="grp-horizontal-list">
<li><a href="/">{% trans "Home" %}</a></li>
<li>{% trans "Server error" %}</li>
</ul>
{% endblock %}
<!-- TITLE -->
{% block title %}{% trans "Server error (500)" %}{% endblock %}
<!-- CONTENT -->
{% block content %}
<h1>{% trans "Server Error <em>(500)</em>" %}</h1>
<p>{% trans "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience." %}</p>
<h1>{% trans "Server Error <em>(500)</em>" %}</h1>
<p>{% trans "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience." %}</p>
{% endblock %}

View File

@ -1,14 +1,14 @@
{% load i18n %}
<div class="changelist-actions">
<div class="grp-changelist-actions">
{% for field in action_form %}{{ field }}{% endfor %}
{% if actions_selection_counter %}
<script type="text/javascript">var _actions_icnt="{{ cl.result_list|length|default:"0" }}";</script>
<ul>
<li class="action-counter"><span class="action-counter">{{ selection_note }}</span></li>
<ul class="grp-horizontal-list grp-float-left">
<li class="grp-action-counter"><span class="grp-button grp-button-state-inactive grp-action-counter">{{ selection_note }}</span></li>
{% if cl.result_count != cl.result_list|length %}
<li class="all"><span class="all">{{ selection_note_all }}</span></li>
<li class="question"><a href="javascript:;" 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></li>
<li class="clear-selection"><a href="javascript://" class="clear">{% trans "Clear selection" %}</a></li>
<li class="grp-all"><span class="all grp-button grp-button-state-inactive">{{ selection_note_all }}</span></li>
<li class="grp-question"><a href="javascript://" class="grp-button" 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></li>
<li class="grp-clear-selection"><a href="javascript://" class="grp-button grp-clear">{% trans "Clear selection" %}</a></li>
{% endif %}
</ul>
{% endif %}

View File

@ -1,4 +1,5 @@
{% extends "admin/index.html" %}
{% load url from future %}
{% load i18n grp_tags %}
{% block javascripts %}
@ -7,34 +8,36 @@
{% if not is_popup %}
{% block breadcrumbs %}
<div id="breadcrumbs">
<a href="../">{% trans "Home" %}</a> &rsaquo;
<ul class="grp-horizontal-list">
<li><a href="../">{% trans "Home" %}</a></li>
{% for app in app_list %}
{% trans app.name %}
{% blocktrans with app.name as name %}<li>{{ name }}</li>{% endblocktrans %}
{% endfor %}
</div>
</ul>
{% endblock %}
{% endif %}
{% block content %}
<div class="container-grid">
<div class="column span-12" id="apps_init">
{% if app_list %}
{% for app in app_list %}
<div class="module" id="app_{{ app.name|lower }}">
<h2>{% trans app.name %}</h2>
{% for model in app.models %}
<div class="row">
{% if model.perms.change %}<a href="{{ model.admin_url }}">{{ model.name }}</a>{% else %}<span>{{ model.name }}</span>{% endif %}
<ul class="actions">
<li class="add-link">{% if model.perms.add %}<a href="{{ model.admin_url }}add/">{% trans 'Add' %}</a>{% else %}&nbsp;{% endif %}</li>
<li class="change-link"> {% if model.perms.change %}<a href="{{ model.admin_url }}">{% trans 'Change' %}</a>{% else %}&nbsp;{% endif %}</li>
<div class="g-d-c">
<div class="g-d-12" id="apps_init">
{% for app in app_list %}
<div class="grp-module" id="app_{{ app.name|lower }}">
<h2>{% trans app.name %}</h2>
{% for model in app.models %}
<div class="grp-row">
{% if model.perms.change %}<a href="{{ model.admin_url }}"><strong>{{ model.name }}</strong></a>{% else %}<span><strong>{{ model.name }}</strong></span>{% endif %}
{% if model.perms.add or model.perms.change %}
<ul class="grp-actions">
{% if model.perms.add %}<li class="grp-add-link"><a href="{{ model.admin_url }}add/">{% trans 'Add' %}</a></li>{% endif %}
{% if model.perms.change %}<li class="grp-change-link"><a href="{{ model.admin_url }}">{% trans 'Change' %}</a></li>{% endif %}
</ul>
</div>
{% endfor %}
</div>
{% endfor %}
{% endif %}
{% endif %}
</div>
{% endfor %}
</div>
{% empty %}
<p>{% trans "You don´t have permission to edit anything." %}</p>
{% endfor %}
</div>
</div>
{% endblock %}

View File

@ -1,83 +1,123 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ LANGUAGE_CODE }}" xml:lang="{{ LANGUAGE_CODE }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
{% load adminmedia i18n grp_tags %}
{% load admin_static %}{% load url from future %}{% load i18n grp_tags %}
<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
<head>
<title>{% block title %}{% endblock %}</title>
{% block blockbots %}
<meta name="robots" content="NONE,NOARCHIVE" />
{% endblock %}
<meta charset="utf-8" />
{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
<!-- STYLESHEETS -->
{% block stylesheets %}
<link href="{% admin_media_prefix %}css/base.css" rel="stylesheet" type="text/css" />
{% if LANGUAGE_BIDI %}<link href="{% block stylesheet_rtl %}{% admin_media_prefix %}css/rtl.css{% endblock %}" rel="stylesheet" type="text/css" />{% endif %}
<link href="{% admin_media_prefix %}jquery/ui/css/custom-theme/jquery-ui-1.8.custom.css" rel="stylesheet" type="text/css" media="screen" title="no title" charset="utf-8">
<link href="{% admin_media_prefix %}css/jquery-ui-grappelli-extensions.css" rel="stylesheet" type="text/css" />
<link href="{% static "grappelli/jquery/ui/css/custom-theme/jquery-ui-1.8.18.custom.css" %}" rel="stylesheet" type="text/css" media="screen" />
<link href="{% static "grappelli/stylesheets/screen.css" %}" rel="stylesheet" type="text/css" media="screen" />
{% if LANGUAGE_BIDI %}
<link href="{% static "grappelli/stylesheets/mueller/grid/output-rtl.css" %}" rel="stylesheet" type="text/css" media="screen" />
<link href="{% block stylesheet_rtl %}{% static "grappelli/stylesheets/rtl.css" %}{% endblock %}" rel="stylesheet" type="text/css" media="screen" />
{% else %}
<link href="{% static "grappelli/stylesheets/mueller/grid/output.css" %}" rel="stylesheet" type="text/css" media="screen" />
{% endif %}
{% endblock %}
<!-- EXTRASTYLES -->
{% block extrastyle %}{% endblock %}
<!-- JAVASCRIPTS -->
{% block javascripts %}
<script type="text/javascript">
<script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "grappelli/" %}{% endfilter %}";</script>
<script type="text/javascript" charset="utf-8">
// GLOBALS
var grappelli = {},
// TODO: klemens: drop ADMIN_URL
ADMIN_URL = "{% url admin:index %}",
ADMIN_URL = "{% url 'admin:index' %}",
MODEL_URL_ARRAY = {% get_content_types %},
DATE_FORMAT = "{% get_date_format %}",
TIME_FORMAT = "{% get_time_format %}",
DATETIME_FORMAT = "{% get_datetime_format %}";
</script>
<!-- NOTE klemens: put this in admin/includes_grappelli/header_js.html -->
<!-- jQuery, jQuery-UI -->
<script src="{% admin_media_prefix %}jquery/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="{% admin_media_prefix %}jquery/ui/js/jquery-ui-1.8.5.custom.min.js" type="text/javascript"></script>
<!-- Grappelli Main JS -->
<script src="{% admin_media_prefix %}js/grappelli/grappelli.js" type="text/javascript"></script>
<!-- Grappelli jQuery Plugins, Widgets -->
<script src="{% admin_media_prefix %}js/grappelli/jquery.grp_collapsible.js"type="text/javascript" ></script>
<script src="{% admin_media_prefix %}js/grappelli/jquery.grp_collapsible_group.js" type="text/javascript"></script>
<script src="{% admin_media_prefix %}js/grappelli/jquery.grp_timepicker.js" type="text/javascript"></script>
<script src="{% admin_media_prefix %}js/grappelli/jquery.grp_related_fk.js" type="text/javascript"></script>
<script src="{% admin_media_prefix %}js/grappelli/jquery.grp_related_m2m.js" type="text/javascript"></script>
<script src="{% admin_media_prefix %}js/grappelli/jquery.grp_related_generic.js" type="text/javascript"></script>
<script src="{% static "grappelli/jquery/jquery-1.7.2.min.js" %}" type="text/javascript"></script>
<script src="{% static "grappelli/jquery/ui/js/jquery-ui-1.8.18.custom.min.js" %}" type="text/javascript"></script>
{% if debug %}
<!-- Grappelli Main JS -->
<script src="{% static "grappelli/js/grappelli.js" %}" type="text/javascript"></script>
<!-- Grappelli jQuery Plugins, Widgets -->
<script src="{% static "grappelli/js/jquery.grp_collapsible.js" %}" type="text/javascript"></script>
<script src="{% static "grappelli/js/jquery.grp_collapsible_group.js" %}" type="text/javascript"></script>
<script src="{% static "grappelli/js/jquery.grp_timepicker.js" %}" type="text/javascript"></script>
<script src="{% static "grappelli/js/jquery.grp_related_fk.js" %}" type="text/javascript"></script>
<script src="{% static "grappelli/js/jquery.grp_related_m2m.js" %}" type="text/javascript"></script>
<script src="{% static "grappelli/js/jquery.grp_related_generic.js" %}" type="text/javascript"></script>
<script src="{% static "grappelli/js/jquery.grp_autocomplete_fk.js" %}" type="text/javascript"></script>
<script src="{% static "grappelli/js/jquery.grp_autocomplete_m2m.js" %}" type="text/javascript"></script>
<script src="{% static "grappelli/js/jquery.grp_autocomplete_generic.js" %}" type="text/javascript"></script>
<script src="{% static "grappelli/js/jquery.grp_inline.js" %}" type="text/javascript"></script>
{% else %}
<!-- Grappelli Minified -->
<script src="{% static "grappelli/js/grappelli.min.js" %}" type="text/javascript"></script>
{% endif %}
{% endblock %}
<!-- EXTRAHEAD -->
{% block extrahead %}{% endblock %}
</head>
<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}">
<div id="container">
<body class="{% if is_popup %}grp-popup {% endif %}{% block bodyclass %}{% endblock %}{% if LANGUAGE_BIDI %} rtl{% endif %}">
<div id="grp-container">
<!-- HEADER -->
{% if not is_popup %}
{% include "admin/includes_grappelli/header.html" %}
<!-- BREADCRUMBS -->
{% block breadcrumbs %}
<div id="breadcrumbs"><a href="/">{% trans 'Home' %}</a>{% if title %} &rsaquo; {{ title }}{% endif %}</div>
{% endblock %}
{% endif %}
<!-- MESSAGES -->
{% if messages %}
<ul class="messagelist">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
<header id="grp-header" class="{% block header-class %}{% endblock %}">
{% if not is_popup %}
<!-- NAVIGATION -->
{% include "admin/includes_grappelli/header.html" %}
<!-- CONTEXT NAVIGATION -->
<div id="grp-context-navigation">
<nav id="grp-breadcrumbs" class="{% block breadcrumbs-class %}{% endblock %}">
<header style="display:none"><h1>Breadcrumbs</h1></header>
{% block breadcrumbs %}
<ul>
<li><a href="/">{% trans 'Home' %}</a></li>
{% if title %}
<li> &rsaquo; {{ title }}</li>
{% endif %}
</ul>
{% endblock %}
</nav>
<nav id="grp-page-tools">
<header style="display:none"><h1>Page Tools</h1></header>
{% block page-tools %}{% endblock %}
</nav>
</div>
{% endif %}
</header>
<!-- CONTENT -->
<div id="content" class="{% block content-class %}{% endblock %}">
{% block pretitle %}{% endblock %}
{% block content_title %}{% if title %}<h1>{% trans title %}</h1>{% endif %}{% endblock %}
{% block object-tools %}{% endblock %}
{% block content %}
{{ content }}
{% block filters %}{% endblock %}
{% endblock %}
<br class="clear" />
</div>
<article id="grp-content" class="{% block content-class %}{% endblock %}">
<!-- MESSAGES -->
{% if messages %}
<ul class="grp-messagelist">
{% for message in messages %}
<li{% if message.tags %} class="grp-{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
<!-- CONTENT TITLE -->
<header id="grp-content-title">
{% block pretitle %}{% endblock %}
{% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %}
{% block object-tools %}{% endblock %}
</header>
<!-- CONTENT-CONTAINER -->
<div id="grp-content-container">
{% block content %}
{{ content }}
{% block filters %}{% endblock %}
{% endblock %}
</div>
</article>
<!-- FOOTER -->
{% block footer %}<div id="footer"></div>{% endblock %}
{% block footer %}{% endblock %}
</div>
</body>
</html>
</html>

View File

@ -1,7 +1,8 @@
{% extends "admin/base_site.html" %}
<!-- LOADING -->
{% load i18n admin_modify adminmedia grp_tags %}
{% load url from future %}
{% load admin_static i18n admin_modify grp_tags %}
<!-- STYLESHEETS -->
{% block stylesheets %}
@ -11,59 +12,104 @@
<!-- JAVASCRIPTS -->
{% block javascripts %}
{{ block.super }}
{% url admin:jsi18n as jsi18nurl %}
{% url 'admin:jsi18n' as jsi18nurl %}
<script type="text/javascript" src="{{ jsi18nurl|default:'../../../jsi18n/' }}"></script>
<script src="{% admin_media_prefix %}js/grappelli/jquery.grp_inline.js" type="text/javascript"></script>
<script type="text/javascript" charset="utf-8">
(function($) {
$(document).ready(function() {
grappelli.initDateAndTimePicker();
$("div.container-flexible div.group").grp_collapsible_group();
$("div#content .collapse").grp_collapsible({
$("#grp-content-container .grp-group").grp_collapsible_group();
$("#grp-content-container .grp-collapse").grp_collapsible({
on_init: function(elem, options) {
// open collapse (and all collapse parents) in case of errors
if (elem.find("ul.errorlist").length > 0) {
elem.removeClass("closed")
.addClass("open");
elem.parents(".collapse")
.removeClass("closed")
.addClass("open");
elem.removeClass("grp-closed")
.addClass("grp-open");
elem.parents(".grp-collapse")
.removeClass("grp-closed")
.addClass("grp-open");
}
}
});
var related_lookup_fields_fk = {% get_related_lookup_fields_fk adminform.model_admin %};
var related_lookup_fields_m2m = {% get_related_lookup_fields_m2m adminform.model_admin %};
var related_lookup_fields_generic = {% get_related_lookup_fields_generic adminform.model_admin %};
var autocomplete_fields_fk = {% get_autocomplete_lookup_fields_fk adminform.model_admin %};
var autocomplete_fields_m2m = {% get_autocomplete_lookup_fields_m2m adminform.model_admin %};
var autocomplete_fields_generic = {% get_autocomplete_lookup_fields_generic adminform.model_admin %};
$.each(related_lookup_fields_fk, function() {
$("#id_" + this).grp_related_fk({lookup_url:"{% url grp_related_lookup %}"});
$("#id_" + this).grp_related_fk({lookup_url:"{% url 'grp_related_lookup' %}"});
});
$.each(related_lookup_fields_m2m, function() {
$("#id_" + this).grp_related_m2m({lookup_url:"{% url grp_m2m_lookup %}"});
$("#id_" + this).grp_related_m2m({lookup_url:"{% url 'grp_m2m_lookup' %}"});
});
$.each(related_lookup_fields_generic, function() {
var content_type = "#id_" + this[0],
object_id = "#id_" + this[1];
$(object_id).grp_related_generic({content_type:content_type, object_id:object_id, lookup_url:"{% url grp_related_lookup %}"});
$(object_id).grp_related_generic({content_type:content_type, object_id:object_id, lookup_url:"{% url 'grp_related_lookup' %}"});
});
$.each(autocomplete_fields_fk, function() {
$("#id_" + this).grp_autocomplete_fk({
lookup_url:"{% url 'grp_related_lookup' %}",
autocomplete_lookup_url:"{% url 'grp_autocomplete_lookup' %}"
});
});
$.each(autocomplete_fields_m2m, function() {
$("#id_" + this).grp_autocomplete_m2m({
lookup_url:"{% url 'grp_m2m_lookup' %}",
autocomplete_lookup_url:"{% url 'grp_autocomplete_lookup' %}"
});
});
$.each(autocomplete_fields_generic, function() {
var content_type = "#id_" + this[0],
object_id = "#id_" + this[1];
$(object_id).grp_autocomplete_generic({
content_type:content_type,
object_id:object_id,
lookup_url:"{% url 'grp_related_lookup' %}",
autocomplete_lookup_url:"{% url 'grp_autocomplete_lookup' %}"
});
});
$("a#grp-open-all").bind("click", function(){
$("#grp-content .grp-collapse-handler").each(function() {
$(this).parent(".grp-collapse").removeClass("grp-closed").addClass("grp-open");
});
});
$("a#grp-close-all").bind("click", function(){
$("#grp-content .grp-collapse-handler").each(function() {
$(this).parent(".grp-collapse").removeClass("grp-open").addClass("grp-closed");
});
});
});
})(django.jQuery);
})(grp.jQuery);
</script>
{{ media }}
{% endblock %}
<!-- COLTYPE/BODYCLASS -->
{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
{% block content-class %}content-flexible{% endblock %}
{% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} grp-change-form{% endblock %}
{% block content-class %}{% endblock %}
<!-- PAGE-TOOLS -->
{% block page-tools %}
{% if not is_popup %}
<ul>
<li><a href="javascript://" class="grp-tool" id="grp-open-all" title="{% trans 'Open All Items' %}">&nbsp;</a></li>
<li><a href="javascript://" class="grp-tool" id="grp-close-all" title="{% trans 'Close All Items' %}">&nbsp;</a></li>
</ul>
{% endif %}
{% endblock %}
<!-- BREADCRUMBS -->
{% block breadcrumbs %}
{% if not is_popup %}
<div id="breadcrumbs">
<a href="../../../">{% trans "Home" %}</a> &rsaquo;
<a href="../../">{% trans app_label %}</a> &rsaquo;
{% if has_change_permission %}<a href="../">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %} &rsaquo;
{% if add %}{% trans "Add" %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}
</div>
<ul>
<li><a href="../../../">{% trans "Home" %}</a></li>
<li><a href="../../">{% trans app_label|capfirst|escape %}</a></li>
<li>{% if has_change_permission %}<a href="../">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %}</li>
<li>{% if add %}{% trans "Add" %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}</li>
</ul>
{% endif %}
{% endblock %}
@ -71,9 +117,11 @@
{% block object-tools %}
{% if change %}
{% if not is_popup %}
<ul class="tools">
<li><a href="history/">{% trans "History" %}</a></li>
{% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="focus" target="_blank">{% trans "View on site" %}</a></li>{% endif%}
<ul class="grp-object-tools">
{% block object-tools-items %}
<li><a href="history/">{% trans "History" %}</a></li>
{% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="grp-state-focus" target="_blank">{% trans "View on site" %}</a></li>{% endif%}
{% endblock %}
</ul>
{% endif %}
{% endif %}
@ -81,60 +129,60 @@
<!-- CONTENT -->
{% block content %}
<div class="container-flexible">
<div class="form-container">
<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %}
<div>
<!-- Popup Hidden Field -->
{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
<!-- Submit-Row -->
{% if save_on_top %}{% submit_row %}{% endif %}
<!-- Errors -->
{% if errors %}
<p class="errornote">{% blocktrans count errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}</p>
<ul class="errorlist">{% for error in adminform.form.non_field_errors %}<li>{{ error }}</li>{% endfor %}</ul>
{% endif %}
<!-- Fieldsets -->
{% for fieldset in adminform %}
{% include "admin/includes/fieldset.html" %}
{% endfor %}
{% block after_field_sets %}{% endblock %}
<!-- Inlines -->
{% for inline_admin_formset in inline_admin_formsets %}
{% include inline_admin_formset.opts.template %}
{% endfor %}
{% block after_related_objects %}{% endblock %}
<!-- Submit-Row -->
{% submit_row %}
{% if adminform and add %}
{% block extrahead %}
<script type="text/javascript">
(function($){
$(function(){
try {
// focus on first form-field
$("#{{ adminform.first_field.auto_id }}, #{{ adminform.first_field.auto_id }}_0")
.eq(0).focus();
} catch(e) {}
});
}(django.jQuery));
</script>
{% endblock %}
{% endif %}
<!-- JS for prepopulated fields -->
{% prepopulated_fields_js %}
</div>
</form>
<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %}
<div>
<!-- Popup Hidden Field -->
{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
<!-- No Submit-Row on Top -->
<!-- Errors -->
{% if errors %}
<p class="errornote">{% blocktrans count errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}</p>
<ul class="errorlist">{% for error in adminform.form.non_field_errors %}<li>{{ error }}</li>{% endfor %}</ul>
{% endif %}
<!-- Fieldsets -->
{% block field_sets %}
{% for fieldset in adminform %}
{% include "admin/includes/fieldset.html" %}
{% endfor %}
{% endblock %}
{% block after_field_sets %}{% endblock %}
<!-- Inlines -->
{% block inline_field_sets %}
{% for inline_admin_formset in inline_admin_formsets %}
{% include inline_admin_formset.opts.template %}
{% endfor %}
{% endblock %}
{% block after_related_objects %}{% endblock %}
<!-- Submit-Row -->
{% block submit_buttons_bottom %}{% submit_row %}{% endblock %}
{% if adminform and add %}
{% block extrahead %}
{{ block.super }}
<script type="text/javascript">
(function($){
$(function(){
try {
// focus on first form-field
$("#{{ adminform.first_field.auto_id }}, #{{ adminform.first_field.auto_id }}_0")
.eq(0).focus();
} catch(e) {}
});
}(grp.jQuery));
</script>
{% endblock %}
{% endif %}
<!-- JS for prepopulated fields -->
{% prepopulated_fields_js %}
</div>
</div>
</form>
{% endblock %}

View File

@ -1,7 +1,8 @@
{% extends "admin/base_site.html" %}
<!-- LOADING -->
{% load adminmedia admin_list i18n grp_tags %}
{% load url from future %}
{% load admin_list i18n grp_tags %}
<!-- STYLESHEETS -->
{% block stylesheets %}
@ -12,6 +13,7 @@
<!-- JAVASCRIPTS -->
{% block javascripts %}
{{ block.super }}
{{ media.js }}
{% if cl.formset or action_form %}
{% url 'admin:jsi18n' as jsi18nurl %}
<script type="text/javascript" src="{{ jsi18nurl|default:'../../jsi18n/'}}"></script>
@ -22,7 +24,7 @@
$(document).ready(function() {
$("tr input.action-select").actions();
});
})(django.jQuery);
})(grp.jQuery);
</script>
{% endif %}
{% if cl.formset %}
@ -34,29 +36,73 @@
var related_lookup_fields_fk = {% get_related_lookup_fields_fk cl.model_admin %};
var related_lookup_fields_m2m = {% get_related_lookup_fields_m2m cl.model_admin %};
var related_lookup_fields_generic = {% get_related_lookup_fields_generic cl.model_admin %};
var autocomplete_fields_fk = {% get_autocomplete_lookup_fields_fk cl.model_admin %};
var autocomplete_fields_m2m = {% get_autocomplete_lookup_fields_m2m cl.model_admin %};
var autocomplete_fields_generic = {% get_autocomplete_lookup_fields_generic cl.model_admin %};
$.each(related_lookup_fields_fk, function() {
$("div.changelist-results")
$("div.grp-changelist-results")
.find("input[name^='" + prefix + "'][name$='" + this + "']")
.grp_related_fk({lookup_url:"{% url grp_related_lookup %}"});
.grp_related_fk({lookup_url:"{% url 'grp_related_lookup' %}"});
});
$.each(related_lookup_fields_m2m, function() {
$("div.changelist-results")
$("div.grp-changelist-results")
.find("input[name^='" + prefix + "'][name$='" + this + "']")
.grp_related_m2m({lookup_url:"{% url grp_m2m_lookup %}"});
.grp_related_m2m({lookup_url:"{% url 'grp_m2m_lookup' %}"});
});
$.each(related_lookup_fields_generic, function() {
var content_type = this[0],
object_id = this[1];
$("div.changelist-results")
$("div.grp-changelist-results")
.find("input[name^='" + prefix + "'][name$='" + this[1] + "']")
.each(function() {
var ct_id = "#id_" + prefix + "-" + $(this).attr("id").split("-")[1] + "-" + content_type,
obj_id = "#id_" + prefix + "-" + $(this).attr("id").split("-")[1] + "-" + object_id;
$(this).grp_related_generic({content_type:ct_id, object_id:obj_id, lookup_url:"{% url grp_related_lookup %}"});
$(this).grp_related_generic({content_type:ct_id, object_id:obj_id, lookup_url:"{% url 'grp_related_lookup' %}"});
});
});
$.each(autocomplete_fields_fk, function() {
$("div.grp-changelist-results")
.find("input[name^='" + prefix + "'][name$='" + this + "']")
.each(function() {
$(this).grp_autocomplete_fk({
lookup_url:"{% url 'grp_related_lookup' %}",
autocomplete_lookup_url:"{% url 'grp_autocomplete_lookup' %}"
});
});
});
$.each(autocomplete_fields_m2m, function() {
$("div.grp-changelist-results")
.find("input[name^='" + prefix + "'][name$='" + this + "']")
.each(function() {
$(this).grp_autocomplete_m2m({
lookup_url:"{% url 'grp_m2m_lookup' %}",
autocomplete_lookup_url:"{% url 'grp_autocomplete_lookup' %}"
});
});
});
$.each(autocomplete_fields_generic, function() {
var content_type = this[0],
object_id = this[1];
$("div.grp-changelist-results")
.find("input[name^='" + prefix + "'][name$='" + this[1] + "']")
.each(function() {
var i = $(this).attr("id").match(/-\d+-/);
if (i) {
var ct_id = "#id_" + prefix + i[0] + content_type,
obj_id = "#id_" + prefix + i[0] + object_id;
$(this).grp_autocomplete_generic({
content_type:ct_id,
object_id:obj_id,
lookup_url:"{% url 'grp_related_lookup' %}",
autocomplete_lookup_url:"{% url 'grp_autocomplete_lookup' %}"
});
}
});
});
// reset actions select box
$('.grp-changelist-actions select').val(-1);
});
})(django.jQuery);
})(grp.jQuery);
</script>
{% endif %}
<script type="text/javascript" charset="utf-8">
@ -64,25 +110,23 @@
$(document).ready(function() {
grappelli.initSearchbar();
grappelli.initFilter();
grappelli.initTableElements(); // HACK: add no-wrap to table-elements.
});
})(django.jQuery);
})(grp.jQuery);
</script>
{{ media.js }}
{% endblock %}
<!-- COLTYPE/BODYCLASS-- >
{% block bodyclass %}change-list{% endblock %}
{% block content-class %}content-flexible{% endblock %}
{% block bodyclass %}grp-change-list{% endblock %}
{% block content-class %}{% endblock %}
<!-- BREADCRUMBS -- >
{% block breadcrumbs %}
{% if not is_popup %}
<div id="breadcrumbs">
<a href="../../">{% trans "Home" %}</a> &rsaquo;
<a href="../">{% trans app_label %}</a> &rsaquo;
{% trans cl.opts.verbose_name_plural|capfirst %}
</div>
<ul class="grp-horizontal-list">
<li><a href="../../">{% trans "Home" %}</a></li>
<li><a href="../">{% trans app_label|capfirst|escape %}</a></li>
<li>{{ cl.opts.verbose_name_plural|capfirst }}</li>
</ul>
{% endif %}
{% endblock %}
@ -94,12 +138,10 @@
<!-- OBJECT-TOOLS -->
{% block object-tools %}
{% if has_add_permission %}
<ul class="tools">
<li>
<a href="add/{% if is_popup %}?_popup=1{% endif %}" class="add-handler focus">
{% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
</a>
</li>
<ul class="grp-object-tools">
{% block object-tools-items %}
<li><a href="add/{% if is_popup %}?_popup=1{% endif %}" class="grp-add-link grp-state-focus">{% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}</a></li>
{% endblock %}
</ul>
{% endif %}
{% endblock %}
@ -107,37 +149,57 @@
<!-- CONTENT -->
{% block content %}
{% if cl.search_fields or cl.has_filters or cl.date_hierarchy %}
<div class="module changelist-filters">
<!-- PAGINATION TOP -->
{% pagination cl %}
{% if cl.has_filters or cl.search_fields %}
<!-- FILTERS -->
{% if cl.has_filters %}
<div id="filters" class="module filter span-6">
<div class="pulldown-container">
<a href="javascript://" class="button toggle-filters">{% trans 'Filter' %}</a>
<div class="filter-pulldown">
{% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %}
</div>
<div class="grp-module">
<div class="grp-row">
<div class="l-2cr-fluid {% if cl.has_filters and cl.search_fields %}l-d-12{% else %}{% if cl.has_filters or cl.search_fields %}l-d-6{% endif %}{% endif %}">
{% if cl.has_filters or cl.search_fields %}
{% block aside %}
<aside class="c-1">
<header style="display:none"><h1>{% if cl.search_fields %}Search{% if cl.has_filters %} &amp; {% endif %}{% endif %}{% if cl.has_filters %}Filters{% endif %}</h1></header>
<!-- SEARCH -->
{% if cl.search_fields %}
{% block search %}
<div id="search" class="g-d-6 g-d-f">
{% search_form cl %}
</div>
{% endblock %}
{% endif %}
<!-- FILTERS -->
{% if cl.has_filters %}
{% block filters %}
<div id="grp-filters" class="g-d-6 g-d-l">
<div class="grp-filter">
<div class="grp-pulldown-container">
<a href="javascript://" class="grp-button grp-pulldown-handler">{% trans 'Filter' %}</a>
<div class="grp-pulldown-content" style="display: none;">
{% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %}
</div>
</div>
</div>
</div>
{% endblock %}
{% endif %}
</aside>
{% endblock %}
{% endif %}
{% block pagination_top %}
<div class="c-2">
<!-- PAGINATION TOP -->
{% pagination cl %}
</div>
</div>
{% endif %}
<!-- SEARCH -->
{% if cl.search_fields %}
<div id="search" class="module search span-6">
{% block search %}{% search_form cl %}{% endblock %}
</div>
{% endif %}
{% endif %}
<br clear="all" />
{% endblock %}
</div>
</div>
<!-- DATE HIERARCHY -->
{% block date_hierarchy %}
{% if cl.date_hierarchy %}{% date_hierarchy cl %}{% endif %}
{% endblock %}
</div>
<!-- DATE HIERARCHY -->
{% if cl.date_hierarchy %}
{% date_hierarchy cl %}
{% endif %}
{% endif %}
<form id="changelist-form" action="" method="post"{% if cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %}>{% csrf_token %}
<div id="changelist" class="container-full{% if cl.list_editable %} editable{% endif %}" style="">
<form id="grp-changelist-form" action="" method="post"{% if cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %}>{% csrf_token %}
<section id="grp-changelist" class="{% if cl.list_editable %} grp-editable{% endif %}">
<header style="display:none"><h1>Results</h1></header>
<!-- POPUP -->
{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
<!-- ERRORS -->
@ -155,19 +217,24 @@
{% block result_list %}
{% result_list cl %}
{% endblock %}
<!-- PAGINATION BOTTOM -->
{% pagination cl %}
</div><br clear="all" />
</section>
<!-- PAGINATION BOTTOM -->
{% if not cl.result_count == 0 %}
{% block pagination_bottom %}
<div class="grp-module">
<div class="grp-row">{% pagination cl %}</div>
</div>
{% endblock %}
{% endif %}
<!-- SUBMIT ROW -->
{% if cl.formset or action_form %}
<div id="submit" class="module footer">
{% if action_form %}{% admin_actions %}{% endif %}
{% if cl.formset %}
<ul class="submit-row">
<li class="submit-button-container"><input type="submit" class="default" name="_save" value="Save"/></li>
<footer id="submit" class="grp-module grp-submit-row grp-fixed-footer">
<header style="display:none"><h1>Submit Options</h1></header>
<ul>
{% if action_form %}<li class="grp-float-left grp-changelist-actions">{% admin_actions %}</li>{% endif %}
{% if cl.formset %}<li><input type="submit" class="grp-button grp-default" name="_save" value="Save"/></li>{% endif %}
</ul>
{% endif %}
</div>
</footer>
{% endif %}
</form>
{% endblock %}

View File

@ -1,29 +1,40 @@
{% load i18n admin_static %}
{% if result_hidden_fields %}
<div class="hiddenfields"> {# DIV for HTML validation #}
{% for item in result_hidden_fields %}{{ item }}{% endfor %}
</div>
{% endif %}
{% if results %}
{% if result_hidden_fields %}
<div class="hiddenfields"> {# DIV for HTML validation #}
{% for item in result_hidden_fields %}{{ item }}{% endfor %}
</div>
{% endif %}
<div class="module changelist-results">
<table cellspacing="0">
<div class="grp-module grp-changelist-results">
<table id="result_list" cellspacing="0" class="grp-sortable">
<thead>
<tr>
{% for header in result_headers %}
<th class="{{ header.class_attrib|cut:'class='|cut:'"' }}{% if header.sortable %} sortable{% endif %}">
{% if header.sortable %}<a href="{{ header.url }}">{% endif %}
{{ header.text|capfirst }}
{% if header.sortable %}</a>{% endif %}
<th scope="col" {{ header.class_attrib }}>
{% if header.sortable %}
{% if header.sort_priority > 0 %}
<div class="grp-sortoptions">
<a class="grp-sortremove" href="{{ header.url_remove }}" title="{% trans "Remove from sorting" %}"></a>
{% if num_sorted_fields > 1 %}<span class="grp-sortpriority" title="{% blocktrans with priority_number=header.sort_priority %}Sorting priority: {{ priority_number }}{% endblocktrans %}">{{ header.sort_priority }}</span>{% endif %}
<a href="{{ header.url_toggle }}" class="grp-toggle {% if header.ascending %}grp-ascending{% else %}grp-descending{% endif %}" title="{% trans "Toggle sorting" %}"></a>
</div>
{% endif %}
{% endif %}
<div class="grp-text">{% if header.sortable %}<a href="{{ header.url_primary }}">{{ header.text|capfirst }}</a>{% else %}<span>{{ header.text|capfirst }}</span>{% endif %}</div>
</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for result in results %}
<tr class="{% cycle 'row1' 'row2' %}">{% for item in result %}{{ item }}{% endfor %}</tr>
{% if result.form.non_field_errors %}
<tr class="grp-errors"><td colspan="{{ result|length }}">{{ result.form.non_field_errors }}</td></tr>
{% endif %}
<tr class="grp-row {% cycle 'grp-row-even' 'grp-row-odd' %}">{% for item in result %}{{ item }}{% endfor %}</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}

View File

@ -5,12 +5,12 @@
<!-- BREADCRUMBS -->
{% block breadcrumbs %}
<div id="breadcrumbs">
<a href="../../">{% trans "Home" %}</a> &rsaquo;
<a href="../">{{ app_label|capfirst }}</a> &rsaquo;
<a href="./">{{ opts.verbose_name_plural|capfirst }}</a> &rsaquo;
{% trans 'Export selection as CSV' %}
</div>
<ul class="grp-horizontal-list">
<li><a href="../../">{% trans "Home" %}</a></li>
<li><a href="../">{% trans app_label|capfirst|escape %}</a></li>
<li><a href="./">{{ opts.verbose_name_plural|capfirst }}</a></li>
<li>{% trans 'Export selection as CSV' %}</li>
</ul>
{% endblock %}
<!-- CONTENT -->
@ -23,18 +23,18 @@
$("._fields").attr('checked', $(this).attr('checked'));
});
});
})(django.jQuery);
})(grp.jQuery);
</script>
<div class="container-grid csv-export-confirmation">
<div class="g-d-c csv-export-confirmation">
<form action="" method="post">{% csrf_token %}
<fieldset class="module">
<fieldset class="grp-module">
<h2>{% blocktrans %}Export following fields:{% endblocktrans %}</h2>
<div class="row">
<div class="grp-row">
<ul class="checkboxlist">
<li><label for="select_all"><input type="checkbox" name="select_all" value="" id="select_all" /> {% blocktrans %}Select all{% endblocktrans %}</label></li>
</ul>
</div>
<div class="row">
<div class="grp-row">
<ul class="checkboxlist">
{% for item in fields %}
<li>
@ -44,15 +44,15 @@
</ul>
</div>
</fieldset>
<div class="module footer">
<div class="grp-module grp-footer">
{% for obj in queryset %}
<input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk }}" />
{% endfor %}
<input type="hidden" name="action" value="csv_export_selected" />
<input type="hidden" name="post" value="yes" />
<ul class="submit-row" {% if is_popup %}style="overflow: auto;"{% endif %}>
<li class="left cancel-button-container"><a href="../" class="cancel-link">{% trans "Back" %}</a></li>
<li class="submit-button-container"><input type="submit" value="{% trans "Export" %}" class="default" /></li>
<ul class="grp-horizontal-list-right grp-submit-row">
<li class="grp-float-left grp-submit-button-container"><a href="../" class="grp-cancel-link">{% trans "Back" %}</a></li>
<li class="grp-submit-button-container"><input type="submit" value="{% trans "Export" %}" class="grp-default" /></li>
</ul>
</div>
</form>

View File

@ -1,13 +1,15 @@
{% load i18n %}
{% if show and choices %}
<div id="date-hierarchy" class="module date-hierarchy">
<div class="row">
<ul>
{% if back %}<li><a href="{{ back.link }}" class="date-hierarchy-back">{{ back.title }}</a></li>{% endif %}
{% for choice in choices %}
<li>{% if choice.link %}<a href="{{ choice.link }}">{{ choice.title }}</a>{% else %}<span>{{ choice.title }}</span>{% endif %}</li>
{% endfor %}
</ul><br clear="all" />
</div>
</div>
{% if show and choices|length %}
<div class="grp-row">
<nav id="date-hierarchy" class="grp-date-hierarchy" style="position: relative; z-index: 1 !important">
<header style="display:none"><h1>Date Hierarchy</h1></header>
<ul>
{% if back %}<li><a href="{{ back.link }}" class="grp-date-hierarchy-back">{{ back.title }}</a></li>{% endif %}
{% for choice in choices %}
<li>{% if choice.link %}<a href="{{ choice.link }}">{{ choice.title }}</a>{% else %}<span>{{ choice.title }}</span>{% endif %}</li>
{% endfor %}
</ul>
</nav>
</div>
{% endif %}

View File

@ -1,46 +1,58 @@
{% extends "admin/base_site.html" %}
<!-- LOADING -->
{% load i18n %}
{% load url from future %}
{% load i18n admin_urls %}
<!-- COLTYPE/BODYCLASS-- >
{% block bodyclass %}grp-delete-confirmation{% endblock %}
{% block content-class %}{% endblock %}
<!-- BREADCRUMBS -->
{% block breadcrumbs %}
<div id="breadcrumbs">
<a href="../../../../">{% trans "Home" %}</a> &rsaquo;
<a href="../../../">{{ app_label|capfirst }}</a> &rsaquo;
<a href="../../">{{ opts.verbose_name_plural|capfirst }}</a> &rsaquo;
<a href="../">{{ object|truncatewords:"18" }}</a> &rsaquo;
{% trans 'Delete' %}
</div>
<ul class="grp-horizontal-list">
<li><a href="../../../">{% trans "Home" %}</a></li>
<li><a href="../../">{% trans app_label|capfirst|escape %}</a></li>
<li><a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst|escape }}</a></li>
<li><a href="{% url opts|admin_urlname:'changelist' %}{{ object.pk }}">{{ object|truncatewords:"18" }}</a></lI>
<li>{% trans 'Delete' %}</li>
</ul>
{% endblock %}
<!-- CONTENT -->
{% block content %}
<div class="container-grid delete-confirmation">
{% if perms_lacking %}
<div class="module">
<h2>{% blocktrans with object as escaped_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 %}</h2>
<div class="row">
<ul class="rte">
<div class="g-d-c">
{% if perms_lacking or protected %}
<div class="grp-group">
{% if perms_lacking %}
<h2>{% blocktrans with object as escaped_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 %}</h2>
<ul class="grp-nested-list">
{% for obj in perms_lacking %}
<li>{{ obj }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% if protected %}
<h2>{% blocktrans with object as escaped_object %}Deleting the {{ object_name }} '{{ escaped_object }}' would require deleting the following protected related objects:{% endblocktrans %}</h2>
<ul class="grp-nested-list">
{% for obj in protected %}
<li>{{ obj }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
{% else %}
<div class="module">
<div class="grp-group">
<h2>{% blocktrans with object as escaped_object %}Are you sure you want to delete the {{ object_name }} "{{ escaped_object }}"? All of the following related items will be deleted:{% endblocktrans %}</h2>
<div class="row">
<ul class="rte">{{ deleted_objects|unordered_list }}</ul>
</div>
<ul class="grp-nested-list">{{ deleted_objects|unordered_list }}</ul>
</div>
<form action="" method="post">{% csrf_token %}
<div class="module footer">
<ul class="submit-row" {% if is_popup %}style="overflow: auto;"{% endif %}>
<li class="left cancel-button-container"><a href="../" class="cancel-link">{% trans "Cancel" %}</a></li>
<li class="submit-button-container"><input type="submit" value="{% trans "Yes, I'm sure" %}" class="default" /></li>
</ul><input type="hidden" name="post" value="yes" />
<div class="grp-module grp-submit-row grp-fixed-footer">
<ul>
<li class="grp-float-left"><a href="../" class="grp-button grp-cancel-link">{% trans "Cancel" %}</a></li>
<li><input type="submit" value="{% trans "Yes, I'm sure" %}" class="grp-button grp-default" /></li>
</ul>
<input type="hidden" name="post" value="yes" />
</div>
</form>
{% endif %}

View File

@ -1,52 +1,64 @@
{% extends "admin/base_site.html" %}
<!-- LOADING -->
{% load i18n %}
{% load url from future %}
{% load i18n l10n admin_urls %}
<!-- COLTYPE/BODYCLASS-- >
{% block bodyclass %}grp-delete-confirmation{% endblock %}
{% block content-class %}{% endblock %}
<!-- BREADCRUMBS -->
{% block breadcrumbs %}
<div id="breadcrumbs">
<a href="../../">{% trans "Home" %}</a> &rsaquo;
<a href="../">{{ app_label|capfirst }}</a> &rsaquo;
<a href="./">{{ opts.verbose_name_plural|capfirst }}</a> &rsaquo;
{% trans 'Delete multiple objects' %}
</div>
<ul class="grp-horizontal-list">
<li><a href="../../">{% trans "Home" %}</a></li>
<li><a href="../">{% trans app_label|capfirst|escape %}</a></li>
<li><a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst|escape }}</a></li>
<li>{% trans 'Delete multiple objects' %}</li>
</ul>
{% endblock %}
<!-- CONTENT -->
{% block content %}
<div class="container-grid delete-confirmation">
{% if perms_lacking %}
<div class="module">
<h2>{% blocktrans %}Deleting the {{ objects_name }} would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}</h2>
<div class="row">
<ul class="rte">
<div class="g-d-c">
{% if perms_lacking or protected %}
<div class="grp-group">
{% if perms_lacking %}
<h2>{% 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 %}</h2>
<ul class="grp-nested-list">
{% for obj in perms_lacking %}
<li>{{ obj }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% if protected %}
<h2>{% blocktrans %}Deleting the selected {{ objects_name }} would require deleting the following protected related objects:{% endblocktrans %}</h2>
<ul class="grp-nested-list">
{% for obj in protected %}
<li>{{ obj }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
{% else %}
<div class="module">
<h2>{% blocktrans %}Are you sure you want to delete the selected {{ objects_name }} objects? All of the following objects and their related items will be deleted:{% endblocktrans %}</h2>
<div class="grp-group">
<h2>{% 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 %}</h2>
{% for deleteable_object in deletable_objects %}
<div class="row">
<ul class="rte">{{ deleteable_object|unordered_list }}</ul>
</div>
<ul class="grp-nested-list">{{ deleteable_object|unordered_list }}</ul>
{% endfor %}
</div>
<form action="" method="post">{% csrf_token %}
<div class="module footer">
<div id="submit" class="grp-module grp-submit-row grp-fixed-footer">
{% for obj in queryset %}
<input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk }}" />
<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" />
<ul class="submit-row" {% if is_popup %}style="overflow: auto;"{% endif %}>
<li class="left cancel-button-container"><a href="." class="cancel-link">{% trans "Cancel" %}</a></li>
<li class="submit-button-container"><input type="submit" value="{% trans "Yes, I'm sure" %}" class="default" /></li>
</ul><input type="hidden" name="post" value="yes" />
<ul>
<li class="grp-float-left"><a href="." class="grp-button grp-cancel-link">{% trans "Cancel" %}</a></li>
<li><input type="submit" value="{% trans "Yes, I'm sure" %}" class="grp-button grp-default" /></li>
</ul>
<input type="hidden" name="post" value="yes" />
</div>
</form>
{% endif %}

View File

@ -1,7 +1,9 @@
{% load i18n %}
<div class="filter">
<label>{% blocktrans with title as filter_title %}{{ filter_title }}{% endblocktrans %}</label>
<select class="filter_choice">
{% for choice in choices %}<option value="{{ choice.query_string|iriencode }}"{% if choice.selected %} selected='selected'{% endif %}>{{ choice.display|safe }}</option>{% endfor %}
</select>
<div class="grp-module">
<div class="grp-row">
<label>{% blocktrans with title|capfirst as filter_title %}{{ filter_title }}{% endblocktrans %}</label>
<select class="grp-filter-choice">
{% for choice in choices %}<option value="{{ choice.query_string|iriencode }}"{% if choice.selected %} selected='selected'{% endif %}>{{ choice.display|safe }}</option>{% endfor %}
</select>
</div>
</div>

View File

@ -1,7 +1,7 @@
{% extends "admin/base_site.html" %}
<!-- LOADING -->
{% load i18n adminmedia grp_tags log %}
{% load i18n grp_tags log %}
<!-- JAVASCRIPTS -->
{% block javascripts %}
@ -13,49 +13,77 @@
{% block content-class %}content-grid{% endblock %}
<!-- BREADCRUMBS -->
{% block breadcrumbs %}<div id="breadcrumbs">{% trans "Home" %}</div>{% endblock %}
{% block content_title %}{% if title %}<h1>{{ title }}</h1>{% endif %}{% endblock %}
{% block breadcrumbs %}
<ul class="grp-horizontal-list">
<li>{% trans "Home" %}</li>
</ul>
{% endblock %}
{% block content_title %}
{% if title %}
<header><h1>{{ title }}</h1></header>
{% endif %}
{% endblock %}
<!-- CONTENT -->
{% block content %}
<div class="container-grid">
<div class="column span-12">
{% if app_list %}
<div class="g-d-c">
<div class="g-d-12 g-d-f">
{% for app in app_list %}
<div class="module" id="app_{{ app.name|lower }}">
<h2><a href="{{ app.app_url }}" class="section">{% trans app.name %}</a></h2>
<div class="grp-module" id="app_{{ app.name|lower }}">
<h2><a href="{{ app.app_url }}" class="grp-section">{% trans app.name %}</a></h2>
{% for model in app.models %}
<div class="row">
{% if model.perms.change %}<a href="{{ model.admin_url }}">{{ model.name }}</a>{% else %}<span>{{ model.name }}</span>{% endif %}
<ul class="actions">
<li class="add-link">{% if model.perms.add %}<a href="{{ model.admin_url }}add/">{% trans 'Add' %}</a>{% else %}&nbsp;{% endif %}</li>
<li class="change-link"> {% if model.perms.change %}<a href="{{ model.admin_url }}">{% trans 'Change' %}</a>{% else %}&nbsp;{% endif %}</li>
</ul>
</div>
{% endfor %}
</div>
{% endfor %}
{% else %}
<p>{% trans "You don´t have permission to edit anything." %}</p>
{% endif %}
</div>
<div class="column span-6 last">
<div class="module actions" id="recent-actions-module">
<h2>{% trans 'Recent Actions' %}</h2>
<div class="module">
<h3>{% trans 'My Actions' %}</h3>
{% get_admin_log 10 as admin_log for_user user %}
{% if not admin_log %}
<p>{% trans 'None available' %}</p>
{% else %}
<ul>
{% for entry in admin_log %}
<li class="{% if entry.is_addition %}add-link{% endif %}{% if entry.is_change %}change-link{% endif %}{% if entry.is_deletion %}delete-link{% endif %}">{% if not entry.is_deletion %}<a href="{{ entry.get_admin_url }}">{% endif %}{{ entry.object_repr }}{% if not entry.is_deletion %}</a>{% endif %}<br /><span class="mini quiet">{% filter capfirst %}{% trans entry.content_type.name %}{% endfilter %}</span></li>
{% endfor %}
</ul>
{% endif %}
<div class="grp-row">
{% if model.admin_url %}
<a href="{{ model.admin_url }}"><strong>{{ model.name }}</strong></a>
{% else %}
<strong>{{ model.name }}</strong>
{% endif %}
{% if model.add_url or model.admin_url %}
<ul class="grp-actions">
{% if model.add_url %}
<li class="grp-add-link">
<a href="{{ model.add_url }}">{% trans "Add" %}</a>
</li>
{% endif %}
{% if model.admin_url %}
<li class="grp-change-link">
<a href="{{ model.admin_url }}">{% trans "Change" %}</a>
</li>
{% endif %}
</ul>
{% endif %}
</div>
{% endfor %}
</div>
{% empty %}
<p>{% trans "You don´t have permission to edit anything." %}</p>
{% endfor %}
</div>
<div class="g-d-6 g-d-l">
<div class="grp-module" id="grp-recent-actions-module">
<h2>{% trans 'Recent Actions' %}</h2>
<div class="grp-module">
<h3>{% trans 'My Actions' %}</h3>
{% get_admin_log 10 as admin_log for_user user %}
{% if not admin_log %}
<div class="grp-row"><p>{% trans 'None available' %}</p></div>
{% else %}
<ul class="grp-listing-small">
{% for entry in admin_log %}
<li class="grp-row{% if entry.is_addition %} grp-add-link{% endif %}{% if entry.is_change %} grp-change-link{% endif %}{% if entry.is_deletion %} grp-delete-link{% endif %}">
{% if entry.is_deletion %}
<span>{{ entry.object_repr }}</span>
{% else %}
<a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
{% endif %}
<span class="grp-font-color-quiet">{% filter capfirst %}{% trans entry.content_type.name %}{% endfilter %}</span>
</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@ -1,10 +1,16 @@
{% extends "admin/base_site.html" %}
<!-- LOADING -->
{% load url from future %}
{% load i18n %}
<!-- BREADCRUMBS -->
{% block breadcrumbs %}<div id="breadcrumbs"><a href="../../">{% trans 'Home' %}</a> &rsaquo; {{ title }}</div>{% endblock %}
{% block breadcrumbs %}
<ul class="grp-horizontal-list">
<li><a href="{% url 'admin:index' %}">{% trans "Home" %}</a></li>
<li>{{ title }}</li>
</ul>
{% endblock %}
<!-- CONTENT -->
{% block content %}

View File

@ -1,19 +1,21 @@
{% extends "admin/base_site.html" %}
<!-- LOADING -->
{% load i18n %} {# grp_csrf #}
{% load url from future %}
{% load i18n %}
<!-- BODYCLASS -->
{% block bodyclass %}login{% endblock %}
{% block content-class %}content-flexible{% endblock %}
{% block bodyclass %}grp-login{% endblock %}
{% block content-class %}{% endblock %}
{% block content_title %}{% endblock %}
<!-- EXTRAHEAD-->
{% block extrahead %}
{{ block.super }}
<script type="text/javascript">
(function($) {
$(window).load(function(){ $('#id_username').focus(); });
})(django.jQuery);
})(grp.jQuery);
</script>
{% endblock %}
@ -22,27 +24,45 @@
<!-- CONTENT -->
{% block content %}
<div class="container-flexible login">
<div class="column span-10 centered">
{% if error_message %}<p class="errornote login-errors">{{ error_message }}</p>{% endif %}
<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
<fieldset class="module">
<div class="row">
<div class="column span-4"><label for="id_username" class="required">{% trans 'Username:' %}</label></div>
<div class="column span-6 last"><input type="text" name="username" id="id_username" /></div>
<div class="g-d-c g-d-12 g-centered">
<div class="grp-login">
{% if form.errors and not form.non_field_errors and not form.this_is_the_login_form.errors %}
<p class="errornote">
{% blocktrans count form.errors.items|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
</p>
{% endif %}
{% if form.non_field_errors or form.this_is_the_login_form.errors %}
{% for error in form.non_field_errors|add:form.this_is_the_login_form.errors %}
<p class="errornote">{{ error }}</p>
{% endfor %}
{% endif %}
{% if error_message %}<p class="errornote grp-login-errors">{{ error_message }}</p>{% endif %}
<form action="{{ app_path }}" method="post" id="grp-login-form">{% csrf_token %}
<fieldset class="grp-module">
<div class="grp-row">
<div class="l-2c-fluid l-d-4">
<div class="c-1"><label for="id_username" class="required">{% trans 'Username:' %}</label></div>
<div class="c-2">
<input type="text" name="username" id="id_username" />
{% if not form.this_is_the_login_form.errors %}{{ form.username.errors }}{% endif %}
</div>
</div>
</div>
<div class="row">
<div class="column span-4"><label for="id_password" class="required">{% trans 'Password:' %}</label></div>
<div class="column span-6 last">
<div class="grp-row">
<div class="l-2c-fluid l-d-4">
<div class="c-1"><label for="id_password" class="required">{% trans 'Password:' %}</label></div>
<div class="c-2">
<input type="password" name="password" id="id_password" />
<input type="hidden" name="this_is_the_login_form" value="1" />
<input type="hidden" name="next" value="{{ next }}" />
{% if not form.this_is_the_login_form.errors %}{{ form.password.errors }}{% endif %}
</div>
</div>
</div>
</fieldset>
<div class="module submit-row">
<ul class="submit-row">
<li class="submit-button-container"><input type="submit" class="default" value="{% trans 'Log in' %}" /></li>
<div class="grp-module grp-submit-row">
<ul>
<li><input type="submit" class="grp-button" value="{% trans 'Log in' %}" /></li>
</ul>
</div>
</form>

View File

@ -1,47 +1,46 @@
{% extends "admin/base_site.html" %}
<!-- LOADING -->
{% load i18n %}
{% load url from future %}
{% load i18n admin_urls %}
<!-- BREADCRUMBS -->
{% block breadcrumbs %}
<div id="breadcrumbs">
<a href="../../../../">{% trans 'Home' %}</a> &rsaquo;
<a href="../../../">{{ app_label|capfirst }}</a> &rsaquo;
<a href="../../">{{ module_name }}</a> &rsaquo;
<a href="../">{{ object|truncatewords:"18" }}</a> &rsaquo;
{% trans 'History' %}
</div>
<ul class="grp-horizontal-list">
<li><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></li>
<li><a href="{% url 'admin:app_list' app_label=app_label %}">{{ app_label|capfirst|escape }}</a></li>
<li><a href="{% url opts|admin_urlname:'changelist' %}">{{ module_name }}</a></li>
<li><a href="{% url opts|admin_urlname:'changelist' %}{{ object.pk }}">{{ object|truncatewords:"18" }}</a></li>
<li>{% trans 'History' %}</li>
</ul>
{% endblock %}
<!-- CONTENT -->
{% block content %}
<div class="container-grid object-history">
<div class="module">
{% if action_list %}
<table id="change-history">
<thead>
<div class="g-d-c grp-object-history">
{% if action_list %}
<table id="grp-change-history">
<thead>
<tr>
<th scope="col">{% trans 'Date/time' %}</th>
<th scope="col">{% trans 'User' %}</th>
<th scope="col">{% trans 'Action' %}</th>
</tr>
</thead>
<tbody>
{% for action in action_list %}
<tr>
<th scope="col">{% trans 'Date/time' %}</th>
<th scope="col">{% trans 'User' %}</th>
<th scope="col">{% trans 'Action' %}</th>
<th scope="grp-row">{{ action.action_time|date:_("DATETIME_FORMAT") }}</th>
<td>{{ action.user.username }}{% if action.user.get_full_name %} ({{ action.user.get_full_name }}){% endif %}</td>
<td>
{{ action.change_message }}
</td>
</tr>
</thead>
<tbody>
{% for action in action_list %}
<tr>
<th scope="row">{{ action.action_time|date:_("DATETIME_FORMAT") }}</th>
<td>{{ action.user.username }}{% if action.user.get_full_name %} ({{ action.user.get_full_name }}){% endif %}</td>
<td>
{{ action.change_message }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>{% trans "This object doesn't have a change history. It probably wasn't added via this admin site." %}</p>
{% endif %}
</div>
{% endfor %}
</tbody>
</table>
{% else %}
<p>{% trans "This object doesn't have a change history. It probably wasn't added via this admin site." %}</p>
{% endif %}
</div>
{% endblock %}

View File

@ -1,30 +1,30 @@
{% load admin_list i18n %}
{% spaceless %}
<div class="module pagination">
<ul class="pagination">
{% if cl.result_count != cl.full_result_count %}
<li class="results"><span>
{% blocktrans count cl.result_count as counter %}1 result{% plural %}{{ counter }} results{% endblocktrans %}
</span></li>
<nav class="grp-pagination">
<header style="display:none"><h1>Pagination</h1></header>
<ul>
{% if cl.result_count != cl.full_result_count %}
<li class="grp-results"><span>
{% blocktrans count cl.result_count as counter %}{{ counter }} result{% plural %}{{ counter }} results{% endblocktrans %}
</span></li>
{% endif %}
<li class="grp-results">
{% if cl.result_count != cl.full_result_count or cl.show_all %}
<a href="?{% if cl.is_popup %}pop=1{% endif %}" class="total">{% blocktrans with cl.full_result_count as full_result_count %}{{ full_result_count }} total{% endblocktrans %}</a>
{% else %}
<span>{% blocktrans with cl.full_result_count as full_result_count %}{{ full_result_count }} total{% endblocktrans %}</span>
{% endif %}
<li class="results">
{% if cl.result_count != cl.full_result_count or cl.show_all %}
<a href="?{% if cl.is_popup %}pop=1{% endif %}" class="total">{% blocktrans with cl.full_result_count as full_result_count %}{{ full_result_count }} total{% endblocktrans %}</a>
</li>
{% if pagination_required %}
{% for i in page_range %}
{% ifequal i "." %}
<li class="grp-separator"><span>...</span></li>
{% else %}
<span>{% blocktrans with cl.full_result_count as full_result_count %}{{ full_result_count }} total{% endblocktrans %}</span>
{% endif %}
</li>
{% if pagination_required %}
{% for i in page_range %}
{% ifequal i "." %}
<li class="separator"><span>...</span></li>
{% else %}
<li>{% paginator_number cl i %}</li>
{% endifequal %}
{% endfor %}
{% endif %}
{% if show_all_url %}<li class="showall"><a href="{{ show_all_url }}">{% trans 'Show all' %}</a></li>{% endif %}
</ul><br clear="all" />
</div>
<li>{% paginator_number cl i %}</li>
{% endifequal %}
{% endfor %}
{% endif %}
{% if show_all_url %}<li class="grp-showall"><a href="{{ show_all_url }}">{% trans 'Show all' %}</a></li>{% endif %}
</ul>
</nav>
{% endspaceless %}

View File

@ -1,17 +1,28 @@
{% load l10n %}
<script type="text/javascript">
(function( $ ) {
{% for field in prepopulated_fields %}
$("#{{ field.field.auto_id }}").bind('change.grappelli', function() {
$(this).data('changed', true);
});
{% for dependency in field.dependencies %}
$("#{{ dependency.auto_id }}").bind('keyup.grappelli', function() {
var e = $("#{{ field.field.auto_id }}");
if (!e.data('changed')) {
e.val(URLify({% for innerdep in field.dependencies %}$("#{{ innerdep.auto_id }}").val(){% if not forloop.last %} + ' ' + {% endif %}{% endfor %}, {{ field.field.field.max_length|default_if_none:"50" }}));
}
});
{% endfor %}
{% endfor %}
})(django.jQuery);
(function($) {
var field;
{% for field in prepopulated_fields %}
field = {
id: '#{{ field.field.auto_id }}',
dependency_ids: [],
dependency_list: [],
maxLength: {{ field.field.field.max_length|default_if_none:"50"|unlocalize }}
};
{% for dependency in field.dependencies %}
field['dependency_ids'].push('#{{ dependency.auto_id }}');
field['dependency_list'].push('{{ dependency.name }}');
{% endfor %}
{% comment %}
Mark prepopulated fields in the main form and stacked inlines (.empty-form .form-row) and in tabular inlines (.empty-form.form-row)
{% endcomment %}
$('.empty-form .form-row .field-{{ field.field.name }}, .empty-form.form-row .field-{{ field.field.name }}').addClass('prepopulated_field');
$(field.id).data('dependency_list', field['dependency_list'])
.prepopulate(field['dependency_ids'], field.maxLength);
{% endfor %}
})(grp.jQuery);
</script>

View File

@ -1,20 +1,11 @@
{% load adminmedia i18n grp_tags %}
{% load i18n grp_tags %}
{% if cl.search_fields %}
{% comment %}{% get_search_fields_verbose cl.opts as search_fields_verbose %}{% endcomment %}
<!-- Search Form -->
<form id="changelist-search" action="" method="get">
<input type="text" name="{{ search_var }}" id="searchbar" value="{{ cl.query }}" />
<button type="submit" value="" class="search">&nbsp;</button>
<form id="grp-changelist-search" action="" method="get">
<input type="text" name="{{ search_var }}" id="grp-changelist-search" class="grp-search-field" value="{{ cl.query }}" />
<button type="submit" value="" class="grp-search-button"></button>
{% for pair in cl.params.items %}
{% ifnotequal pair.0 search_var %}<input type="hidden" name="{{ pair.0 }}" value="{{ pair.1 }}"/>{% endifnotequal %}
{% endfor %}
{% comment %}
{% if search_fields_verbose and not cl.query %}
<div id="searchbar_tooltip" class="tooltip search-fields" style="display: none;">
<div class="tooltip-pointer">&nbsp;</div>
<div class="tooltip-content"><strong>{% trans 'Search' %}:</strong> {{ search_fields_verbose }}</div>
</div>
{% endif %}
{% endcomment %}
</form>
{% endif %}

View File

@ -1,12 +1,21 @@
{% load i18n %}
<div class="module footer">
<ul class="submit-row">
{% if show_delete_link %}<li class="left delete-link-container"><a href="delete/" class="delete-link">Delete</a></li>{% endif %}
{% comment %}<li class="left cancel-link-container"><a href="#" class="cancel-link">Cancel</a></li>{% endcomment %}
{% if show_save %}<li class="submit-button-container"><input type="submit" value="{% trans 'Save' %}" class="default" name="_save" {{ onclick_attrib }}/></li>{% endif %}
{% if show_save_as_new %}<li class="submit-button-container"><input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew" {{ onclick_attrib }}/></li>{% endif %}
{% if show_save_and_add_another %}<li class="submit-button-container"><input type="submit" value="{% trans 'Save and add another' %}" name="_addanother" {{ onclick_attrib }} /></li>{% endif %}
{% if show_save_and_continue %}<li class="submit-button-container"><input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue" {{ onclick_attrib }}/></li>{% endif %}
{% comment %}<li><input type="reset" value="Reset" /></li>{% endcomment %}
</ul><br clear="all" />
</div>
<footer class="grp-module grp-submit-row grp-fixed-footer">
<header style="display:none"><h1>Submit Options</h1></header>
<ul>
{% if show_delete_link %}
<li class="grp-float-left"><a href="delete/" class="grp-button grp-delete-link">{% trans "Delete" %}</a></li>
{% endif %}
{% if show_save %}
<li><input type="submit" value="{% trans 'Save' %}" class="grp-button grp-default" name="_save" {{ onclick_attrib }}/></li>
{% endif %}
{% if show_save_as_new %}
<li><input type="submit" value="{% trans 'Save as new' %}" class="grp-button" name="_saveasnew" {{ onclick_attrib }}/></li>
{% endif %}
{% if show_save_and_add_another %}
<li><input type="submit" value="{% trans 'Save and add another' %}" class="grp-button" name="_addanother" {{ onclick_attrib }} /></li>
{% endif %}
{% if show_save_and_continue %}
<li><input type="submit" value="{% trans 'Save and continue editing' %}" class="grp-button" name="_continue" {{ onclick_attrib }}/></li>
{% endif %}
</ul>
</footer>

View File

@ -8,15 +8,15 @@
{% if form.error_dict %}
<p class="errornote">Your template had {{ form.error_dict.items|length }} error{{ form.error_dict.items|pluralize }}:</p>
{% endif %}
<fieldset class="module aligned">
<div class="row{% if form.site.errors %} error{% endif %} required">
<fieldset class="grp-module aligned">
<div class="grp-row{% if form.site.errors %} error{% endif %} required">
<div class="column span-4"><h4><label for="id_site" class="required">Site:</label></h4></div>
<div class="column span-flexible">
{{ form.site }}
{% if form.site.errors %}{{ form.site.html_error_list }}{% endif %}
</div>
</div>
<div class="row{% if form.template.errors %} error{% endif %} required">
<div class="grp-row{% if form.template.errors %} error{% endif %} required">
<div class="column span-4"><h4><label for="id_template" class="required">Template:</label></h4></div>
<div class="column span-flexible">
{{ form.template }}
@ -24,9 +24,9 @@
</div>
</div>
</fieldset>
<div class="submit-row">
<ul class="submit-row">
<li class="submit-button-container"><input type="submit" value="Check for errors" class="default" /></li>
<div class="grp-submit-row">
<ul class="grp-submit-row">
<li class="grp-submit-button-container"><input type="submit" value="Check for errors" class="grp-default" /></li>
</ul>
</div>
</form>