コード例 #1
0
ファイル: Widget.py プロジェクト: infrae/Products.Formulator
    def render(self, field, key, value, REQUEST):
        rendered_items = self.render_items(field, key, value, REQUEST)

        extra=field.get_value('extra')
        kw = {'name': key,
              'css_class': field.get_value('css_class'),
              'size': field.get_value('size'),
              'contents': string.join(rendered_items, "\n"),
              'extra': extra}
        if not extra or not id_value_re.search(extra):
            kw['id'] = field.generate_field_html_id(key)
        return render_element('select', **kw)
コード例 #2
0
ファイル: Widget.py プロジェクト: infrae/Products.Formulator
 def render_hidden(self, field, key, value, REQUEST):
     """Renders this widget as a hidden field.
     """
     try:
         extra = field.get_value('extra')
     except KeyError:
         # In case extra is not defined as in DateTimeWidget
         extra = ''
     kw = {'type': "hidden", 'name': key, 'value': value, 'extra': extra}
     if not extra or not id_value_re.search(extra):
         kw['id'] = field.generate_field_html_id(key)
     return render_element("input", **kw)
コード例 #3
0
    def generate_field_html_id(self, key=None, validation=0):
        """Generate the html id used to render the field in the form.
           The id is generated as follows:
             the `key` param is prefixed with the name of the form the field is
             in and then sanitized to be an xml id addressable by css (i.e.
             [._ :] converted to '-'

           Note that if a field's "extra" parameter has an ID attribute
           in it, the value of the ID attribute is used rather than the
           generated one described above.  This is for backward compatibility.

           The `key` param is useful for subfields (e.g. DateTime).  The
           DateTimeWidget's render function needs to compute the subfield_key,
           and pass it into this function, since the subfield does not know
           what field it is a part of.

           Widgets can add this as the 'ID' attribute of rendered elements.
           The presentation layer can use this id in <label> tags, however using
           the 'html_id' property is preferred."""

        #if the 'extra' parameter has an ID attribute in it, use the value
        # of the ID
        if self.has_value('extra'):
            res = id_value_re.search(self.get_value('extra'))
            if res:
                return res.group(1)

        #generate the key if one wasn't passed in
        if not key:
            key = self.generate_field_key(validation)

        #if the field is acquisition wrapped, has a Form as a parent
        # and the form's `name` attribute != the default of 'form',
        # prefix it to the id, to add 'uniqueness'.
        #NOTE: subfields of datetime are not acquisition wrapped,
        #      so this does not work for them.
        name = None
        if hasattr(self,'aq_parent'):
            #name is an attribute of Formulator.Form, but not all
            # formulator fields have Forms as parents.  An example
            # is a SilvaMetadata element.  Fields of metadata elements
            # have a field_record = metadata name, which is part of the
            # key
            parent = self.aq_parent
            #in case a form is not acquisition wrapped
            #  (e.g. like in the tests)
            if hasattr(parent, 'aq_explicit'):
                name = getattr(parent.aq_explicit,'name',None)
            else:
                name = getattr(parent, 'name', None)
        if name is not None and name != 'form':
            key = '%s%s'%(name,key)
        return key_to_id_re.sub('-',key)
コード例 #4
0
ファイル: Widget.py プロジェクト: infrae/Products.Formulator
    def render_items(self, field, key, value, REQUEST):

        # get items
        items = field.get_value('items')

        # check if we want to select first item
        if not value and field.get_value('first_item') and len(items) > 0:
            if is_sequence(items[0]):
                text, value = items[0]
            else:
                value = items[0]

        css_class = field.get_value('css_class')
        extra_item = field.get_value('extra_item')

        field_html_id = None
        if not extra_item or not id_value_re.search(extra_item):
            field_html_id = field.generate_field_html_id(key)

        # if we run into multiple items with same value, we select the
        # first one only (for now, may be able to fix this better later)
        selected_found = 0
        rendered_items = []
        index = 0
        for item in items:
            index += 1
            if is_sequence(item):
                item_text, item_value = item
            else:
                item_text = item
                item_value = item

            item_id = field_html_id and field_html_id + str(index) or None
            if item_value == value and not selected_found:
                rendered_item = self.render_selected_item(item_text,
                                                          item_value,
                                                          key,
                                                          css_class,
                                                          extra_item,
                                                          item_id)
                selected_found = 1
            else:
                rendered_item = self.render_item(item_text,
                                                 item_value,
                                                 key,
                                                 css_class,
                                                 extra_item,
                                                 item_id)

            rendered_items.append(rendered_item)

        return rendered_items
コード例 #5
0
ファイル: Widget.py プロジェクト: infrae/Products.Formulator
    def render(self, field, key, value, REQUEST):
        rendered_items = self.render_items(field, key, value, REQUEST)

        extra = field.get_value('extra')
        kw = {
            'name': key,
            'css_class': field.get_value('css_class'),
            'size': field.get_value('size'),
            'contents': string.join(rendered_items, "\n"),
            'extra': extra
        }
        if not extra or not id_value_re.search(extra):
            kw['id'] = field.generate_field_html_id(key)
        return render_element('select', **kw)
