GadgetField.py 2.13 KB
Newer Older
1 2 3 4
from Products.Formulator.Field import ZMIField
from Products.Formulator import Widget
from Products.Formulator.DummyField import fields
from Products.Formulator import Validator
5
from zLOG import LOG, ERROR
6 7 8

class GadgetWidget(Widget.TextWidget):
  """
9
  A widget that displays a renderjs gadget
10 11
  """
  property_names = Widget.TextWidget.property_names + \
12
       ['gadget_url', 'js_sandbox']
13

14 15 16
  gadget_url = fields.StringField('gadget_url',
                         title='Gadget Url',
                         description=("The url of the html page containing the \
17 18 19 20
                                      gadget"),
                         default='',
                         required=0)

21 22 23 24 25
  js_sandbox = fields.StringField('js_sandbox',
                          title='Gadget Sandbox',
                          description=("Gadget sandbox"),
                          default='',
                          required=0)
26

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

30 31 32
  def render_view(self, field, value, REQUEST=None, render_prefix=None, key=None):
     kw = {}
     kw['data-gadget-url'] = field.get_value('gadget_url')
33
     kw['data-gadget-scope'] = field.id
34
     if key is not None:
35
       kw['data-gadget-editable'] = key
36
     kw['class'] = "gadget"
37
     kw['data-gadget-value'] = value
38
     kw['data-gadget-sandbox'] = field.get_value('js_sandbox')
39
     return Widget.render_element("div",
40
                      **kw)
41

42 43 44 45 46 47 48 49 50 51 52 53 54
  def get_javascript_list(self, field, REQUEST=None):
    """
    Returns list of javascript needed by the widget
    """
    js_list = ['rsvp.js', 'renderjs.js', 'erp5_gadgetfield.js',
               'jio_sha256.amd.js', 'jio.js']
    result = []
    try:
      for js_file in js_list:
        result.append(field.restrictedTraverse(js_file).absolute_url()) 
    except KeyError:
      LOG('keyError:', ERROR, 'Error Value: %s' % js_file)
      return []
55

56
    return result
57 58 59 60 61 62 63 64


GadgetWidgetInstance = GadgetWidget()

class GadgetField(ZMIField):
    meta_type = "GadgetField"

    widget = GadgetWidgetInstance
65
    validator = Validator.FileValidatorInstance