Exemplo n.º 1
0
class RadioWidget(SingleItemsWidget):
    """radio buttons widget.
    """
    property_names = Widget.property_names +\
                     ['first_item', 'items', 'orientation', 'extra_item']

    orientation = fields.ListField(
        'orientation',
        title='Orientation',
        description=(
            "Orientation of the radio buttons. The radio buttons will "
            "be drawn either vertically or horizontally."),
        default="vertical",
        required=1,
        size=1,
        items=[('Vertical', 'vertical'), ('Horizontal', 'horizontal')])

    has_html_id = False

    def render(self, field, key, value, REQUEST):
        rendered_items = self.render_items(field, key, value, REQUEST)
        orientation = field.get_value('orientation')
        if orientation == 'horizontal':
            return string.join(rendered_items, "  ")
        else:
            return string.join(rendered_items, "<br />")

    def render_item(self, text, value, key, css_class, extra_item, html_id):
        kw = {
            'type': "radio",
            'css_class': css_class,
            'name': key,
            'value': value,
            'extra': extra_item
        }
        if html_id:
            kw['id'] = html_id
        contents = render_element('input', **kw) + render_unicode(text)
        return render_element('label', contents=contents)

    def render_selected_item(self, text, value, key, css_class, extra_item,
                             html_id):
        kw = {
            'type': "radio",
            'css_class': css_class,
            'name': key,
            'value': value,
            'checked': None,
            'extra': extra_item
        }
        if html_id:
            kw['id'] = html_id
        contents = render_element('input', **kw) + render_unicode(text)
        return render_element('label', contents=contents)
Exemplo n.º 2
0
class EditorWidget(Widget.TextAreaWidget):
    """
    A widget that displays a GUI HTML editor widget (based
    on FCK editor). This widget is intended to be used in
    conjunction with WebSite.
    This Widget does not escape values.

    TODO:
        - implement validation
        - extend to other widgets (kupu) ?
  """

    property_names = Widget.TextAreaWidget.property_names + ['text_editor']

    text_editor = fields.ListField(
        'text_editor',
        title='Text Editor',
        description=("The text editor widget to use."
                     ""),
        default="text_area",
        required=1,
        size=1,
        items=[('Standard Text Area', 'text_area'),
               ('FCK Editor', 'fck_editor'), ('SVG Editor', 'svg_editor'),
               ('Spreadsheet Editor', 'spreadsheet_editor'),
               ('Ace Editor', 'ace'), ('CodeMirror', 'codemirror')])

    def render(self, field, key, value, REQUEST, render_prefix=None):
        """
      Render editor
    """
        if REQUEST is None:
            REQUEST = get_request()
        here = REQUEST['here']
        text_editor = field.get_value('text_editor')
        if text_editor == "svg_editor":
            svg_editor_support = getattr(here, 'svg_editor_support', None)
            if svg_editor_support is not None:
                return svg_editor_support.pt_render()
        elif text_editor == "spreadsheet_editor":
            sheet_editor_support = getattr(here, 'sheet_editor_support', None)
            if sheet_editor_support is not None:
                return sheet_editor_support.pt_render()
        elif text_editor == 'ace':
            ace_editor_support = getattr(here, 'ace_editor_support', None)
            if ace_editor_support is not None:
                return ace_editor_support.pt_render(extra_context={
                    'field': field,
                    'content': value,
                    'id': key
                })
        elif text_editor == 'monaco':
            monaco_editor_support = getattr(here, 'monaco_editor_support',
                                            None)
            if monaco_editor_support is not None:
                mode = "python"
                portal_type = here.getPortalType()
                if portal_type == "Web Page":
                    mode = "htmlmixed"
                elif portal_type == "Web Script":
                    mode = "javascript"
                elif portal_type == "Web Style":
                    mode = "css"
                site_root = here.getWebSiteValue() or here.getPortalObject()
                return monaco_editor_support(
                    field=field,
                    content=value,
                    field_id=key,
                    portal_url=site_root.absolute_url(),
                    mode=mode)
        elif text_editor == 'codemirror':
            code_mirror_support = getattr(here, 'code_mirror_support', None)
            if code_mirror_support is not None:
                mode = "python"
                portal_type = here.getPortalType()
                if portal_type == "Web Page":
                    mode = "htmlmixed"
                elif portal_type == "Web Script":
                    mode = "javascript"
                elif portal_type == "Web Style":
                    mode = "css"
                site_root = here.getWebSiteValue() or here.getPortalObject()
                portal_type = here.getPortalType()
                return code_mirror_support(
                    field=field,
                    content=value,
                    field_id=key,
                    portal_url=site_root.absolute_url(),
                    mode=mode,
                    keymap=site_root.portal_preferences.
                    getPreferredSourceCodeEditorKeymap(),
                    portal_type=portal_type)
        elif text_editor != 'text_area':
            return here.fckeditor_wysiwyg_support.pt_render(extra_context={
                'inputvalue': value,
                'inputname': key
            })
        return Widget.TextAreaWidget.render(self, field, key, value, REQUEST)

    def render_view(self, field, value, REQUEST=None, render_prefix=None):
        """
      Render form in view only mode.
    """
        if value is None:
            value = ''
        return render_element("div",
                              css_class=field.get_value('css_class'),
                              contents=value,
                              extra=field.get_value('extra'))
