summaryrefslogtreecommitdiff
path: root/app/lib/grappelli/templates/admin/edit_inline/stacked.html
diff options
context:
space:
mode:
Diffstat (limited to 'app/lib/grappelli/templates/admin/edit_inline/stacked.html')
-rw-r--r--app/lib/grappelli/templates/admin/edit_inline/stacked.html147
1 files changed, 147 insertions, 0 deletions
diff --git a/app/lib/grappelli/templates/admin/edit_inline/stacked.html b/app/lib/grappelli/templates/admin/edit_inline/stacked.html
new file mode 100644
index 0000000..7112ba2
--- /dev/null
+++ b/app/lib/grappelli/templates/admin/edit_inline/stacked.html
@@ -0,0 +1,147 @@
+{% load i18n adminmedia %}
+
+<!-- group -->
+<div class="group stacked {% if inline_admin_formset.opts.classes %} {{ inline_admin_formset.opts.classes|join:" " }}{% endif %}"
+ id="{{ inline_admin_formset.formset.prefix }}-group">
+ <h2>{{ inline_admin_formset.opts.verbose_name_plural|title }}</h2>
+ <ul class="tools">
+ <li class="open-handler-container"><a href="javascript://" class="icon open-handler" title="{% trans 'Open All Items' %}"></a></li>
+ <li class="close-handler-container"><a href="javascript://" class="icon close-handler" title="{% trans 'Close All Items' %}"></a></li>
+ <li class="add-handler-container"><a href="javascript://" class="icon add-handler" title="{% trans 'Add Item' %}"> </a></li>
+ </ul>
+ {{ inline_admin_formset.formset.management_form }}
+ {{ inline_admin_formset.formset.non_form_errors }}
+ <!-- container -->
+ <div class="items">
+ {% for inline_admin_form in inline_admin_formset %}
+ <!-- element -->
+ <div class="module collapse closed{% if inline_admin_form.original or inline_admin_form.show_url %} has_original{% endif %}{% if forloop.last %} empty-form{% endif %}"
+ id="{{ inline_admin_formset.formset.prefix }}{% if forloop.last %}-empty{% else %}{{ forloop.counter0 }}{% endif %}">
+ <h3>{{ inline_admin_formset.opts.verbose_name|title }} #{{ forloop.counter }}&nbsp;&nbsp;{% if inline_admin_form.original %}{{ inline_admin_form.original }}{% endif %}</h3>
+ <ul class="tools">
+ {% 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 %}
+ {% if inline_admin_formset.opts.sortable_field_name %}
+ <li class="drag-handler-container"><a href="javascript://" class="icon drag-handler" title="{% trans 'Move Item' %}"></a></li>
+ {% endif %}
+ {% if inline_admin_formset.formset.can_delete %}
+ {% if inline_admin_form.original %}
+ <li class="delete-handler-container">{{ inline_admin_form.deletion_field.field }}<a href="javascript://" class="icon delete-handler" title="{% trans 'Delete Item' %}"></a></li>
+ {% else %}
+ <li class="remove-handler-container">{{ inline_admin_form.deletion_field.field }}<a href="javascript://" class="icon remove-handler" title="{% trans 'Delete Item' %}"></a></li>
+ {% endif %}
+ {% endif %}
+ </ul>
+ {% if inline_admin_form.form.non_field_errors %}
+ <ul class="errorlist">
+ <li>{{ inline_admin_form.form.non_field_errors }}</li>
+ </ul>
+ {% endif %}
+ {% for fieldset in inline_admin_form %}
+ {% include "admin/includes/fieldset_inline.html" %}
+ {% endfor %}
+ {{ inline_admin_form.pk_field.field }}
+ {{ inline_admin_form.fk_field.field }}
+ </div>
+ {% endfor %}
+ {{ inline_admin_formset.extra_forms }}
+ </div>
+ <div class="module add-item">
+ <a href="javascript://" class="add-handler">{% blocktrans with inline_admin_formset.opts.verbose_name|title as verbose_name %}Add another {{ verbose_name }}{% endblocktrans %}</a>
+ <ul class="tools">
+ <li class="add-handler-container"><a href="javascript://" class="icon add-handler" title="{% trans 'Add Item' %}"> </a></li>
+ </ul><br clear="all" />
+ </div>
+</div>
+
+<script type="text/javascript">
+(function($) {
+ $(document).ready(function() {
+
+ // call for inline() widget
+ $("#{{ inline_admin_formset.formset.prefix }}-group").inline({
+ prefix: "{{ inline_admin_formset.formset.prefix }}",
+ deleteCssClass: "delete-handler",
+ emptyCssClass: "empty-form",
+ onRemoved: stacked_onRemoved,
+ onAdded: stacked_onAdded,
+ });
+
+{% if inline_admin_formset.opts.sortable_field_name %}
+ /**
+ * sortable inlines
+ * uses onAdded() and onRemoved() of inline() call above
+ */
+
+ $("#{{ inline_admin_formset.formset.prefix }}-group").find("div.row.{{ inline_admin_formset.opts.sortable_field_name }}").hide();
+
+ {% if errors %}
+ // sort inline
+ var container = $("#{{ inline_admin_formset.formset.prefix }}-group > div.items"),
+ dynamic_forms = container.find("div.dynamic-form"),
+ updated = false,
+ curr_form,
+ real_pos;
+
+ // loop thru all inline forms
+ for (var i = 0; i < dynamic_forms.length; i++) {
+ curr_form = $(dynamic_forms[i]);
+ // the real position according to the sort_field(_name)
+ real_pos = curr_form.find("div.{{ inline_admin_formset.opts.sortable_field_name }}").find("input").val();
+ // if there is none it's an empty inline (=> we are at the end)
+ // TODO: klemens: maybe buggy. try continue?
+ if (!real_pos) continue;
+
+ real_pos = parseInt(real_pos, 10);
+
+ // check if real position is not equal to the CURRENT position in the dom
+ if (real_pos != container.find("div.dynamic-form").index(curr_form)) {
+ // move to correct postition
+ curr_form.insertBefore(container.find("div.dynamic-form")[real_pos]);
+ // to update the inline lables
+ updated = true;
+ }
+ }
+ if (updated) {
+ stacked_updateInlineLabel($(dynamic_forms[0]));
+ }
+
+ {% endif %}
+
+ // activate sortable feature for this inline
+ $("#{{ inline_admin_formset.formset.prefix }}-group > div.items").sortable({
+ // drag&drop the inlines with the drag-handler only
+ handle: "a.drag-handler",
+ // very scary magic after drap&drop operations
+ // pretty similar to inline() widget's removeHandler()
+ // but removeHandler() can remove the current form and just reorder the rest
+ // if we would do the same after drag&drop we would loose some form values
+ // because while looping inputs would have the same names and maybe overwrite each other.
+ placeholder: 'ui-sortable-placeholder module',
+ forcePlaceholderSize: true,
+ items: "div.dynamic-form",
+ axis: "y",
+ containment: 'parent',
+ tolerance: 'pointer',
+ update: function(evt, ui) {
+ stacked_updateInlineLabel(ui.item);
+ }
+ });
+
+ // sets the new positions onSubmit (0 - n)
+ $("#{{ opts.module_name }}_form").bind("submit", function() {
+ var forms = $("#{{ inline_admin_formset.formset.prefix }}-group").find("div.dynamic-form"),
+ form,
+ idx = 0;
+ for (var i = 0; i < forms.length; i++) {
+ form = $(forms[i]);
+ if (is_form_filled(form)) {
+ form.find("div.{{ inline_admin_formset.opts.sortable_field_name }}").find("input").val(idx);
+ idx++;
+ }
+ }
+ });
+
+{% endif %}
+ });
+})(django.jQuery);
+</script>