%page args="element, eaiAttributes, form_defaults" /> <%! import random, re, urllib import splunk.util as util %> <% subelement = element.get('element') if not subelement: raise Exception("repeatable element didn't define an element to be repeated") prefix = element.get('fieldprefix') if prefix is None: prefix = '' regex = None pattern = element.get('fieldprefixregex') if pattern: regex = re.compile(pattern) if not regex: raise Exception("repeatable failed to compile field regex pattern: %s" % pattern) if not prefix: if regex: raise Exception("repeatable element didn't define a field prefix to accompany regex") else: raise Exception("repeatable element didn't define a field prefix") ignoreprefix = element.get('ignoreprefix') ignorepattern = element.get('ignorepattern') ignoreregex = None if ignorepattern: ignoreregex = re.compile(ignorepattern) if not ignoreregex: raise Exception("repeatable failed to compile field ignoreregex pattern: %s" % ignorepattern) 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), 'submitDeleted': util.normalizeBoolean(element.get('submitDeleted', True))}) %>
${_(element['exampleText'])}
% endif ## Find all elements that should be included in the list % for elname in form_default_keys: % if (regex and regex.match(elname)) or (prefix and elname.startswith(prefix)): <% if (ignoreprefix and elname.startswith(ignoreprefix)) or (ignoreregex and ignoreregex.match(elname)): continue # Pass-thru some parameters to the sub-element subelement['elementName'] = elname for field in ('mincount', 'maxcount', 'deleteable', 'expandable', 'fieldprefix', 'fieldprefixregex'): 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', 'fieldprefixregex'): 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