Пример #1
0
 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>')
Пример #2
0
 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 '') +
             '>')
Пример #3
0
 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
Пример #4
0
 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
Пример #5
0
 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>')
Пример #6
0
 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 '') +
             '>')
Пример #7
0
    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)
Пример #8
0
 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 '') + '>')
Пример #9
0
 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
Пример #10
0
 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