def op_textarea(self, field, content='', cols=None, rows=None, _title=None, _id=None, _class=None, _mode='rw'): current = self.get_field(field) if current is not None: content = current readonly = False if _mode == 'ro' or (_mode == 'once' and current is not None): readonly = True return ((_mode != 'rd' and "<TEXTAREA name='%s'" % field or \ "<TEXTAREA ") + (cols is not None and ' cols="%s"' % cols or '') + (rows is not None and ' rows="%s"' % rows or '') + (_id is not None and ' id="%s"' % _id or '') + (_class is not None and ' class="%s"' % _class or '') + (_title is not None and ' title="%s"' % _title or '') + (_mode == 'rd' and ' disabled="disabled="' or '') + (readonly is True and ' readonly="readonly"' or '') + '>' + xml_escape(content) + '</TEXTAREA>')
def op_input(self, field, _id=None, _class=None): current = self.get_field(field) return ("<INPUT name='%s'" % field + (_id is not None and ' id="%s"' % _id or '') + (_class is not None and ' class="%s"' % _class or '') + (current is not None and (" value=%r" % xml_escape( current)) or '') + '>')
def build_form(self, text): if not self.subform: form_class = self.form_class form_cssid = self.form_cssid or self.subcontext form_name = self.form_name or self.subcontext dest = self.formatter.req.href('/form/update') yield ('<FORM class="printableform" ' + 'method="POST" action=%r' % str(dest) + (form_cssid is not None and ' id="%s"' % form_cssid or '') + (form_name is not None and ' name="%s"' % form_name or '') + (form_class is not None and ' class="%s"' % form_class or '') + '>') yield text if self.allow_submit: # TRANSLATOR: Default submit button label submit_label = self.submit_label or _("Update Form") yield '<INPUT class="buttons" type="submit"' if not self.macro.save_tracform_allowed(self.context[0], self.context[1]): yield ' disabled="disabled"' if self.submit_name: yield ' name=%r' % str(self.submit_name) yield ' value=%r' % xml_escape(submit_label) yield '>' if self.keep_history: yield '<INPUT type="hidden"' yield ' name="__keep_history__" value="yes">' if self.track_fields: yield '<INPUT type="hidden"' yield ' name="__track_fields__" value="yes">' if self.form_updated_on is not None: yield '<INPUT type="hidden" name="__basever__"' yield ' value="' + str(self.form_updated_on) + '">' context = json.dumps( self.context, separators=(',', ':')) yield '<INPUT type="hidden" ' + \ 'name="__context__" value=%r>' % context backpath = self.formatter.req.href(self.formatter.req.path_info) yield '<INPUT type="hidden" ' \ 'name="__backpath__" value=%s>' % str(backpath) form_token = self.formatter.req.form_token yield '<INPUT type="hidden" ' \ 'name="__FORM_TOKEN" value=%r>' % str(form_token) yield '</FORM>' else: yield text
def build_form(self, text): if not self.subform: form_class = self.form_class form_cssid = self.form_cssid or self.subcontext form_name = self.form_name or self.subcontext dest = self.formatter.req.href('/form/update') yield ('<FORM class="printableform" ' + 'method="POST" action=%r' % str(dest) + (form_cssid is not None and ' id="%s"' % form_cssid or '') + (form_name is not None and ' name="%s"' % form_name or '') + (form_class is not None and ' class="%s"' % form_class or '') + '>') yield text if self.allow_submit: # TRANSLATOR: Default submit button label submit_label = self.submit_label or _("Update Form") yield '<INPUT class="buttons" type="submit"' if self.submit_name: yield ' name=%r' % str(self.submit_name) yield ' value=%r' % xml_escape(submit_label) yield '>' if self.keep_history: yield '<INPUT type="hidden"' yield ' name="__keep_history__" value="yes">' if self.track_fields: yield '<INPUT type="hidden"' yield ' name="__track_fields__" value="yes">' if self.form_updated_on is not None: yield '<INPUT type="hidden" name="__basever__"' yield ' value="' + str(self.form_updated_on) + '">' context = json.dumps( self.context, separators=(',', ':')) yield '<INPUT type="hidden" ' + \ 'name="__context__" value=%r>' % context backpath = self.formatter.req.href(self.formatter.req.path_info) yield '<INPUT type="hidden" ' \ 'name="__backpath__" value=%s>' % str(backpath) form_token = self.formatter.req.form_token yield '<INPUT type="hidden" ' \ 'name="__FORM_TOKEN" value=%r>' % str(form_token) yield '</FORM>' else: yield text
def op_input(self, field, content=None, size=None, maxlen=None, _title=None, _id=None, _class=None, _mode='rw'): current = self.get_field(field) if current is not None: content = current readonly = False if _mode == 'ro' or (_mode == 'once' and current is not None): readonly = True return ((_mode != 'rd' and "<INPUT name='%s'" % field or "<INPUT ") + (size is not None and ' size="%s"' % size or '') + (maxlen is not None and ' maxlength="%s"' % maxlen or '') + (_id is not None and ' id="%s"' % _id or '') + (_class is not None and ' class="%s"' % _class or '') + (_title is not None and ' title="%s"' % _title or '') + (readonly is True and ' readonly="readonly"' or '') + (content is not None and (' value="%s"' % xml_escape(content)) or '') + '>')
def new_setter(self, val, *args, **kwargs): # Do this regardless, for validation purposes fset(self, val, *args, **kwargs) if not self._xml_node: return # Convert from API value to XML value val = fget(self) if set_converter: val = set_converter(self, val) elif default_converter and val == "default": val = default_converter(self) nodexpath = xpath if xml_set_xpath: nodexpath = xml_set_xpath(self) if nodexpath is None: return nodes = util.listify( _get_xpath_node(self._xml_ctx, nodexpath, is_multi)) xpath_list = nodexpath if xml_set_list: xpath_list = xml_set_list(self) node_map = _tuplify_lists(nodes, val, xpath_list) for node, val, usexpath in node_map: if node: usexpath = node.nodePath() if val not in [None, False]: if not node: node = _build_xpath_node(self._xml_node, usexpath) if val is True: # Boolean property, creating the node is enough pass else: node.setContent(util.xml_escape(str(val))) else: _remove_xpath_node(self._xml_node, usexpath)
def argsub(self, match, NOT_FOUND=KeyError, aslist=False): if isinstance(match, basestring): name = match else: name = match.group(1) if name[:1] in '"\'': quote = True name = name[1:-1] else: quote = False if '*' in name or '?' in name or '[' in name: value = [] keys = self.get_sorted_env() for key in fnmatch.filter(keys, name): obj = self.env[key] if isinstance(obj, (tuple, list)): value.extend(obj) else: value.append(obj) if not value and self.page: for key in fnmatch.filter(keys, self.page + ':' + name): obj = self.env[key] if isinstance(obj, (tuple, list)): value.extend(obj) else: value.append(obj) if not value and self.subcontext: for key in fnmatch.filter(keys, self.subcontext + ':' + name): obj = self.env[key] if isinstance(obj, (tuple, list)): value.extend(obj) else: value.append(obj) if not value: for key in fnmatch.filter(keys, name): obj = self.env[key] if isinstance(obj, (tuple, list)): value.extend(obj) else: value.append(obj) else: value = self.env.get(name, NOT_FOUND) if self.page is not None and value is NOT_FOUND: value = self.env.get(self.page + ':' + name, NOT_FOUND) if self.subcontext is not None and value is NOT_FOUND: value = self.env.get(self.subcontext + ':' + name, NOT_FOUND) if value is NOT_FOUND: value = self.env.get(name, NOT_FOUND) if value is NOT_FOUND: fn = getattr(self, 'env:' + name.lower(), None) if fn is not None: value = fn() else: value = '' if aslist: if isinstance(value, (list, tuple)): return tuple(value) else: return (value,) else: if isinstance(value, (list, tuple)): return ' '.join( quote and repr(str(item)) or str(item) for item in value) else: value = xml_escape(value) if quote: value = repr(value) return value
def argsub(self, match, NOT_FOUND=KeyError, aslist=False): if isinstance(match, basestring): name = match else: name = match.group(1) if name[:1] in '"\'': quote = True name = name[1:-1] else: quote = False if '*' in name or '?' in name or '[' in name: value = [] keys = self.get_sorted_env() for key in fnmatch.filter(keys, name): obj = self.env[key] if isinstance(obj, (tuple, list)): value.extend(obj) else: value.append(obj) if not value and self.page: for key in fnmatch.filter(keys, self.page + ':' + name): obj = self.env[key] if isinstance(obj, (tuple, list)): value.extend(obj) else: value.append(obj) if not value and self.subcontext: for key in fnmatch.filter(keys, self.subcontext + ':' + name): obj = self.env[key] if isinstance(obj, (tuple, list)): value.extend(obj) else: value.append(obj) if not value: for key in fnmatch.filter(keys, name): obj = self.env[key] if isinstance(obj, (tuple, list)): value.extend(obj) else: value.append(obj) else: value = self.env.get(name, NOT_FOUND) if self.page is not None and value is NOT_FOUND: value = self.env.get(self.page + ':' + name, NOT_FOUND) if self.subcontext is not None and value is NOT_FOUND: value = self.env.get(self.subcontext + ':' + name, NOT_FOUND) if value is NOT_FOUND: value = self.env.get(name, NOT_FOUND) if value is NOT_FOUND: fn = getattr(self, 'env:' + name.lower(), None) if fn is not None: value = fn() else: value = '' if aslist: if isinstance(value, (list, tuple)): return tuple(value) else: return (value, ) else: if isinstance(value, (list, tuple)): return ' '.join(quote and repr(str(item)) or str(item) for item in value) else: value = xml_escape(value) if quote: value = repr(value) return value