|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import json
-
- from django import template
- from django.template.context import Context
-
- from .base import InclusionAdminNode
-
- register = template.Library()
-
-
- def prepopulated_fields_js(context):
- """
- Create a list of prepopulated_fields that should render Javascript for
- the prepopulated fields for both the admin form and inlines.
- """
- prepopulated_fields = []
- if 'adminform' in context:
- prepopulated_fields.extend(context['adminform'].prepopulated_fields)
- if 'inline_admin_formsets' in context:
- for inline_admin_formset in context['inline_admin_formsets']:
- for inline_admin_form in inline_admin_formset:
- if inline_admin_form.original is None:
- prepopulated_fields.extend(inline_admin_form.prepopulated_fields)
-
- prepopulated_fields_json = []
- for field in prepopulated_fields:
- prepopulated_fields_json.append({
- "id": "#%s" % field["field"].auto_id,
- "name": field["field"].name,
- "dependency_ids": ["#%s" % dependency.auto_id for dependency in field["dependencies"]],
- "dependency_list": [dependency.name for dependency in field["dependencies"]],
- "maxLength": field["field"].field.max_length or 50,
- "allowUnicode": getattr(field["field"].field, "allow_unicode", False)
- })
-
- context.update({
- 'prepopulated_fields': prepopulated_fields,
- 'prepopulated_fields_json': json.dumps(prepopulated_fields_json),
- })
- return context
-
-
- @register.tag(name='prepopulated_fields_js')
- def prepopulated_fields_js_tag(parser, token):
- return InclusionAdminNode(parser, token, func=prepopulated_fields_js, template_name="prepopulated_fields_js.html")
-
-
- def submit_row(context):
- """
- Display the row of buttons for delete and save.
- """
- add = context['add']
- change = context['change']
- is_popup = context['is_popup']
- save_as = context['save_as']
- show_save = context.get('show_save', True)
- show_save_and_continue = context.get('show_save_and_continue', True)
- has_add_permission = context['has_add_permission']
- has_change_permission = context['has_change_permission']
- has_view_permission = context['has_view_permission']
- has_editable_inline_admin_formsets = context['has_editable_inline_admin_formsets']
- can_save = (has_change_permission and change) or (has_add_permission and add) or has_editable_inline_admin_formsets
- can_save_and_continue = not is_popup and can_save and has_view_permission and show_save_and_continue
- can_change = has_change_permission or has_editable_inline_admin_formsets
- ctx = Context(context)
- ctx.update({
- 'can_change': can_change,
- 'show_delete_link': (
- not is_popup and context['has_delete_permission'] and
- change and context.get('show_delete', True)
- ),
- 'show_save_as_new': not is_popup and has_change_permission and change and save_as,
- 'show_save_and_add_another': (
- has_add_permission and not is_popup and
- (not save_as or add) and can_save
- ),
- 'show_save_and_continue': can_save_and_continue,
- 'show_save': show_save and can_save,
- 'show_close': not(show_save and can_save)
- })
- return ctx
-
-
- @register.tag(name='submit_row')
- def submit_row_tag(parser, token):
- return InclusionAdminNode(parser, token, func=submit_row, template_name='submit_line.html')
-
-
- @register.tag(name='change_form_object_tools')
- def change_form_object_tools_tag(parser, token):
- """Display the row of change form object tools."""
- return InclusionAdminNode(
- parser, token,
- func=lambda context: context,
- template_name='change_form_object_tools.html',
- )
-
-
- @register.filter
- def cell_count(inline_admin_form):
- """Return the number of cells used in a tabular inline."""
- count = 1 # Hidden cell with hidden 'id' field
- for fieldset in inline_admin_form:
- # Loop through all the fields (one per cell)
- for line in fieldset:
- for field in line:
- count += 1
- if inline_admin_form.formset.can_delete:
- # Delete checkbox
- count += 1
- return count
|