Exemplo n.º 3
0
class VideoWidget(Widget.TextWidget):
    """
  A widget that displays a Video HTML element.
  This widget is intended to be used in
  conjunction with WebSite.
  """
    property_names = Widget.TextWidget.property_names + \
            ['video_controls', 'video_error_message', 'video_loop', \
                'video_width', 'video_height', 'video_preload', \
                'video_autoplay', 'js_enabled', 'video_player']

    video_controls = fields.CheckBoxField(
        'video_controls',
        title='Video Controls',
        description=("Controls to be used in Video Player."),
        default=1,
        required=0)

    video_error_message = fields.StringField(
        'video_error_message',
        title='Video Error Message',
        description=("Error message to be showed when \
          user's browser does not support the video tag."),
        default='Your browser does not support video tag.',
        required=0)

    video_loop = fields.CheckBoxField(
        'video_loop',
        title='Video Loop',
        description=("Specifies that the video file \
          will start over again, every time it is finished."),
        default=0,
        required=0)

    video_width = fields.IntegerField(
        'video_width',
        title='Video Width',
        description=("The width to be used when playing the video."),
        default=160,
        required=0)

    video_height = fields.IntegerField(
        'video_height',
        title='Video Height',
        description=("The height to be used when playing the video."),
        default=85,
        required=0)

    video_preload = fields.CheckBoxField(
        'video_preload',
        title='Video Preload',
        description=("Configure that you would like to \
      start downloading the video file as soon as possible."),
        default=1,
        required=0)

    video_autoplay = fields.CheckBoxField(
        'video_autoplay',
        title='Video Autoplay',
        description=("Configure that you would like to \
      start downloading and playing the video file as soon as possible."),
        default=0,
        required=0)

    js_enabled = fields.CheckBoxField(
        'js_enabled',
        title='Enable on the fly video player change (based on java script)',
        description=
        'Define if javascript is enabled or not on the current Video',
        default=1,
        required=0)

    video_player = fields.ListField(
        'video_player',
        title='Video Player',
        description=("The video player to be used to show video."),
        default="html5_video",
        required=1,
        size=1,
        items=[
            ('HTML5 Video', 'html5_video'),
            ('Flowplayer', 'flowplayer'),
        ])

    def render(self, field, key, value, REQUEST, render_prefix=None):
        return self.render_view(field, value, REQUEST, render_prefix)

    def render_view(self, field, value, REQUEST=None, render_prefix=None):
        if value is None:
            return ''
        video_player = field.get_value('video_player')
        if video_player == 'html5_video':
            extra_kw = {}
            if field.get_value('video_autoplay'):
                extra_kw['autoplay'] = 'autoplay'
            if field.get_value('video_controls'):
                extra_kw['controls'] = 'controls'
            if field.get_value('video_loop'):
                extra_kw['loop'] = 'loop'
            if field.get_value('video_preload'):
                extra_kw['preload'] = 'preload'
            return Widget.render_element(
                "video",
                src=value,
                extra=field.get_value('extra'),
                width=field.get_value('video_width'),
                height=field.get_value('video_height'),
                contents=field.get_value('video_error_message'),
                **extra_kw)
        elif video_player == 'flowplayer':
            a_element = Widget.render_element("a",
                              href="%s" % value,
                              style="display:block;width:%spx;height:%spx;" % \
                                              (field.get_value('video_width'),
                                               field.get_value('video_height'),),
                              id="player")

            script_element = """<script language="JavaScript">
                             flowplayer("player", "%s/flowplayer.swf");
                         </script>""" % self.getContext(
                field, REQUEST).getPortalObject().portal_url()
            return ' '.join([a_element, script_element])

    def get_javascript_list(self, field, REQUEST=None):
        """
    Returns list of javascript needed by the widget
    """
        if field.get_value('js_enabled'):
            video_player = field.get_value('video_player')
            context = self.getContext(field, REQUEST)
            if video_player == 'html5_video':
                # XXX Instead of harcoding library name
                # it should be better to call a python script, as
                # it is done on type base method.
                return ['%s/html5media.min.js' % context.portal_url()]
            elif video_player == 'flowplayer':
                return ['%s/flowplayer.min.js' % context.portal_url()]
        else:
            return []

    def getContext(self, field, REQUEST):
        """Return the context of rendering this Field.
    """
        value = REQUEST.get('here')
        if value is None:
            value = self.getForm(field).aq_parent
        return value

    def getForm(self, field):
        """Return the form which contains the Field.
    """
        return field.aq_parent
Exemplo n.º 4
0
Arquivo: Form.py Projeto: poses/erp5
def create_settings_form():
    """Create settings form for ZMIForm.
    """
    form = BasicForm('manage_settings')

    title = fields.StringField('title',
                               title="Title",
                               required=0,
                               default="")
    description = fields.TextAreaField('description',
                               title="Description",
                               required=0,
                               default="")
    row_length = fields.IntegerField('row_length',
                                     title='Number of groups in row (in order tab)',
                                     required=1,
                                     default=4)
    name = fields.StringField('name',
                              title="Form name",
                              required=0,
                              default="")
    pt = fields.StringField('pt',
                              title="Page Template",
                              required=0,
                              default="")
    action = fields.StringField('action',
                                title='Form action',
                                required=0,
                                default="")
    update_action = fields.StringField('update_action',
                                title='Form update action',
                                required=0,
                                default="")
    update_action_title = fields.StringField('update_action_title',
                               title="Update Action Title",
                               required=0,
                               default="")
    method = fields.ListField('method',
                              title='Form method',
                              items=[('POST', 'POST'),
                                     ('GET', 'GET')],
                              required=1,
                              size=1,
                              default='POST')
    enctype = fields.ListField('enctype',
                               title='Form enctype',
                               items=[('No enctype', ""),
                                      ('application/x-www-form-urlencoded',
                                       'application/x-www-form-urlencoded'),
                                      ('multipart/form-data',
                                       'multipart/form-data')],
                               required=0,
                               size=1,
                               default=None)
    encoding = fields.StringField('encoding',
                                  title='Encoding of pages the form is in',
                                  default="UTF-8",
                                  required=1)
    stored_encoding = fields.StringField('stored_encoding',
                                      title='Encoding of form properties',
                                      default='UTF-8',
                                      required=1)
    unicode_mode = fields.CheckBoxField('unicode_mode',
                                        title='Form properties are unicode',
                                        default=0,
                                        required=1)
    edit_order = fields.LinesField('edit_order',
                                   title='Setters for these properties should be'
                                   '<br /> called by edit() in the defined order')

    form.add_fields([title, description, row_length, name, pt, action, update_action, update_action_title,
                     method, enctype, encoding, stored_encoding, unicode_mode, edit_order])
    return form
Exemplo n.º 5
0
class CaptchaWidget(Widget.TextWidget):
    """
    A widget that displays a Captcha.
  """
    def add_captcha(self, portal_sessions, key, value):
        session = portal_sessions[key]
        if key in session:
            return False
        session[key] = value
        return True

    def validate_answer(self, portal_sessions, key, value):
        session = portal_sessions[key]
        if not (key in session):
            return False
        result = (session[key] == value)
        # Forbid several use of the same captcha.
        del (session[key])
        return result

    property_names = Widget.Widget.property_names + ['captcha_type']

    captcha_type = fields.ListField(
        'captcha_type',
        title='Captcha type',
        description=("The type of captcha you want to use."),
        default=CaptchaProviderFactory.getDefaultProvider(),
        required=1,
        size=1,
        items=CaptchaProviderFactory.getProviderList())

    def render(self, field, key, value, REQUEST, render_prefix=None):
        """
      Render editor
    """
        captcha_key = None
        captcha_field = None
        captcha_type = field.get_value("captcha_type")
        provider = CaptchaProviderFactory.getProvider(captcha_type)
        (captcha_key, captcha_answer) = provider.generate(field)
        portal_sessions = field.getPortalObject().portal_sessions
        while not self.add_captcha(portal_sessions,
                                   md5(captcha_key).hexdigest(),
                                   captcha_answer):
            (captcha_key, captcha_answer) = provider.generate(field)
        captcha_field = provider.getHTML(field, captcha_key)

        key_field = Widget.render_element("input",
                                          type="hidden",
                                          name="__captcha_" + key + "__",
                                          value=md5(captcha_key).hexdigest())
        splitter = "<br />"
        answer = Widget.render_element("input",
                                       type="text",
                                       name=key,
                                       css_class=field.get_value('css_class'),
                                       size=10)
        # HTML page having a captcha field should never be cached.
        REQUEST.RESPONSE.setHeader('Cache-Control', 'max-age=0, no-store')
        return captcha_field + key_field + splitter + answer

    def render_view(self, field, value, REQUEST=None, render_prefix=None):
        """
      Render form in view only mode.
    """
        return None
