tabular.html 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. {% load i18n admin_static admin_modify %}
  2. <div class="inline-group" id="{{ inline_admin_formset.formset.prefix }}-group">
  3. <div class="tabular inline-related {% if forloop.last %}last-related{% endif %}">
  4. {{ inline_admin_formset.formset.management_form }}
  5. <fieldset class="module">
  6. <h2>{{ inline_admin_formset.opts.verbose_name_plural|capfirst }}</h2>
  7. {{ inline_admin_formset.formset.non_form_errors }}
  8. <table>
  9. <thead><tr>
  10. {% for field in inline_admin_formset.fields %}
  11. {% if not field.widget.is_hidden %}
  12. <th{% if forloop.first %} colspan="2"{% endif %}{% if field.required %} class="required"{% endif %}>{{ field.label|capfirst }}
  13. {% if field.help_text %}&nbsp;<img src="{% static "admin/img/icon-unknown.gif" %}" class="help help-tooltip" width="10" height="10" alt="({{ field.help_text|striptags }})" title="{{ field.help_text|striptags }}" />{% endif %}
  14. </th>
  15. {% endif %}
  16. {% endfor %}
  17. {% if inline_admin_formset.formset.can_delete %}<th>{% trans "Delete?" %}</th>{% endif %}
  18. </tr></thead>
  19. <tbody>
  20. {% for inline_admin_form in inline_admin_formset %}
  21. {% if inline_admin_form.form.non_field_errors %}
  22. <tr><td colspan="{{ inline_admin_form|cell_count }}">{{ inline_admin_form.form.non_field_errors }}</td></tr>
  23. {% endif %}
  24. <tr class="form-row {% cycle "row1" "row2" %} {% if inline_admin_form.original or inline_admin_form.show_url %}has_original{% endif %}{% if forloop.last %} empty-form{% endif %}"
  25. id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
  26. <td class="original">
  27. {% if inline_admin_form.original or inline_admin_form.show_url %}<p>
  28. {% if inline_admin_form.original %} {{ inline_admin_form.original }}{% endif %}
  29. {% if inline_admin_form.show_url %}<a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.id }}/">{% trans "View on site" %}</a>{% endif %}
  30. </p>{% endif %}
  31. {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
  32. {{ inline_admin_form.fk_field.field }}
  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. </td>
  43. {% for fieldset in inline_admin_form %}
  44. {% for line in fieldset %}
  45. {% for field in line %}
  46. <td{% if field.field.name %} class="field-{{ field.field.name }}"{% endif %}>
  47. {% if field.is_readonly %}
  48. <p>{{ field.contents }}</p>
  49. {% else %}
  50. {{ field.field.errors.as_ul }}
  51. {{ field.field }}
  52. {% endif %}
  53. </td>
  54. {% endfor %}
  55. {% endfor %}
  56. {% endfor %}
  57. {% if inline_admin_formset.formset.can_delete %}
  58. <td class="delete">{% if inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }}{% endif %}</td>
  59. {% endif %}
  60. </tr>
  61. {% endfor %}
  62. </tbody>
  63. </table>
  64. </fieldset>
  65. </div>
  66. </div>
  67. <script type="text/javascript">
  68. (function($) {
  69. $(document).ready(function($) {
  70. var rows = "#{{ inline_admin_formset.formset.prefix }}-group .tabular.inline-related tbody tr";
  71. var alternatingRows = function(row) {
  72. $(rows).not(".add-row").removeClass("row1 row2")
  73. .filter(":even").addClass("row1").end()
  74. .filter(rows + ":odd").addClass("row2");
  75. }
  76. var reinitDateTimeShortCuts = function() {
  77. // Reinitialize the calendar and clock widgets by force
  78. if (typeof DateTimeShortcuts != "undefined") {
  79. $(".datetimeshortcuts").remove();
  80. DateTimeShortcuts.init();
  81. }
  82. }
  83. var updateSelectFilter = function() {
  84. // If any SelectFilter widgets are a part of the new form,
  85. // instantiate a new SelectFilter instance for it.
  86. if (typeof SelectFilter != "undefined"){
  87. $(".selectfilter").each(function(index, value){
  88. var namearr = value.name.split('-');
  89. SelectFilter.init(value.id, namearr[namearr.length-1], false, "{% static "admin/" %}");
  90. });
  91. $(".selectfilterstacked").each(function(index, value){
  92. var namearr = value.name.split('-');
  93. SelectFilter.init(value.id, namearr[namearr.length-1], true, "{% static "admin/" %}");
  94. });
  95. }
  96. }
  97. var initPrepopulatedFields = function(row) {
  98. row.find('.prepopulated_field').each(function() {
  99. var field = $(this);
  100. var input = field.find('input, select, textarea');
  101. var dependency_list = input.data('dependency_list') || [];
  102. var dependencies = [];
  103. $.each(dependency_list, function(i, field_name) {
  104. dependencies.push('#' + row.find('.field-' + field_name).find('input, select, textarea').attr('id'));
  105. });
  106. if (dependencies.length) {
  107. input.prepopulate(dependencies, input.attr('maxlength'));
  108. }
  109. });
  110. }
  111. $(rows).formset({
  112. prefix: "{{ inline_admin_formset.formset.prefix }}",
  113. addText: "{% blocktrans with verbose_name=inline_admin_formset.opts.verbose_name|title %}Add another {{ verbose_name }}{% endblocktrans %}",
  114. formCssClass: "dynamic-{{ inline_admin_formset.formset.prefix }}",
  115. deleteCssClass: "inline-deletelink",
  116. deleteText: "{% trans "Remove" %}",
  117. emptyCssClass: "empty-form",
  118. removed: alternatingRows,
  119. added: (function(row) {
  120. initPrepopulatedFields(row);
  121. reinitDateTimeShortCuts();
  122. updateSelectFilter();
  123. alternatingRows(row);
  124. })
  125. });
  126. });
  127. })(django.jQuery);
  128. </script>