<%page args="element, eaiAttributes, form_defaults" /> <%! import random %> <% subelement = element.get('element') if not subelement: raise Exception("repeatable element didn't define an element to be repeated") prefix = element.get('fieldprefix') if not prefix: raise Exception("repeatable element didn't define a field prefix") ignoreprefix = element.get('ignoreprefix') widget = subelement['type'] if 'type' in subelement else 'textfield' # find all existing elements to be repeated form_default_keys = form_defaults.keys() form_default_keys.sort() id = random.randint(0,1000000000) settings = jsonify({'prefix': prefix, 'mincount': element.get('mincount', 0), 'maxcount': element.get('maxcount', -1)}) %>
## Store key information about the repeatable on the container tag so the javascript routines can easily locate it % if 'label' in element: % endif ## Find all elements that should be included in the list % for elname in form_default_keys: % if elname.startswith(prefix): <% if ignoreprefix and elname.startswith(ignoreprefix): continue # Pass-thru some parameters to the sub-element subelement['elementName'] = elname for field in ('mincount', 'maxcount', 'deleteable', 'expandable', 'fieldprefix'): if field in element: subelement[field] = element[field] %> <%include file="/admin/widgets/${widget}.html" args="element=subelement, eaiAttributes=form_defaults['eai:attributes'], widgetstyle=''" /> % endif % endfor ## Create an empty element, if permitted % if element.get('expandable', False): <% subelement['elementName'] = prefix for field in ('mincount', 'maxcount', 'deleteable', 'expandable', 'fieldprefix'): if field in element: subelement[field] = element[field] %> <%include file="/admin/widgets/${widget}.html" args="element=subelement, eaiAttributes={}, widgetstyle=''" /> ## Create a template that the javascript add operation can use
<%include file="/admin/widgets/${widget}.html" args="element=subelement, eaiAttributes={}, widgetstyle=''" />

${_('Add another field')}

% endif