Exemplo n.º 6
0
class LinkValidator(StringValidator):
    property_names = StringValidator.property_names + [
        'check_link', 'check_timeout', 'link_type'
    ]
    message_names = StringValidator.message_names + ['not_link']

    check_link = fields.CheckBoxField(
        'check_link',
        title='Check Link',
        description=("Check whether the link is not broken."),
        default=0)
    check_timeout = fields.FloatField(
        'check_timeout',
        title='Check Timeout',
        description=("Maximum amount of seconds to check link. Required"),
        default=7.0,
        required=1)
    link_type = fields.ListField(
        'link_type',
        title='Type of Link',
        default="external",
        size=1,
        items=[('External Link', 'external'), ('Internal Link', 'internal'),
               ('Relative Link', 'relative')],
        description=("Define the type of the link. Required."),
        required=1)

    not_link = _('The specified link is broken.')

    def validate(self, field, key, REQUEST):
        value = StringValidator.validate(self, field, key, REQUEST)
        if value == "" and not field.get_value('required'):
            return value

        link_type = field.get_value('link_type')
        if link_type == 'internal':
            value = urljoin(REQUEST['BASE0'], value)
        elif link_type == 'relative':
            value = urljoin(REQUEST['URL1'], value)
        # otherwise must be external

        # FIXME: should try regular expression to do some more checking here?

        # if we don't need to check the link, we're done now
        if not field.get_value('check_link'):
            return value

        # resolve internal links using Zope's resolve_url
        if link_type in ['internal', 'relative']:
            try:
                REQUEST.resolve_url(value)
            except:
                self.raise_error('not_link', field)

        # check whether we can open the link
        link = LinkHelper(value)
        thread = Thread(target=link.open)
        thread.start()
        thread.join(field.get_value('check_timeout'))
        del thread
        if not link.status:
            self.raise_error('not_link', field)

        return value