コード例 #6
0
ファイル: Widget.py プロジェクト: infrae/Products.Formulator
 def render(self, field, key, value, REQUEST):
     width = field.get_value('width')
     height = field.get_value('height')
     extra=field.get_value('extra')
     css_class = field.get_value('css_class')
     kw = {'name': key,
           'css_class': css_class,
           'cols': width,
           'rows': height,
           'contents': cgi.escape(value)}
     if not extra or not id_value_re.search(extra):
         kw['id'] = field.generate_field_html_id(key)
     contents = render_element("textarea", **kw)
     return render_element("div", contents=contents, css_class=css_class)
コード例 #7
0
ファイル: Widget.py プロジェクト: infrae/Products.Formulator
 def render(self, field, key, value, REQUEST):
     """Render checkbox.
     """
     extra = field.get_value('extra')
     kw = {'type': "checkbox",
           'name': key,
           'css_class': field.get_value('css_class'),
           'extra': extra
           }
     if not extra or not id_value_re.search(extra):
         kw['id'] = field.generate_field_html_id(key)
     if value:
         kw['checked']=None
     return render_element("input", **kw)
コード例 #8
0
ファイル: Widget.py プロジェクト: infrae/Products.Formulator
 def render(self, field, key, value, REQUEST):
     """Render checkbox.
     """
     extra = field.get_value('extra')
     kw = {
         'type': "checkbox",
         'name': key,
         'css_class': field.get_value('css_class'),
         'extra': extra
     }
     if not extra or not id_value_re.search(extra):
         kw['id'] = field.generate_field_html_id(key)
     if value:
         kw['checked'] = None
     return render_element("input", **kw)
コード例 #9
0
ファイル: Widget.py プロジェクト: infrae/Products.Formulator
 def render_hidden(self, field, key, value, REQUEST):
     """Renders this widget as a hidden field.
     """
     try:
         extra = field.get_value('extra')
     except KeyError:
         # In case extra is not defined as in DateTimeWidget
         extra = ''
     kw = {'type': "hidden",
           'name': key,
           'value': value,
           'extra': extra }
     if not extra or not id_value_re.search(extra):
         kw['id'] = field.generate_field_html_id(key)
     return render_element("input", **kw)
コード例 #10
0
ファイル: Widget.py プロジェクト: infrae/Products.Formulator
 def render(self, field, key, value, REQUEST):
     width = field.get_value('width')
     height = field.get_value('height')
     extra = field.get_value('extra')
     css_class = field.get_value('css_class')
     kw = {
         'name': key,
         'css_class': css_class,
         'cols': width,
         'rows': height,
         'contents': cgi.escape(value)
     }
     if not extra or not id_value_re.search(extra):
         kw['id'] = field.generate_field_html_id(key)
     contents = render_element("textarea", **kw)
     return render_element("div", contents=contents, css_class=css_class)
コード例 #11
0
ファイル: Widget.py プロジェクト: infrae/Products.Formulator
    def render_items(self, field, key, value, REQUEST):

        # get items
        items = field.get_value('items')

        # check if we want to select first item
        if not value and field.get_value('first_item') and len(items) > 0:
            if is_sequence(items[0]):
                text, value = items[0]
            else:
                value = items[0]

        css_class = field.get_value('css_class')
        extra_item = field.get_value('extra_item')

        field_html_id = None
        if not extra_item or not id_value_re.search(extra_item):
            field_html_id = field.generate_field_html_id(key)

        # if we run into multiple items with same value, we select the
        # first one only (for now, may be able to fix this better later)
        selected_found = 0
        rendered_items = []
        index = 0
        for item in items:
            index += 1
            if is_sequence(item):
                item_text, item_value = item
            else:
                item_text = item
                item_value = item

            item_id = field_html_id and field_html_id + str(index) or None
            if item_value == value and not selected_found:
                rendered_item = self.render_selected_item(
                    item_text, item_value, key, css_class, extra_item, item_id)
                selected_found = 1
            else:
                rendered_item = self.render_item(item_text, item_value, key,
                                                 css_class, extra_item,
                                                 item_id)

            rendered_items.append(rendered_item)

        return rendered_items
コード例 #12
0
ファイル: Widget.py プロジェクト: infrae/Products.Formulator
    def render(self, field, key, value, REQUEST):
        """Render text input field.
        """
        extra=field.get_value('extra')
        kw = {'type': "file",
              'name': key,
              'css_class': field.get_value('css_class'),
              'value': value,
              'size': field.get_value('display_width'),
              'extra': extra}

        if not extra or not id_value_re.search(extra):
            kw['id'] = field.generate_field_html_id(key)

        display_maxwidth = field.get_value('display_maxwidth') or 0
        if display_maxwidth > 0:
            kw['maxlength'] = display_maxwidth
        return render_element("input", **kw)
コード例 #13
0
ファイル: Widget.py プロジェクト: infrae/Products.Formulator
    def render(self, field, key, value, REQUEST):
        """Render text input field.
        """
        extra = field.get_value('extra')
        kw = {
            'type': "file",
            'name': key,
            'css_class': field.get_value('css_class'),
            'value': value,
            'size': field.get_value('display_width'),
            'extra': extra
        }

        if not extra or not id_value_re.search(extra):
            kw['id'] = field.generate_field_html_id(key)

        display_maxwidth = field.get_value('display_maxwidth') or 0
        if display_maxwidth > 0:
            kw['maxlength'] = display_maxwidth
        return render_element("input", **kw)