Translate edit-inline template patch to Grappelli's template.
[cookbook.git] / example / data / templates / admin / edit_inline / tabular.html
1 {% load i18n adminmedia grp_tags %}
2 {% load url from future %}
3 <!-- group -->
4 <div class="group tabular{% if inline_admin_formset.opts.classes %} {{ inline_admin_formset.opts.classes|join:" " }}{% endif %}"
5     id="{{ inline_admin_formset.formset.prefix }}-group" >
6     <h2 class="collapse-handler">{{ inline_admin_formset.opts.verbose_name_plural|capfirst }}</h2>
7     <ul class="tools">
8         <li class="add-handler-container"><a href="javascript://" class="icon add-handler" title="{% trans 'Add Another' %}"> </a></li>
9     </ul>
10     {{ inline_admin_formset.formset.management_form }}
11     {{ inline_admin_formset.formset.non_form_errors }}
12     <!-- container -->
13     <div class="module table">
14         <div class="module thead">
15             <div class="tr">
16                 {% for field in inline_admin_formset.fields %}
17                     {% if not field.widget.is_hidden %}
18                         <div class="th {{ field.label|lower|slugify }}{% if field.required %} required{% endif %}">{{ field.label|capfirst }}</div>
19                     {% endif %}
20                 {% endfor %}
21                 {% if inline_admin_formset.formset.can_delete %}<div class="th">&nbsp;</div>{% endif %}
22             </div>
23         </div>
24         {% with inline_admin_formset.opts.sortable_field_name|default:"" as sortable_field_name %}
25         {% for inline_admin_form in inline_admin_formset|formsetsort:sortable_field_name %}
26             <!-- element -->
27             <div class="module tbody{% if inline_admin_form.original or inline_admin_form.show_url %} has_original{% endif %}{% if forloop.last %} empty-form{% endif %}"
28                 id="{{ inline_admin_formset.formset.prefix }}{% if not forloop.last %}{{ forloop.counter0 }}{% else %}-empty{% endif %}">
29                 {% if inline_admin_form.form.non_field_errors %}
30                     <ul class="errorlist"><li>{{ inline_admin_form.form.non_field_errors }}</li></ul>
31                 {% endif %}
32                 <h3 style="display: none;"><b>{{ inline_admin_formset.opts.verbose_name|title }} #{{ forloop.counter }}</b>&nbsp;&nbsp;{% if inline_admin_form.original %} {{ inline_admin_form.original }}{% endif %}</h3>
33                 {% spaceless %}
34                 {% for fieldset in inline_admin_form %}
35                     {% for line in fieldset %}
36                         {% for field in line %}
37                             {% if field.is_hidden %} {{ field.field }} {% endif %}
38                         {% endfor %}
39                     {% endfor %}
40                 {% endfor %}
41                 {% endspaceless %}
42                 <div class="tr">
43                     {% for fieldset in inline_admin_form %}
44                         {% for line in fieldset %}
45                             {% for field in line %}
46                                 <div class="td {{ field.field.name }} {% if field.field.errors %} error{% endif %}">
47                                     {% if field.is_readonly %}
48                                         <p>{{ field.contents }}</p>
49                                     {% else %}
50                                         {{ field.field }}
51                                         {{ field.field.errors.as_ul }}
52                                     {% endif %}
53                                     {% if field.field.help_text %}<p class="help">{{ field.field.help_text }}</p>{% endif %}
54                                 </div>
55                             {% endfor %}
56                         {% endfor %}
57                     {% endfor %}
58                     <div class="td tools">
59                         {% spaceless %}
60                         <ul class="tools">
61                             {% if inline_admin_form.model_admin.show_edit_link and inline_admin_form.original %}<li><a href="{% url adminform.model_admin.admin_site.app_name|add:':'|add:app_label|add:'_'|add:inline_admin_formset.opts.opts.module_name|add:'_changelist' %}{{ inline_admin_form.original.pk }}">Edit</a></li>{% endif %}
62                             {% if inline_admin_form.show_url %}<li class="viewsite-link-container"><a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.id }}/" class="icon viewsite-link" title="{% trans 'View on Site' %}" target="_blank"> </a></li>{% endif %}
63                             {% if inline_admin_formset.opts.sortable_field_name %}
64                                 <li class="drag-handler-container"><a href="javascript://" class="icon drag-handler" title="{% trans 'Move Item' %}"></a></li>
65                             {% endif %}
66                             {% if inline_admin_formset.formset.can_delete %}
67                                 <li class="delete-handler-container">{{ inline_admin_form.deletion_field.field }}<a href="javascript://" class="icon {% if inline_admin_form.original %}delete-handler{% else %}remove-handler{% endif %}" title="{% trans 'Remove' %}"> </a></li>
68                             {% else %}
69                                 {% if inline_admin_form.original %}
70                                     <li class="delete-handler-container">&nbsp;</li>
71                                 {% else %}
72                                     <li class="delete-handler-container"><a href="javascript://" class="icon remove-handler" title="{% trans 'Remove' %}"> </a></li>
73                                 {% endif %}
74                             {% endif %}
75                         </ul>
76                         {% endspaceless %}
77                     </div>
78                     {{ inline_admin_form.fk_field.field }}
79                     {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
80                 </div>
81             </div>
82         {% endfor %}
83         {% endwith %}
84     </div>
85     <div class="module add-item">
86         <a href="javascript://" class="add-handler">{% blocktrans with inline_admin_formset.opts.verbose_name|title as verbose_name %}Add WTK another {{ verbose_name }}{% endblocktrans %}</a>
87         <ul class="tools">
88             <li class="add-handler-container"><a href="javascript://" class="icon add-handler" title="{% trans 'Add Item' %}"> </a></li>
89         </ul><br clear="all" />
90     </div>
91 </div>
92
93 <script type="text/javascript">
94 (function($) {
95     $(document).ready(function($) {
96         
97         var prefix = "{{ inline_admin_formset.formset.prefix }}";
98         var related_lookup_fields_fk = {% get_related_lookup_fields_fk inline_admin_formset.opts %};
99         var related_lookup_fields_m2m = {% get_related_lookup_fields_m2m inline_admin_formset.opts %};
100         var related_lookup_fields_generic = {% get_related_lookup_fields_generic inline_admin_formset.opts %};
101         $.each(related_lookup_fields_fk, function() {
102             $("#{{ inline_admin_formset.formset.prefix }}-group > div.table")
103             .find("input[name^='" + prefix + "'][name$='" + this + "']")
104             .grp_related_fk({lookup_url:"{% url 'grp_related_lookup' %}"});
105         });
106         $.each(related_lookup_fields_m2m, function() {
107             $("#{{ inline_admin_formset.formset.prefix }}-group > div.table")
108             .find("input[name^='" + prefix + "'][name$='" + this + "']")
109             .grp_related_m2m({lookup_url:"{% url 'grp_m2m_lookup' %}"});
110         });
111         $.each(related_lookup_fields_generic, function() {
112             var content_type = this[0],
113                 object_id = this[1];
114             $("#{{ inline_admin_formset.formset.prefix }}-group > div.table")
115             .find("input[name^='" + prefix + "'][name$='" + this[1] + "']")
116             .each(function() {
117                 var i = $(this).attr("id").match(/-\d+-/);
118                 if (i) {
119                     var ct_id = "#id_" + prefix + i[0] + content_type,
120                         obj_id = "#id_" + prefix + i[0] + object_id;
121                     $(this).grp_related_generic({content_type:ct_id, object_id:obj_id, lookup_url:"{% url 'grp_related_lookup' %}"});
122                 }
123             });
124         });
125         
126         $("#{{ inline_admin_formset.formset.prefix }}-group").grp_inline({
127             prefix: "{{ inline_admin_formset.formset.prefix }}",
128             onBeforeAdded: function(inline) {},
129             onAfterAdded: function(form) {
130                 grappelli.reinitDateTimeFields(form);
131                 grappelli.updateSelectFilter(form);
132                 $.each(related_lookup_fields_fk, function() {
133                     form.find("input[name^='" + prefix + "'][name$='" + this + "']")
134                     .grp_related_fk({lookup_url:"{% url 'grp_related_lookup' %}"});
135                 });
136                 $.each(related_lookup_fields_m2m, function() {
137                     form.find("input[name^='" + prefix + "'][name$='" + this + "']")
138                     .grp_related_m2m({lookup_url:"{% url 'grp_m2m_lookup' %}"});
139                 });
140                 $.each(related_lookup_fields_generic, function() {
141                     var content_type = this[0],
142                         object_id = this[1];
143                     form.find("input[name^='" + prefix + "'][name$='" + this[1] + "']")
144                     .each(function() {
145                         var i = $(this).attr("id").match(/-\d+-/);
146                         if (i) {
147                             var ct_id = "#id_" + prefix + i[0] + content_type,
148                                 obj_id = "#id_" + prefix + i[0] + object_id;
149                             $(this).grp_related_generic({content_type:ct_id, object_id:obj_id, lookup_url:"{% url 'grp_related_lookup' %}"});
150                         }
151                     });
152                 });
153             },
154         });
155         
156         {% if inline_admin_formset.opts.sortable_field_name %}
157         $("#{{ inline_admin_formset.formset.prefix }}-group > div.table").sortable({
158             handle: "a.drag-handler",
159             items: "div.dynamic-form",
160             axis: "y",
161             appendTo: 'body',
162             forceHelperSize: true,
163             containment: '#{{ inline_admin_formset.formset.prefix }}-group > div.table',
164             tolerance: 'pointer',
165         });
166         $("#{{ opts.module_name }}_form").bind("submit", function(){
167             var sortable_field_name = "{{ inline_admin_formset.opts.sortable_field_name }}";
168             var i = 0;
169             $("#{{ inline_admin_formset.formset.prefix }}-group").find("div.dynamic-form").each(function(){
170                 var fields = $(this).find("div.td :input[value]");
171                 if (fields.serialize()) {
172                     $(this).find("input[name$='"+sortable_field_name+"']").val(i);
173                     i++;
174                 }
175             });
176         });
177         {% endif %}
178         
179     });
180 })(django.jQuery);
181 </script>