Exemplo n.º 7
0
class OOoChartWidget(Widget.Widget):
  """
  This class is capabale of producing ODF
  charts based on data obtained through a
  listbox.
  Some properties are useless
  http://books.evc-cit.info/odbook/ch08.html#chart-plot-area-example
    - mean-value
    - error-margin
    - error-upper-limit
    - error-lower-limit
    - error-category
    - error-percentage
    - chart-japanese-candle-stick and stock-with-volume,chart:stock-updown-bars. These attributs are used with a chart:stock
  """

  property_names = list(Widget.Widget.property_names)

  # XXX The description says it's not used
  #     but removing 'default' breaks ODT/ODS rendering ...
  default = fields.StringField(
                              'default',
                              title='Default',
                              description=("A default value (not used)."),
                              default="",
                              required=0)

  listbox_form_id = fields.StringField(
                              'listbox_form_id',
                              title='ListBox Form ID',
                              description=("ID of the master form."),
                              default="",
                              required=0)
  property_names.append('listbox_form_id')

  listbox_id = fields.StringField(
                              'listbox_id',
                              title='ListBox ID',
                              description=("ID of the listbox in the master form."),
                              default="",
                              required=0)
  property_names.append('listbox_id')

  image_display = fields.ListField('image_display',
                              title='Image Display',
                              description=("Render size of this chart in HTML mode."),
                              default='medium',
                              items=[('thumbnail','thumbnail'),
                                    ('xsmall', 'xsmall'),
                                    ('small', 'small'),
                                    ('medium', 'medium'),
                                    ('large', 'large'),
                                    ('xlarge', 'xlarge'),
                                    ],
                              size=1)
  property_names.append('image_display')

  image_format = fields.StringField('image_format',
                              title='Image Format',
                              description=(
      "The format in which the chart should be converted to."),
                              default='png',
                              required=0)
  property_names.append('image_format')

  ooo_template = fields.StringField('ooo_template',
                              title='OOo Template',
                              description=('The ID of a OOo Page Template'
                                            'to render the ListBox'),
                              default='ERP5Site_viewChart',
                              required=0)
  property_names.append('ooo_template')


  chart_type = fields.ListField('chart_type',
                              title='Chart Type',
                              description=('Type of the Chart'),
                              default='chart:bar',
                              items=[('bar', 'chart:bar'),
                                    ('circle', 'chart:circle'),
                                    ('line', 'chart:line'),
                                    ('scatter', 'chart:scatter'),
                                    ('area', 'chart:area'),
                                    ],
                              size=0)
  property_names.append('chart_type')


  colour_column_list = fields.ListTextAreaField('colour_column_list',
                              title="Data Color",
                              description=(
    "A list of colors for each data associated to a column."),
                              default=[],
                              required=0)
  property_names.append('colour_column_list')

  # vertical ="true"
  chart_position = fields.ListField('chart_position',
                              title='Bar Position',
                              description=(
                    'Render the bar in horizontal position or vertical position'),
                              default='false',
                              items=[('horizontal', 'true'),
                                    ('vertical', 'false'),
                                    ],
                              size=0)
  property_names.append('chart_position')

  #legend of the chart or not
  chart_legend = fields.CheckBoxField('chart_legend',
                              title='Chart Legend',
                              description=('Show Chart Legend or no'),
                              default=1,
                              required=0)
  property_names.append('chart_legend')


  position_legend = fields.ListField('position_legend',
                              title='Legend Position',
                              description=(
                              'Legend Position according to the graph'),
                              default='end',
                              items=[('bottom', 'bottom'),
                                    ('end', 'end'),
                                    ('start', 'start'),
                                    ('top', 'top'),
                                    ],
                              size=1)
  property_names.append('position_legend')

  #legend of the chart or not
  chart_title_or_no = fields.CheckBoxField('chart_title_or_no',
                              title='Chart Title ',
                              description=('Show Title on Graph or no '),
                              default=1,
                              required=0)
  property_names.append('chart_title_or_no')

  # Axis
  x_axis_property_list = fields.ListTextAreaField('x_axis_property_list',
                              title="X-Axis Properties",
                              description="Examples of recognized properties:"
                                          " 'chart:visible',"
                                          " 'chart:display-label',"
                                          " 'chart:label-arrangement',"
                                          " 'chart:tick-marks-major-inner',"
                                          " 'chart:reverse-direction',"
                                          " 'chart:logarithmic',"
                                          " 'chart:text-overlap',"
                                          " 'chart:origin',"
                                          " 'text:line-break',"
                                          " 'style:rotation-angle'...",
                              default=(),
                              required=0)
  property_names.append('x_axis_property_list')

  y_axis_property_list = fields.ListTextAreaField('y_axis_property_list',
                              title="Y-Axis Properties",
                              default=(),
                              required=0)
  property_names.append('y_axis_property_list')

  #grid or not
  grid_graph = fields.CheckBoxField('grid_graph',
                              title='Chart Grid ',
                              description=('Show Grid or no'),
                              default=1,
                              required=0)
  property_names.append('grid_graph')


  grid_size = fields.ListField('grid_size',
                              title='Grid Size',
                              description=(
                              'Render a big grid size or a small grid size'),
                              default='major',
                              items=[('major', 'major'),
                                    ('minor', 'minor'),
                                    ],
                              size=0)
  property_names.append('grid_size')

  user_data_title = fields.StringField('user_data_title',
                              title="Overide Labelled Column ID",
                              description=(
    "Column Id choose by user to define the label."),
                              required=0)
  property_names.append('user_data_title')

  user_column_id_list = fields.ListTextAreaField('user_column_id_list',
                              title="Overide Column Ids",
                              description=(
    "A list of column Ids choose by user to draw the graph."),
                              default=[],
                              required=0)
  property_names.append('user_column_id_list')


  chart_stacked = fields.CheckBoxField('chart_stacked',
                              title='Stacked Data',
                              description=('stacked data or not'),
                              default=0,
                              required=0)
  property_names.append('chart_stacked')

  #connect-bars="false"
  connect_bars = fields.CheckBoxField('connect_bars',
                              title='Connect Bars',
                              description=(''),
                              default=0,
                              required=0)
  property_names.append('connect_bars')


  chart_three_dimensional = fields.CheckBoxField('chart_three_dimensional',
                              title='3D',
                              description=(
                      'Render the chart in three dimensions rather in flat mode'),
                              default=0,
                              required=0)
  property_names.append('chart_three_dimensional')

  #deep="false"
  deep = fields.CheckBoxField('deep',
                              title='Deep',
                              description=('Deep'),
                              default=0,
                              required=0)
  property_names.append('deep')

  # sector_pie_offset Default:0
  sector_pie_offset = fields.IntegerField('sector_pie_offset',
                              title='Sector Pie Offset',
                              description=(''),
                              default=0,
                              required=0)
  property_names.append('sector_pie_offset')


  #interpolation="none", cubic-spline, b-spline
  interpolation = fields.ListField('interpolation',
                              title='Interpolation',
                              description=(''),
                              default='none',
                              items=[('none', 'none'),
                                    ('cubic-spline', 'cubic-spline'),
                                    ('b-spline', 'b-spline')],
                              size=1)
  property_names.append('interpolation')

  #symbol-type="none", automatic
  symbol_type = fields.ListField('symbol_type',
                              title='Symbol Type',
                              description=(''),
                              default='none',
                              items=[('none', 'none'),
                                    ('automatic', 'automatic'),],
                              size=1)
  property_names.append('symbol_type')

  #lines-used="0"
  lines_used = fields.ListField('lines_used',
                              title='Lines Used',
                              description=(''),
                              default='0',
                              items=[('0', '0'),
                                      ('1', '1')],
                              size=1)
  property_names.append('lines_used')


  #series-source=columns or rows
  series_source = fields.ListField('series_source',
                              title='Series Source',
                              description=(''),
                              default='columns',
                              items=[('columns', 'columns'),
                                    ('rows', 'rows'),],
                              size=1)
  property_names.append('series_source')

  #regression-type="none" linear logarithmic exponential power
  regression_type = fields.ListField('regression_type',
                              title='Regression Type',
                              description=(''),
                              default='none',
                              items=[('none', 'none'),
                                    ('linear', 'linear'),
                                    ('logarithmic', 'logarithmic'),
                                    ('exponential', 'exponential'),
                                    ('power', 'power')],
                              size=1)
  property_names.append('regression_type')

  #data-label-number="none" value percentage
  data_label_number = fields.ListField('data_label_number',
                              title='Data Label Number',
                              description=(''),
                              default='none',
                              items=[('none', 'none'),
                                    ('value', 'value'),
                                    ('percentage', 'percentage')],
                              size=1)
  property_names.append('data_label_number')

  #data-label-text="false"
  data_label_text = fields.CheckBoxField('data_label_text',
                              title='Data Label Text',
                              description=(''),
                              default=0,
                              required=0)
  property_names.append('data_label_text')

  #data-label-symbol="false"
  data_label_symbol = fields.CheckBoxField('data_label_symbol',
                              title='Data Label Symbol',
                              description=(''),
                              default=0,
                              required=0)
  property_names.append('data_label_symbol')


  def getArgumentDict(self, field, REQUEST):
    """ Build argument Dict """
    def stringBoolean(value):
      return str(bool(value)).lower()
    form = field.aq_parent
    listbox_form_id = field.get_value('listbox_form_id')
    if listbox_form_id in ('', None):
      listbox_form_id = form.getId()
    listbox_id = field.get_value('listbox_id')
    if listbox_id in ('', None):
      listbox_id = 'listbox'
    render_prefix = REQUEST.get('render_prefix')
    extra_argument_dict = dict(
      render_prefix = render_prefix,
      chart_form_id = listbox_form_id,
      chart_field_id = listbox_id,
      chart_title = field.get_value('title'),
      chart_type = field.get_value('chart_type'),
      colour_column_list = field.get_value('colour_column_list'),
      user_column_id_list = field.get_value('user_column_id_list'),
      user_data_title= field.get_value('user_data_title'),
      chart_position = field.get_value('chart_position'),
      chart_legend = stringBoolean(field.get_value('chart_legend')),
      chart_title_or_no = stringBoolean(field.get_value('chart_title_or_no')),
      x_axis_property_dict = dict(field.get_value('x_axis_property_list')),
      y_axis_property_dict = dict(field.get_value('y_axis_property_list')),
      grid_graph = stringBoolean(field.get_value('grid_graph')),
      grid_size=field.get_value('grid_size'),
      chart_three_dimensional = stringBoolean(field.get_value('chart_three_dimensional')),
      deep = stringBoolean(field.get_value('deep')),
      chart_stacked = stringBoolean(field.get_value('chart_stacked')),
      sector_pie_offset = field.get_value('sector_pie_offset'),
      interpolation = field.get_value('interpolation'),
      symbol_type = field.get_value('symbol_type'),
      lines_used = field.get_value('lines_used'),
      connect_bars = stringBoolean(field.get_value('connect_bars')),
      series_source = field.get_value('series_source'),
      regression_type = field.get_value('regression_type'),
      data_label_number = field.get_value('data_label_number'),
      data_label_text = stringBoolean(field.get_value('data_label_text')),
      data_label_symbol = stringBoolean(field.get_value('data_label_symbol')),
      position_legend=field.get_value('position_legend'),
    )

    for k, v in extra_argument_dict.items():
      if REQUEST.get(k) is None:
        REQUEST.form[k] = v
    return extra_argument_dict


  def render_view(self, field, value, REQUEST=None, key=None, render_format='html', render_prefix=None):
    """
      Render a Chart in read-only.
    """
    if REQUEST is None: REQUEST=get_request()
    return self.render(field, key, value, REQUEST, render_format=render_format,
                       render_prefix=render_prefix)


  def render_odf(self, field, key, value, REQUEST, render_format='ooo',
                 render_prefix=None):
    """
      Render a Chart for ODT Style.
    """
    if REQUEST is None: REQUEST=get_request()
    form = field.aq_parent
    here = getattr(form, 'aq_parent', REQUEST)
    REQUEST.set('render_prefix', render_prefix)
    #needed to update REQUEST
    argument_dict = self.getArgumentDict(field, REQUEST)
    from xml.marshal.generic import dumps
    dump_args = dumps(argument_dict)
    #remove xml declaration (first processing node)
    dump_args = dump_args[dump_args.index('?>')+2:]
    content = '''<office:include path="%s/ERP5Site_buildChart"
                                 xlink:type="simple" xlink:actuate="onLoad"
                                 xlink:show="embed">%s</office:include>
                                 ''' % (here.getPath(), dump_args)
    return content


  def render(self, field, key, value, REQUEST, render_format='html', render_prefix=None):

    """
      Render a chart.

      render_format   -- If the format is set to html, render the chart
                         as a URL to ourselves with a png render_format

                         If the format is set to 'raw', render the chart
                         as raw XML.

                         If the format is set to an image type (ex. png)
                         render the chart using that format.
    """
    title = field.get_value('title')
    alt = field.get_value('description') or title
    form = field.aq_parent
    if not render_prefix:
      render_prefix = REQUEST.get('render_prefix')
    # Find the applicable context
    here = getattr(form, 'aq_parent', REQUEST)
    # Update the render format based on REQUEST parameters
    render_format = getattr(REQUEST, 'render_format', render_format)
    if render_format == 'html':
      css_class = field.get_value('css_class')
      format = field.get_value('image_format') or 'png'
      query_dict = dict(REQUEST.form.items())
      query_dict.update(render_format=format != 'raw' and format or '',
                        render_prefix=render_prefix,
                        display=field.get_value('image_display'))
      # XXX make_query does not handle tuples properly so listbox should be
      #     not editable (otherwise, REQUEST.form may contain listbox=()).
      url = '%s/%s/%s?%s' % (here.absolute_url(), form.getId(), field.getId(),
                             make_query(query_dict))
      if format in VALID_IMAGE_FORMAT_LIST:
        return '''<div class="OOoChartContent">
          <img class="%s" src="%s" title="%s" alt="%s"/">
          </div>''' % (css_class,
                       url,
                       title,
                       alt)
      elif format == 'raw':
        UrlIconOOo = '%s/misc_/ERP5OOo/OOo.png' % REQUEST['BASEPATH1']
        return '''<div class="OOoChartContent">
          <a href="%s"><img src="%s" alt="OOo"/></a>
          </div>''' % (url,
                       UrlIconOOo)
      elif format == 'pdf':
        UrlIconPdf = '%s/misc_/ERP5Form/PDF.png' % REQUEST['BASEPATH1']
        return '''<div class="OOoChartContent">
          <a href="%s"><img src="%s" alt="PDF" /></a>
          </div>''' % (url,
                       UrlIconPdf)
      else:
        raise NotImplementedError, 'Format: %s not handled' % format

    extra_context = self.getArgumentDict(field, REQUEST)

    method_id = field.get_value('ooo_template')

    # Find the page template
    ooo_template = getattr(here, method_id)

    # Render the chart
    return ooo_template(format=render_format, **extra_context)
Exemplo n.º 8
0
class POSBoxWidget(Widget.Widget):
  """
  A widget that display a point of sales UI.
  """

  property_names = Widget.Widget.property_names + [
    'html_ZPT', \
    'javascript_ZPT', \
    'css_ZPT', \
    'getResourceByReference_ZPT', \
    'createOrder_script', \
    'portal_types', \
    'display_fastResourceEntry', \
    'portal_type_fastResourceEntry', \
    'resource_category_fastResourceEntry', \
    'barcodeStartString', \
    'pos_layout', \
    'barcodeStopString', \
    'display_bgcolor', \
    'display_txtcolor', \
    'order_summary_aLine', \
    'order_summary_anotherLine'
  ]

  default = fields.StringField(
                                'default',
                                title='Default',
                                description=(
    "Default value of the text in the widget."),
                                default="",
                                required=0)

  html_ZPT = fields.StringField(
                                'html_ZPT',
                                title='Page Template for HTML',
                                description=(
    "Page Template for generating POSBox UI HTML"),
                                default="POSBox",
                                required=1)

  javascript_ZPT = fields.StringField(
                                'javascript_ZPT',
                                title='Page Template for JavaScript',
                                description=(
    "Page Template for generating JavaScript's options"),
                                default="POSBox_js",
                                required=1)

  css_ZPT = fields.StringField(
                                'css_ZPT',
                                title="Page Template for CSS",
                                description=(
      "Page Template for generating dynamic CSS"),
                                default="POSBox_css",
                                required=1)

  getResourceByReference_ZPT = fields.StringField(
                                'getResourceByReference_ZPT',
                                title="Page Template for generating resource's XML",
                                description=(
    "Page template which generates the XML of the resource when asking for a referencce"),
                                default="getResourceByReference",
                                required=1)

  createOrder_script = fields.StringField(
                                'createOrder_script',
                                title="Python script for creating the order",
                                description=(
    "Python script which create the order from the XML sended by POS"),
                                default="createOrder",
                                required=1)

  display_fastResourceEntry = fields.ListField(
                                'display_fastResourceEntry',
                                title='Display Fast Resource Entry Block',
                                description=(
    "Is the fast resource entry block displayed ?"),
                                default='False',
                                items=['True', 'False'],
                                size=1,
                                required=1,
                                group="Fast Product Entry")

  portal_type_fastResourceEntry = fields.StringField(
                                'portal_type_fastResourceEntry',
                                title='Portal Type of resources',
                                description=(
    "What is the portal type of resources in fast resource entry block"),
                                default='',
                                required=0,
                                group="Fast Product Entry")


  portal_types = fields.ListTextAreaField(
                                'portal_types',
                                title='Portal Types',
                                description=(
    "The allowed resource to be requested by reference. Required."),
                                default=[],
                                required=1)

  resource_category_fastResourceEntry = fields.StringField(
                                'resource_category_fastResourceEntry',
                                title='Top level Resource Category',
                                description=(
    "The ProductLine that is a the top level of fast resource entry"),
                                default='',
                                required=0,
                                group="Fast Product Entry")

  pos_layout = fields.ListField(
                                'pos_layout',
                                title='Layout',
                                description=(
    "How is the layout organised"),
                                default='',
                                items=[
                                    'Summary of the order on the left'
                                    , 'Summary of the order on the right'
                                  , ],
                                size=1,
                                required=1)

  barcodeStartString = fields.StringField(
                                'barcodeStartString',
                                title='Barcode Prefix String',
                                description=(
    "The string which is prefixed by the barcode while reading"),
                                default="#",
                                required=1,
                                group="barcode")

  barcodeStopString = fields.StringField(
                                'barcodeStopString',
                                title='Barcode Suffix String',
                                description=(
    "The string which is prefixed by the barcode while reading"),
                                default="#",
                                required=1,
                                group="barcode")

  display_bgcolor = fields.StringField(
                                'display_bgcolor',
                                title='Background color',
                                description=(
    "Color in html hex format (#000000 by ex.)"),
                                default="#ffffcc",
                                required=0,
                                group="display area")

  display_txtcolor = fields.StringField(
                                'display_txtcolor',
                                title='Text color',
                                description=(
    "Color in html hex format (#000000 by ex.)"),
                                default="#000000",
                                required=0,
                                group="display area")

  order_summary_aLine = fields.StringField(
                                'order_summary_aLine',
                                title="Order line background color 1",
                                description=(
    "Background color of a order line in order summary view"),
                                default="#e3e3e3",
                                required=0,
                                group="order summary")

  order_summary_anotherLine = fields.StringField(
                                'order_summary_anotherLine',
                                title="Order line background color 2",
                                description=(
    "Background color of another order line in order summary view"),
                                default="#ffffff",
                                required=0,
                                group="order summary")

  def render(self, field, key, value, REQUEST, render_prefix=None):
    """
      Render point of sales widget.
    """
    here = REQUEST['here']
    page_template = getattr(here,field.get_value("html_ZPT"))

    return "<!-- Generated by render -->\n%s" % page_template()

  def render_css(self, field, key, value, REQUEST):
    here = REQUEST['here']
    page_template = getattr(here,field.get_value("css_ZPT"))

    return "<!-- Generated by render_css  -->\n%s" % page_template(
        display_txtcolor = field.get_value("display_txtcolor"),
        display_bgcolor = field.get_value("display_bgcolor"),
        pos_layout_left = (field.get_value("pos_layout") == 'Summary of the order on the left'),
        order_summary_aLine = field.get_value("order_summary_aLine"),
        order_summary_anotherLine = field.get_value("order_summary_anotherLine"),
        fastResourceEntry_display = field.get_value("display_fastResourceEntry"),
        )

  def render_javascript(self, field, key, value, REQUEST, render_prefix=None):
    here = REQUEST['here']
    page_template = getattr(here,field.get_value("javascript_ZPT"))



    return "<!-- Generated by render_javascript -->\n%s" % page_template(
        getResourceByReference_ZPT = field.get_value('getResourceByReference_ZPT'),
        createOrder_script = field.get_value('createOrder_script'),
        portal_types = "portal_type:list=" + "&portal_type:list=".join([url_quote_plus(x[0]) for x in field.get_value('portal_types')]),
        barcodeStartString = field.get_value('barcodeStartString'),
        barcodeStopString = field.get_value('barcodeStopString'),
        fastResourceEntry_display = field.get_value("display_fastResourceEntry"),
        portal_type_fastResourceEntry = field.get_value('portal_type_fastResourceEntry'),
        resource_category_fastResourceEntry = field.get_value('resource_category_fastResourceEntry')
        )

  def render_view(self, field, value, REQUEST=None, render_prefix=None):
    """
      Render point of sales widget
    """
    return "<p>Generated by render_view</p>"
Exemplo n.º 9
0
class DateTimeWidget(Widget):
    property_names = Widget.property_names +\
                     ['default_now', 'date_separator', 'time_separator',
                      'input_style', 'input_order',
                      'date_only', 'hide_day', 'ampm_time_style', 'calendar_picker', 'calendar_start']

    default = fields.DateTimeField('default',
                                   title="Default",
                                   description=("The default datetime."),
                                   default=None,
                                   display_style="text",
                                   display_order="ymd",
                                   input_style="text",
                                   required=0)

    default_now = fields.CheckBoxField(
        'default_now',
        title="Default to now",
        description=(
            "Default date and time will be the date and time at showing of "
            "the form (if the default is left empty)."),
        default=0)

    date_separator = fields.StringField(
        'date_separator',
        title='Date separator',
        description=("Separator to appear between year, month, day."),
        default="/",
        required=0,
        display_width=2,
        display_maxwith=2,
        max_length=2)

    time_separator = fields.StringField(
        'time_separator',
        title='Time separator',
        description=("Separator to appear between hour and minutes."),
        default=":",
        required=0,
        display_width=2,
        display_maxwith=2,
        max_length=2)

    input_style = fields.ListField(
        'input_style',
        title="Input style",
        description=("The type of input used. 'text' will show the date part "
                     "as text, while 'list' will use dropdown lists instead."),
        default="text",
        items=[("text", "text"), ("list", "list")],
        size=1)

    input_order = fields.ListField(
        'input_order',
        title="Input order",
        description=("The order in which date input should take place. Either "
                     "year/month/day, day/month/year or month/day/year."),
        default="ymd",
        items=[("year/month/day", "ymd"), ("day/month/year", "dmy"),
               ("month/day/year", "mdy")],
        required=1,
        size=1)

    date_only = fields.CheckBoxField(
        'date_only',
        title="Display date only",
        description=("Display the date only, not the time."),
        default=0)

    hide_day = fields.CheckBoxField('hide_day',
                                    title="Hide day field",
                                    description=("Hide the day field."),
                                    default=0)

    ampm_time_style = fields.CheckBoxField(
        'ampm_time_style',
        title="AM/PM time style",
        description=("Display time in am/pm format."),
        default=0)
    calendar_picker = fields.CheckBoxField(
        'calendar_picker',
        title="Enable calendar picker",
        description=
        ("Displays a floating calendar to select the date.  "
         "The js calendar is located here: http://www.dynarch.com/projects/calendar/old/"
         ),
        default=0)

    calendar_start = fields.ListField(
        'calendar_start',
        title="Starting day of week",
        description=(
            "The starting day of the week for the floating calendar."),
        default="Sunday",
        items=[
            ("Sunday", "0"),
            ("Monday", "1"),
            ("Tuesday", "2"),
            ("Wednesday", "3"),
            ("Thursday", "4"),
            ("Friday", "5"),
            ("Saturday", "6"),
        ],
        required=0,
        size=1)

    has_html_id = False

    # FIXME: do we want to handle 'extra'?

    def render(self, field, key, value, REQUEST):
        use_ampm = field.get_value('ampm_time_style')
        hide_day = field.get_value('hide_day')
        calendar_picker = field.get_value('calendar_picker')
        start_day = field.get_value('calendar_start')
        # FIXME: backwards compatibility hack:
        if not hasattr(field, 'sub_form'):
            from StandardFields import create_datetime_text_sub_form
            field.sub_form = create_datetime_text_sub_form()

        if value is None and field.get_value('default_now'):
            value = DateTime()

        # Allow subfields to get their values even when default_now is set.
        if REQUEST is not None and \
                   REQUEST.form.has_key(field.generate_subfield_key('year')):
            value = None

        if value is None:
            year = None
            month = None
            day = None
            hour = None
            minute = None
            ampm = None
        else:
            if not isinstance(value, DateTime):
                value = DateTime(value)
            year = "%04d" % value.year()
            month = "%02d" % value.month()
            day = "%02d" % value.day()
            if use_ampm:
                hour = "%02d" % value.h_12()
            else:
                hour = "%02d" % value.hour()
            minute = "%02d" % value.minute()
            ampm = value.ampm()

        input_order = field.get_value('input_order')
        if input_order == 'ymd':
            order = [('year', year), ('month', month), ('day', day)]
        elif input_order == 'dmy':
            order = [('day', day), ('month', month), ('year', year)]
        elif input_order == 'mdy':
            order = [('month', month), ('day', day), ('year', year)]
        result = []
        hidden_day_part = ""
        for sub_field_name, sub_field_value in order:
            if hide_day and (sub_field_name == 'day'):
                dayvalue = sub_field_value
                if dayvalue is None:
                    dayvalue = "01"
                sub_key = field.generate_subfield_key(sub_field_name)
                sub_field = field.sub_form.get_field(sub_field_name)
                hidden_day_part = sub_field.widget.\
                                  render_hidden(sub_field, sub_key,
                                                dayvalue, REQUEST)
            else:
                result.append(
                    field.render_sub_field(sub_field_name, sub_field_value,
                                           REQUEST))
        date_result = string.join(result, field.get_value('date_separator'))

        day_id = field.sub_form.get_field('day').generate_field_html_id(
            "subfield_" + field.id + "_day")
        month_id = field.sub_form.get_field('month').generate_field_html_id(
            "subfield_" + field.id + "_month")
        year_id = field.sub_form.get_field('year').generate_field_html_id(
            "subfield_" + field.id + "_year")

        select_day = ''
        if hidden_day_part:
            date_result += hidden_day_part
        else:
            #get the proper html id
            select_day = 'document.getElementById("' + day_id + '").value = RegExp.$3;'
        calendar_popup = ''
        html_id = field.generate_field_html_id(key)
        if calendar_picker:
            calendar_popup = '&nbsp;' + render_element(
                'button',
                css_class='kupu-button kupu-link-reference calendar-button',
                style='padding: 0px 0px 0px 0px',
                id=html_id + '_calendar',
                title='set date',
                contents=' ') + """<script type="text/javascript">
setTimeout(function(){Calendar.setup({inputField : '%s_hiddeninput',
                ifFormat : '%%Y/%%m/%%d %%%s:%%M %%P',
                showsTime : '%s',
                button : '%s_calendar',
                weekNumbers: false,
                timeFormat: '%s',
                date: (new Date()).setHours(0,0,0,0),
                firstDay: '%s'})},100);</script>""" % (
                    html_id,
                    use_ampm and 'I' or 'H',
                    field.get_value('date_only') and 'false' or 'true',
                    html_id,
                    use_ampm and '12' or '24',
                    start_day,
                )
        if not field.get_value('date_only'):
            time_result = (field.render_sub_field('hour', hour, REQUEST) +
                           field.get_value('time_separator') +
                           field.render_sub_field('minute', minute, REQUEST))

            hour_id = field.sub_form.get_field('hour').generate_field_html_id(
                "subfield_" + field.id + "_hour")
            minute_id = field.sub_form.get_field(
                'minute').generate_field_html_id("subfield_" + field.id +
                                                 "_minute")
            ampm_id = field.sub_form.get_field('ampm').generate_field_html_id(
                "subfield_" + field.id + "_ampm")
            if use_ampm:
                time_result += '&nbsp;' + field.render_sub_field(
                    'ampm', ampm, REQUEST)
            calendar_popup += calendar_picker and render_element(
                'input',
                type='hidden',
                id=html_id + '_hiddeninput',
                onchange=
                'var pattern = /(\d{4})\/(\d{2})\/(\d{2}) (\d{2}):(\d{2}) (am|pm)/; if (pattern.exec(this.value)) { document.getElementById("'
                + year_id + '").value = RegExp.$1; document.getElementById("' +
                month_id + '").value = RegExp.$2; ' + select_day +
                ' document.getElementById("' + hour_id +
                '").value = RegExp.$4; document.getElementById("' + minute_id +
                '").value = RegExp.$5; ' +
                str(use_ampm and 'document.getElementById("' + ampm_id +
                    '").value = RegExp.$6;' or '') + ' }') or ''
            return date_result + '&nbsp;&nbsp;&nbsp;' + time_result + calendar_popup
        else:
            calendar_popup += calendar_picker and render_element(
                'input',
                type='hidden',
                id=html_id + '_hiddeninput',
                onchange=
                'var pattern = /(\d{4})\/(\d{2})\/(\d{2}) (\d{2}):(\d{2}) (am|pm)/; if (pattern.exec(this.value)) { document.getElementById("'
                + year_id + '").value = RegExp.$1; document.getElementById("' +
                month_id + '").value = RegExp.$2; ' + select_day + ' }') or ''
            return date_result + calendar_popup

    def render_hidden(self, field, key, value, REQUEST):
        result = []
        if value is None and field.get_value('default_now'):
            value = DateTime()
        sub_values = {}
        subfields = ['year', 'month', 'day']
        if value is not None:
            if not isinstance(value, DateTime):
                value = DateTime(value)
            sub_values['year'] = '%04d' % value.year()
            sub_values['month'] = "%02d" % value.month()
            sub_values['day'] = "%02d" % value.day()
            if not field.get_value('date_only'):
                use_ampm = field.get_value('ampm_time_style')
                subfields.extend(['hour', 'minute'])
                if use_ampm: subfields.append('ampm')
                if value is not None:
                    if use_ampm:
                        sub_values['hour'] = "%02d" % value.h_12()
                        sub_values['ampm'] = value.ampm()
                    else:
                        sub_values['hour'] = "%02d" % value.hour()
                    sub_values['minute'] = "%02d" % value.minute()
        for subfield in subfields:
            # XXX it would be nicer to pass the hidden value somewhere
            # to the subfields, but ...
            sub_key = field.generate_subfield_key(subfield)
            sub_field = field.sub_form.get_field(subfield)
            result.append(
                sub_field.widget.render_hidden(sub_field, sub_key,
                                               sub_values.get(subfield),
                                               REQUEST))
        return ''.join(result)

    def render_view(self, field, value):
        if value is None:
            return ''

        use_ampm = field.get_value('ampm_time_style')

        if not isinstance(value, DateTime):
            value = DateTime(value)
        year = "%04d" % value.year()
        month = "%02d" % value.month()
        day = "%02d" % value.day()
        if use_ampm:
            hour = "%02d" % value.h_12()
        else:
            hour = "%02d" % value.hour()
        minute = "%02d" % value.minute()
        ampm = value.ampm()

        order = field.get_value('input_order')
        if order == 'ymd':
            output = [year, month, day]
        elif order == 'dmy':
            output = [day, month, year]
        elif order == 'mdy':
            output = [month, day, year]
        date_result = string.join(output, field.get_value('date_separator'))

        if not field.get_value('date_only'):
            time_result = hour + field.get_value('time_separator') + minute
            if use_ampm:
                time_result += '&nbsp;' + ampm
            return date_result + '&nbsp;&nbsp;&nbsp;' + time_result
        else:
            return date_result
Exemplo n.º 10
0
class EditorWidget(Widget.TextAreaWidget):
    """
    A widget that displays a GUI HTML editor widget (based
    on FCK editor). This widget is intended to be used in
    conjunction with WebSite.
    This Widget does not escape values.

    TODO:
        - implement validation
        - extend to other widgets (kupu) ?
  """

    property_names = Widget.TextAreaWidget.property_names + ['text_editor']

    text_editor = fields.ListField(
        'text_editor',
        title='Text Editor',
        description=("The text editor widget to use."
                     ""),
        default="text_area",
        required=1,
        size=1,
        items=[('Standard Text Area', 'text_area'),
               ('FCK Editor', 'fck_editor'), ('Bespin Editor', 'bespin'),
               ('Xinha Editor', 'xinha'), ('SVG Editor', 'svg_editor'),
               ('Spreadsheet Editor', 'spreadsheet_editor'),
               ('Ace Editor', 'ace'), ('CodeMirror', 'codemirror')])

    def render(self, field, key, value, REQUEST, render_prefix=None):
        """
      Render editor
    """
        here = REQUEST['here']
        text_editor = field.get_value('text_editor')
        if text_editor == 'bespin':
            # XXX The usage of bespin editor depends of erp5_bespin bt5
            # installed and still experimental. If erp5_bespin is not installed, it
            # render standard an standard editor field.
            bespin_support = getattr(here, 'bespin_support', None)
            if bespin_support is not None:
                return bespin_support.pt_render(extra_context={
                    'field': field,
                    'inputvalue': value,
                    'inputname': key
                })
        elif text_editor == "xinha":
            xinha_support = getattr(here, 'xinha_support', None)
            if xinha_support is not None:
                return xinha_support.pt_render(extra_context={
                    'field': field,
                    'field_value': value,
                    'field_name': key
                })
        elif text_editor == "svg_editor":
            svg_editor_support = getattr(here, 'svg_editor_support', None)
            if svg_editor_support is not None:
                return svg_editor_support.pt_render()
        elif text_editor == "spreadsheet_editor":
            sheet_editor_support = getattr(here, 'sheet_editor_support', None)
            if sheet_editor_support is not None:
                return sheet_editor_support.pt_render()
        elif text_editor == 'ace':
            ace_editor_support = getattr(here, 'ace_editor_support', None)
            if ace_editor_support is not None:
                return ace_editor_support.pt_render(extra_context={
                    'field': field,
                    'content': value,
                    'id': key
                })
        elif text_editor == 'codemirror':
            code_mirror_support = getattr(here, 'code_mirror_support', None)
            if code_mirror_support is not None:
                site_root = here.getWebSiteValue() or here.getPortalObject()
                return code_mirror_support(field=field,
                                           content=value,
                                           field_id=key,
                                           portal_url=site_root.absolute_url(),
                                           mode='python')
        elif text_editor != 'text_area':
            return here.fckeditor_wysiwyg_support.pt_render(extra_context={
                'inputvalue': value,
                'inputname': key
            })
        return Widget.TextAreaWidget.render(self, field, key, value, REQUEST)

    def render_view(self, field, value, REQUEST=None, render_prefix=None):
        """
      Render form in view only mode.
    """
        if value is None:
            value = ''
        return render_element("div",
                              css_class=field.get_value('css_class'),
                              contents=value,
                              extra=field.get_value('extra'))