Beispiel #1
0
    }
    return data.tag('div', content, **attrs)


def empty_display_renderer(widget, data):
    """Display renderer which renders an empty string.
    """
    return data.rendered or u''


###############################################################################
# text
###############################################################################

factory.register('text',
                 extractors=[generic_extractor, generic_required_extractor],
                 edit_renderers=[input_generic_renderer],
                 display_renderers=[generic_display_renderer])

factory.doc['blueprint']['text'] = \
"""Text input blueprint.
"""

factory.defaults['text.type'] = 'text'
factory.doc['props']['text.type'] = \
"""Type of input tag.
"""

factory.defaults['text.required_class'] = 'required'

factory.defaults['text.default'] = ''
Beispiel #2
0
    if widget.attrs.get(widget.attrs['required_bullet_trigger']) \
      and data.mode == 'edit':
        label_contents += data.tag('span', ' ',
                                   class_='required',
                                   title=_('required', 'Required'))
    label_contents += data.tag('span', help_text, class_='formHelp')
    rendered = data.rendered is not UNSET and data.rendered or u''
    position = widget.attrs['position']
    if callable(position):
        position = position(widget, data)
    return generic_positional_rendering_helper(
        'label', label_contents, label_attrs, rendered, position, tag)


factory.register(
    'plonelabel',
    edit_renderers=[plone_label_renderer],
    display_renderers=[plone_label_renderer])

factory.doc['blueprint']['plonelabel'] = """\
Label for Plone blueprint.
"""

factory.defaults['plonelabel.position'] = 'before'

factory.doc['props']['plonelabel.label'] = """\
Text to be displayed as a label.
"""

factory.defaults['plonelabel.help'] = ''
factory.doc['props']['plonelabel.help'] = """\
Help text to be displayed inside label.
Beispiel #3
0
        'value': fetch_value(widget, data),
        'name_': widget.dottedpath,
        'id': cssid(widget, 'input'),    
        'class_': cssclasses(widget, data),
        'size': widget.attrs.get('size'),
        'disabled': bool(widget.attrs.get('disabled')) and 'disabled' or None,
        'placeholder': widget.attrs.get('placeholder'),
    }
    return tag('input', **input_attrs)

###############################################################################
# text
###############################################################################

factory.register('text', 
                 [generic_extractor, generic_required_extractor], 
                 [input_generic_renderer])
factory.doc['widget']['text'] = \
"""Text input widget.
"""

factory.defaults['text.type'] = 'text'
factory.doc['props']['text.type'] = \
"""Type of input tag.
"""

factory.defaults['text.required_class'] = 'required'

factory.defaults['text.default'] = ''

factory.defaults['text.class'] = 'text'
@managedprops(*wysihtml5_options)
def wysihtml5_textarea_renderer(widget, data):
    custom_attrs = data_attrs_helper(widget, data, wysihtml5_options)
    return textarea_renderer(widget, data, custom_attrs=custom_attrs)


def wysihtml5_display_renderer(widget, data):
    value = fetch_value(widget, data)
    if not value:
        value = ''
    return data.tag('div', value, **{'class': 'display-wysihtml5'})


factory.register(
    'wysihtml5',
    extractors=[generic_extractor, generic_required_extractor],
    edit_renderers=[wysihtml5_textarea_renderer],
    display_renderers=[wysihtml5_display_renderer])

factory.doc['blueprint']['wysihtml5'] = \
"""Add-on blueprint `yafowil.widget.wysihtml5
<http://github.com/bluedynamics/yafowil.widget.wysihtml5/>`_ .
"""

factory.defaults['wysihtml5.default'] = ''

factory.defaults['wysihtml5.wrap'] = None
factory.doc['props']['wysihtml5.wrap'] = \
"""Either ``soft``, ``hard``, ``virtual``, ``physical`` or  ``off``.
"""
Beispiel #5
0
                    child.getter = value[childname]
                else:
                    raise ValueError(
                        u"Both compound and compound member "
                        u"provide a value for '{0}'".format(childname)
                    )
        if subdata is None:
            result += child(request=data.request)
        else:
            result += child(data=subdata)
    return result


factory.register(
    'compound',
    extractors=[compound_extractor],
    edit_renderers=[compound_renderer],
    display_renderers=[compound_renderer])

factory.doc['blueprint']['compound'] = """\
A blueprint to create a compound of widgets. This blueprint creates a node. A
node can contain sub-widgets.
"""

factory.defaults['structural'] = False
factory.doc['props']['structural'] = """\
If a compound is structural, it will be omitted in the dotted-path levels and
will not have an own runtime-data.
"""

Beispiel #6
0
    value = data.value
    if value != 0:
        active_attrs["checked"] = "checked"
    active = tag("input", **active_attrs)
    until = tag("label", u"until")
    if value not in [0, UNSET]:
        value = datetime.fromtimestamp(value)
    expires = datetime_display_renderer(widget, data, value)
    if expires:
        expires = until + expires
    return tag("div", active + expires, class_="expiration-widget")


factory.register(
    "expiration",
    extractors=[generic_extractor, generic_required_extractor, datetime_extractor, expiration_extractor],
    edit_renderers=[expiration_edit_renderer],
    display_renderers=[expiration_display_renderer],
)


factory.doc["blueprint"][
    "expiration"
] = """Add-on blueprint UGM expiration widget. Utilizes yafowil.widget.datetime.
"""

factory.defaults["expiration.class"] = "expiration"

factory.defaults["expiration.datepicker_class"] = "datepicker"

factory.defaults["expiration.datepicker"] = True
    attrs.update({
        'data-source-type': source_type,
        'data-source': source,
        'data-delay': widget.attrs['delay'],
        'data-minLength': widget.attrs['minLength']
    })
    attrs['type'] = 'text'
    return tag('input', **attrs)


def autosuggest_extractor(widget, data):
    return data.extracted


factory.register('autosuggest',
                 extractors=[generic_extractor, autosuggest_extractor],
                 edit_renderers=[autosuggest_renderer])

factory.doc['blueprint']['autosuggest'] = \
"""Add-on blueprint `yafowil.widget.autosuggest
<http://github.com/conestack/yafowil.widget.autosuggest/>`_ utilizing
`jquery autosuggest <https://github.com/wuyuntao/jquery-autosuggest/>`_ to
offer the user a selection based on the input given so far.
"""

factory.defaults['autosuggest.class'] = 'autosuggest'
factory.defaults['autosuggest.type'] = 'text'
factory.defaults['autosuggest.required_class'] = 'required'
factory.defaults['autosuggest.delay'] = '300'  #ms
factory.defaults['autosuggest.minLength'] = '1'  #characters
factory.defaults['autosuggest.disabled'] = False
from yafowil.base import factory, fetch_value
from yafowil.common import generic_extractor, generic_required_extractor, textarea_renderer


def alohaeditor_display_renderer(widget, data):
    value = fetch_value(widget, data)
    if not value:
        value = ""
    return data.tag("div", value, **{"class": "display-alohaeditor"})


factory.register(
    "alohaeditor",
    extractors=[generic_extractor, generic_required_extractor],
    edit_renderers=[textarea_renderer],
    display_renderers=[alohaeditor_display_renderer],
)

factory.doc["blueprint"][
    "alohaeditor"
] = """Add-on blueprint `yafowil.widget.alohaeditor
<http://github.com/bluedynamics/yafowil.widget.alohaeditor/>`_ .
"""

factory.defaults["alohaeditor.default"] = ""
factory.defaults["alohaeditor.wrap"] = None
factory.defaults["alohaeditor.cols"] = 80
factory.defaults["alohaeditor.rows"] = 10
factory.defaults["alohaeditor.readonly"] = None
factory.defaults["alohaeditor.class"] = "alohaeditor"
                  **{'class': 'autocomplete-source hiddenStructure'})
    params = [('%s,%s' % (_, attr_value(_, widget, data))) \
                  for _ in ['delay', 'minLength']]
    params.append('type,%s' % source_type)
    result += tag('div', '|'.join(params), 
                  **{'class': 'autocomplete-params hiddenStructure'})
    return tag('div', result, **{'class': 'yafowil-widget-autocomplete'})


def autocomplete_extractor(widget, data):    
    return data.extracted


factory.register(
    'autocomplete', 
    extractors=[generic_extractor,
                generic_required_extractor,
                autocomplete_extractor], 
    edit_renderers=[input_generic_renderer, autocomplete_renderer])

factory.doc['blueprint']['autocomplete'] = \
"""Add-on blueprint `yafowil.widget.autocomplete 
<http://github.com/bluedynamics/yafowil.widget.autocomplete/>`_ utilizing 
``jquery.ui.autocomplete`` to offer the user a selection based on the input 
given so far.
"""

factory.defaults['autocomplete.type'] = 'text'

factory.defaults['autocomplete.class'] = 'autocomplete'

factory.defaults['autocomplete.required_class'] = 'required'
Beispiel #10
0
                     '&nbsp;',
                     class_='required',
                     title=_('required', 'Required')))
    label_contents.append(data.tag('span', help_text, class_='formHelp'))
    rendered = data.rendered is not UNSET and data.rendered or u''
    position = widget.attrs['position']
    if callable(position):
        position = position(widget, data)
    combined_label = u' '.join(label_contents)
    return generic_positional_rendering_helper('label', combined_label,
                                               label_attrs, rendered, position,
                                               tag)


factory.register('plonelabel',
                 edit_renderers=[plone_label_renderer],
                 display_renderers=[plone_label_renderer])

factory.doc['blueprint']['plonelabel'] = """\
Label for Plone blueprint.
"""

factory.defaults['plonelabel.position'] = 'before'

factory.doc['props']['plonelabel.label'] = """\
Text to be displayed as a label.
"""

factory.defaults['plonelabel.help'] = ''
factory.doc['props']['plonelabel.help'] = """\
Help text to be displayed inside label.
Beispiel #11
0
    return data.tag('div', content, **attrs)


def empty_display_renderer(widget, data):
    """Display renderer which renders an empty string.
    """
    return data.rendered or u''


###############################################################################
# text
###############################################################################

factory.register(
    'text', 
    extractors=[generic_extractor, generic_required_extractor], 
    edit_renderers=[input_generic_renderer],
    display_renderers=[generic_display_renderer])

factory.doc['blueprint']['text'] = \
"""Text input blueprint.
"""

factory.defaults['text.type'] = 'text'
factory.doc['props']['text.type'] = \
"""Type of input tag.
"""

factory.defaults['text.required_class'] = 'required'

factory.defaults['text.default'] = ''
Beispiel #12
0
def time_display_renderer(widget, data):
    format, unit = time_data_defs(widget, data)
    value = data.value
    if not value:
        return u''
    attrs = {
        'id': cssid(widget, 'display'),
        'class_': 'display-{}'.format(attr_value('class', widget, data))
    }
    return data.tag('div', time_value(format, unit, value), **attrs)


factory.register('time',
                 extractors=[
                     generic_extractor, generic_required_extractor,
                     time_extractor, generic_emptyvalue_extractor
                 ],
                 edit_renderers=[time_edit_renderer],
                 display_renderers=[time_display_renderer])

factory.doc['blueprint']['time'] = \
"""Add-on blueprint `yafowil.widget.datetime 
<http://github.com/bluedynamics/yafowil.widget.datetime/>`_ .
"""

factory.defaults['time.default'] = ''

factory.defaults['time.class'] = 'time'

factory.defaults['time.required_class'] = 'required'
    'disable_search',
    'search_contains',
    'single_backstroke_delete',
    'max_selected_options',
    'placeholder_text',
    'no_results_text',
]

@managedprops(*chosen_options)
def chosen_edit_renderer(widget, data):
    custom_attrs = data_attrs_helper(widget, data, chosen_options)
    return select_edit_renderer(widget, data, custom_attrs=custom_attrs)

factory.register(
    'chosen',
    extractors=[select_extractor, generic_required_extractor],
    edit_renderers=[chosen_edit_renderer],
    display_renderers=[select_display_renderer])


factory.doc['blueprint']['chosen'] = \
"""Add-on blueprint `yafowil.widget.chosen
<http://github.com/bluedynamics/yafowil.widget.chosen/>`_ .
"""


factory.defaults['chosen.multivalued'] = False
factory.defaults['chosen.size'] = None
factory.defaults['chosen.default'] = []
factory.defaults['chosen.format'] = 'block'
factory.defaults['chosen.class'] = 'chosen'
Beispiel #14
0
from yafowil.base import factory
from yafowil.utils import cssclasses


def table_renderer(widget, data):
    attrs = {"id": widget.attrs.get("id"), "class_": cssclasses(widget, data)}
    return data.tag("table", data.rendered, **attrs)


factory.register("table", factory.extractors("compound"), factory.renderers("compound") + [table_renderer])


def thead_renderer(widget, data):
    return data.tag("thead", data.rendered)


factory.register("thead", factory.extractors("compound"), factory.renderers("compound") + [thead_renderer])


def tbody_renderer(widget, data):
    return data.tag("tbody", data.rendered)


factory.register("tbody", factory.extractors("compound"), factory.renderers("compound") + [tbody_renderer])


def tr_renderer(widget, data):
    attrs = {"id": widget.attrs.get("id"), "class_": cssclasses(widget, data)}
    return data.tag("tr", data.rendered, **attrs)

            'src': src,
            'alt': attr_value('alt', widget, data),
        }
        return tag('img', **img_attrs)
    return ''


factory.register(
    'image',
    extractors=[
        file_extractor,
        generic_required_extractor,
        mimetype_extractor,
        image_extractor,
        size_extractor,
        dpi_extractor,
        scales_extractor,
        crop_extractor],
    edit_renderers=[
        input_file_edit_renderer,
        file_options_renderer,
        image_edit_renderer],
    display_renderers=[
        image_display_renderer])

factory.doc['blueprint']['image'] = \
"""Add-on widget `yafowil.widget.image 
<http://github.com/bluedynamics/yafowil.widget.image/>`_.
"""

factory.defaults['image.class'] = 'image'
        renderer = select_edit_renderer
        rendered = renderer(widget, data, custom_attrs=custom_attrs)
    return rendered


def select2_display_renderer(widget, data):
    multiple = attr_value('multiple', widget, data)
    multivalued = attr_value('multivalued', widget, data)
    if multiple and not multivalued:
        widget.attrs['multivalued'] = True
    return select_display_renderer(widget, data)


factory.register(
    'select2',
    extractors=[select2_extractor, generic_required_extractor],
    edit_renderers=[select2_edit_renderer],
    display_renderers=[select2_display_renderer])

factory.doc['blueprint']['select2'] = \
"""Add-on blueprint `yafowil.widget.select2 <http://github.com/bluedynamics/yafowil.widget.select2/>`_

`Integrates Select2 Widget <http://ivaynberg.github.io/select2/>`_

`Detailed widget documentation <http://ivaynberg.github.io/select2/#documentation>`_
"""

factory.defaults['select2.size'] = None
factory.defaults['select2.default'] = []
factory.defaults['select2.format'] = 'block'
Beispiel #17
0
    if value != 0:
        active_attrs['checked'] = 'checked'
    active = tag('input', **active_attrs)
    until = tag('label', u'until')
    if value not in [0, UNSET]:
        value = datetime.fromtimestamp(value)
    expires = datetime_display_renderer(widget, data, value)
    if expires:
        expires = until + expires
    return tag('div', active + expires, class_='expiration-widget')


factory.register('expiration',
                 extractors=[
                     generic_extractor, generic_required_extractor,
                     datetime_extractor, expiration_extractor
                 ],
                 edit_renderers=[expiration_edit_renderer],
                 display_renderers=[expiration_display_renderer])


factory.doc['blueprint']['expiration'] = \
"""Add-on blueprint UGM expiration widget. Utilizes yafowil.widget.datetime.
"""

factory.defaults['expiration.class'] = 'expiration form-control'

factory.defaults['expiration.datepicker_class'] = 'datepicker'

factory.defaults['expiration.datepicker'] = True
Beispiel #18
0
###############################################################################
# table
###############################################################################


@managedprops('id', *css_managed_props)
def table_renderer(widget, data):
    attrs = {
        'id': attr_value('id', widget, data),
        'class_': cssclasses(widget, data),
    }
    return data.tag('table', data.rendered, **attrs)


factory.register('table',
                 extractors=[compound_extractor],
                 edit_renderers=[compound_renderer, table_renderer],
                 display_renderers=[compound_renderer, table_renderer])

factory.doc['blueprint']['table'] = """\
``<table>`` compound widget for table creation.
"""

factory.doc['props']['table.id'] = """\
Value of table id attribute.
"""

###############################################################################
# thead
###############################################################################

Beispiel #19
0
    value = fetch_value(widget, data)
    if value in [UNSET, u'', None]:
        value = u''
    else:
        value = value[1]
    attrs = {
        'id': cssid(widget, 'display'),
        'class_': 'display-{}'.format(widget.attrs['class'] or 'generic')
    }
    return data.tag('div', value, **attrs)


factory.register('reference',
                 extractors=[
                     generic_extractor, generic_required_extractor,
                     reference_extractor
                 ],
                 edit_renderers=[reference_edit_renderer],
                 display_renderers=[reference_display_renderer])

factory.defaults['reference.required_class'] = 'required'

factory.defaults['reference.default'] = ''

factory.defaults['reference.format'] = 'block'

factory.defaults['reference.class'] = 'referencebrowser'

factory.defaults['reference.multivalued'] = False

factory.defaults['reference.root'] = '/'
Beispiel #20
0
@managedprops('id', *css_managed_props)
def table_renderer(widget, data):
    attrs = {
        'id': attr_value('id', widget, data),
        'class_': cssclasses(widget, data),
    }
    return data.tag('table', data.rendered, **attrs)


factory.register(
    'table',
    extractors=[compound_extractor],
    edit_renderers=[
        compound_renderer,
        table_renderer
    ],
    display_renderers=[
        compound_renderer,
        table_renderer
    ])

factory.doc['blueprint']['table'] = """\
``<table>`` compound widget for table creation.
"""

factory.doc['props']['table.id'] = """\
Value of table id attribute.
"""

Beispiel #21
0
    managedprops,
)


@managedprops('id', *css_managed_props)
def table_renderer(widget, data):
    attrs = {
        'id': widget.attrs.get('id'),
        'class_': cssclasses(widget, data),
    }
    return data.tag('table', data.rendered, **attrs)


factory.register(
    'table',
    extractors=factory.extractors('compound'),
    edit_renderers=factory.edit_renderers('compound') + [table_renderer],
    display_renderers=factory.display_renderers('compound') + [table_renderer])

factory.doc['blueprint']['table'] = """\
``<table>`` compound widget for table creation.
"""


def thead_renderer(widget, data):
    return data.tag('thead', data.rendered)


factory.register(
    'thead',
    extractors=factory.extractors('compound'),
Beispiel #22
0
                value = value(widget, data)
            if value is not UNSET and childname in value:
                if child.getter is UNSET:
                    child.getter = value[childname]
                else:
                    raise ValueError(u"Both compound and compound member "
                                     u"provide a value for '%s'" % childname)
        if subdata is None:
            result += child(request=data.request)
        else:
            result += child(data=subdata)
    return result


factory.register('compound',
                 extractors=[compound_extractor],
                 edit_renderers=[compound_renderer],
                 display_renderers=[compound_renderer])

factory.doc['blueprint']['compound'] = """\
A blueprint to create a compound of widgets. This blueprint creates a node. A
node can contain sub-widgets.
"""

factory.defaults['structural'] = False
factory.doc['props']['structural'] = """\
If a compound is structural, it will be omitted in the dotted-path levels and 
will not have an own runtime-data. 
"""


def hybrid_extractor(widget, data):
    result += tag('div', '|'.join(params), 
                  **{'class': 'dynatree-params hiddenStructure'})
    result += tag('div', **{'class': 'yafowil-widget-dynatree-tree'})
    return tag('div', result, **{'class': 'yafowil-widget-dynatree'})

def dynatree_extractor(widget, data):
    if data.extracted is UNSET:
        return data.extracted
    if widget.attrs['selectMode'] == 1:
        return data.extracted.strip('|')
    value = [_ for _ in data.extracted.split('|')if _]
    return value

factory.register('dynatree', 
                 [generic_extractor, 
                  generic_required_extractor,
                  dynatree_extractor], 
                 [dynatree_renderer])

factory.document['dynatree'] = """\
    A tree-widget utilizing the jQuery plugin `jquery.dynatree.js 
    <http://wwwendt.de/tech/dynatree/index.html>`_ (at 
    `google-code <http://code.google.com/p/dynatree/>`_).
"""

factory.document['dynatree.source'] = """\
    The vocabulary source. This can be either [o]dict, string or a a callable
    returning one of both. 
    
    If a dict is passed or returned by the callable, the vocabulary is rendered 
    inline. The dict keys are used as values, dicts value is a tuple of (title, 
Beispiel #24
0
            childdata = child.extract(data.request, parent=data)
    return

def compound_renderer(widget, data):
    """Delegates rendering to children."""
    result = u''
    for childname in widget:
        subdata = data.get(childname, None)
        if subdata is None:
            result += widget[childname](request=data.request)
        else:
            result += widget[childname](data=subdata)
    return result

factory.register('compound', 
                 [compound_extractor], 
                 [compound_renderer],
                 [])

def fieldset_renderer(widget, data):
    fs_attrs = {
        'id': cssid(widget, 'fieldset'),
        'class_': cssclasses(widget, data)
    }
    rendered = data.rendered
    if widget.attrs['legend']:
        rendered = data.tag('legend', widget.attrs['legend']) + rendered
    return data.tag('fieldset', rendered, **fs_attrs)   

factory.defaults['fieldset.legend'] = False
factory.defaults['fieldset.class'] = []
factory.register('fieldset', 
    for key in data_keys:
        if key in js_options:
            raise ValueError(u"Additional data dict contains reserved "
                             u"attribute name '%s'" % key)
        wrapper_attrs['data-%s' % key] = html_data[key]
    return data.tag('div', content, **wrapper_attrs)


def slider_display_renderer(widget, data):
    raise NotImplementedError(u"``yafowil.widget.slider`` does not support "
                              u"display mode yet")


factory.register(
    'slider',
    extractors=[slider_extractor],
    edit_renderers=[slider_edit_renderer],
    display_renderers=[slider_display_renderer])

factory.doc['blueprint']['slider'] = \
"""Add-on blueprint `yafowil.widget.slider
<http://github.com/bluedynamics/yafowil.widget.slider/>`_ .
"""

factory.defaults['slider.default'] = ''

factory.defaults['slider.class'] = 'yafowil_slider'

factory.defaults['slider.show_value'] = False
factory.doc['props']['slider.show_value'] = \
"""Show value in addition to slider.
Beispiel #26
0
from yafowil.base import fetch_value
from yafowil.common import generic_extractor
from yafowil.common import generic_required_extractor
from yafowil.common import textarea_renderer


def richtext_display_renderer(widget, data):
    value = fetch_value(widget, data)
    if not value:
        value = ''
    return data.tag('div', value, **{'class': 'display-richtext'})


factory.register(
    'richtext',
    extractors=[generic_extractor, generic_required_extractor],
    edit_renderers=[textarea_renderer],
    display_renderers=[richtext_display_renderer])

factory.doc['blueprint']['richtext'] = \
"""Add-on blueprint `yafowil.widget.richtext 
<http://github.com/bluedynamics/yafowil.widget.richtext/>`_ .
"""

factory.defaults['richtext.default'] = ''

factory.defaults['richtext.wrap'] = None
factory.doc['props']['richtext.wrap'] = \
"""Either ``soft``, ``hard``, ``virtual``, ``physical`` or  ``off``.
"""
        'class': ' '.join([cssclasses(widget, data)]),
    }
    data_attrs = ['theme', 'lang', 'public_key']
    recaptcha_attrs.update(data_attrs_helper(widget, data, data_attrs))
    recaptcha = data.tag('div', ' ', **recaptcha_attrs)
    public_key = attr_value('public_key', widget, data)
    return recaptcha + NO_SCRIPT_TEMPLATE.format(public_key=public_key)


def recaptcha_display_renderer(widget, data):
    pass


factory.register(
    'recaptcha',
    extractors=[recaptcha_extractor, generic_extractor],
    edit_renderers=[recaptcha_edit_renderer],
    display_renderers=[recaptcha_display_renderer])

factory.doc['blueprint']['recaptcha'] = \
"""Add-on blueprint
`yafowil.widget.recaptcha <http://github.com/bluedynamics/yafowil.widget.recaptcha/>`_
"""

factory.defaults['recaptcha.class'] = 'recaptcha'

factory.defaults['recaptcha.error_class'] = 'error'

factory.defaults['recaptcha.message_class'] = 'errormessage'

factory.defaults['recaptcha.public_key'] = ''
Beispiel #28
0
        'value':  fetch_value(widget, data),
        'name_': widget.dottedpath,
        'id': cssid(widget, 'input'),    
        'class_': cssclasses(widget, data),    
    }
    return data.tag('input', **hidden_attrs)

def mode_renderer(widget, data):
    tag = data.tag
    mode = widget.attrs['mode']
    if not isinstance(mode, basestring):
        mode = mode(widget, data)
    ren = widget.attrs.get(mode)
    if ren:
        return ren(widget, data)
    value = data.value
    if isinstance(value, bool):
        value = widget.attrs['showbool'][value and 1 or 0]
    if isinstance(value, basestring):
        return tag('div', value)
    items = [tag('li', item) for item in value]
    return tag('ul', *items)

factory.defaults['mode.mode'] = 'edit'
factory.defaults['mode.edit'] = edit_renderer
factory.defaults['mode.none'] = none_renderer
factory.defaults['mode.hidden'] = hidden_renderer
factory.defaults['mode.display'] = None
factory.defaults['mode.showbool'] = ('False', 'True')
factory.register('mode', [], [mode_renderer])
Beispiel #29
0
                                         ['ajaxurl'] + select2_options)
        renderer = select_edit_renderer
        rendered = renderer(widget, data, custom_attrs=custom_attrs)
    return rendered


def select2_display_renderer(widget, data):
    multiple = attr_value('multiple', widget, data)
    multivalued = attr_value('multivalued', widget, data)
    if multiple and not multivalued:
        widget.attrs['multivalued'] = True
    return select_display_renderer(widget, data)


factory.register('select2',
                 extractors=[select2_extractor, generic_required_extractor],
                 edit_renderers=[select2_edit_renderer],
                 display_renderers=[select2_display_renderer])

factory.doc['blueprint']['select2'] = """\
Add-on blueprint
`yafowil.widget.select2 <http://github.com/bluedynamics/yafowil.widget.select2/>`_

`Integrates Select2 Widget <http://ivaynberg.github.io/select2/>`_

`Detailed widget documentation <http://ivaynberg.github.io/select2/#documentation>`_
"""

factory.defaults['select2.size'] = None
factory.defaults['select2.default'] = []
factory.defaults['select2.format'] = 'block'
Beispiel #30
0
def actions_renderer(widget, data):
    tag = data.tag
    actions = list()
    for key in ['add', 'remove', 'up', 'down']:
        if widget.attrs.get(key):
            class_ = 'dict_row_%s' % key
            icon = tag('span', ' ', class_=ICON_CSS[key])
            action = tag('a', icon, href='#', class_=class_)
            actions.append(action)
    kw = dict(class_='dict_actions')
    return tag('div', *actions, **kw)


factory.register(
    'dict_actions',
    edit_renderers=[actions_renderer])

factory.doc['blueprint']['dict_actions'] = UNSET # dont document internal widget


@managedprops('static', 'table_class', *css_managed_props)
def dict_builder(widget, factory):
    table_classes = [widget.attrs['table_class'],
                     'key-{0}'.format(widget.attrs['key_class']),
                     'value-{0}'.format(widget.attrs['value_class'])]
    table = widget['table'] = factory('table', props={
        'structural': True,
        'class': ' '.join(table_classes),
    })
    head = table['head'] = factory('thead', props={
Beispiel #31
0
@managedprops('format', 'unit', 'class')
def time_display_renderer(widget, data):
    format, unit = time_data_defs(widget, data)
    value = data.value
    if not value:
        return u''
    attrs = {
        'id': cssid(widget, 'display'),
        'class_': 'display-%s' % attr_value('class', widget, data)
    }
    return data.tag('div', time_value(format, unit, value), **attrs)


factory.register(
    'time',
    extractors=[generic_extractor, generic_required_extractor,
                time_extractor],
    edit_renderers=[time_edit_renderer],
    display_renderers=[time_display_renderer])

factory.doc['blueprint']['time'] = \
"""Add-on blueprint `yafowil.widget.datetime 
<http://github.com/bluedynamics/yafowil.widget.datetime/>`_ .
"""

factory.defaults['time.default'] = ''

factory.defaults['time.class'] = 'time'

factory.defaults['time.required_class'] = 'required'

factory.defaults['time.timepicker_class'] = 'timepicker'
    attrs = input_attributes_common(widget, data)
    attrs.update({'data-source-type': source_type,
                  'data-source': source,
                  'data-delay': widget.attrs['delay'],
                  'data-minLength': widget.attrs['minLength']
                 })
    attrs['type'] = 'text'
    return tag('input', **attrs)


def autosuggest_extractor(widget, data):
    return data.extracted


factory.register(
    'autosuggest',
    extractors=[generic_extractor, autosuggest_extractor],
    edit_renderers=[autosuggest_renderer])

factory.doc['blueprint']['autosuggest'] = \
"""Add-on blueprint `yafowil.widget.autosuggest
<http://github.com/bluedynamics/yafowil.widget.autosuggest/>`_ utilizing
`jquery autosuggest <https://github.com/wuyuntao/jquery-autosuggest/>`_ to
offer the user a selection based on the input given so far.
"""

factory.defaults['autosuggest.class'] = 'autosuggest'
factory.defaults['autosuggest.type'] = 'text'
factory.defaults['autosuggest.required_class'] = 'required'
factory.defaults['autosuggest.delay'] = '300' #ms
factory.defaults['autosuggest.minLength'] = '1' #characters
factory.defaults['autosuggest.disabled'] = False
    elif data.value is not UNSET and data.value is not None:
        value = data.value
    text_attrs = {
        'type': 'text',
        'value': value[1],
        'name_': widget.dottedpath,
        'id': cssid(widget, 'input'),
        'class_': cssclasses(widget, data),    
    }
    hidden_attrs = {
        'type': 'hidden',
        'value': value[0],
        'name_': '%s.uid' % widget.dottedpath,
    }
    return tag('input', **text_attrs) + tag('input', **hidden_attrs)

factory.defaults['reference.required_class'] = 'required'
factory.defaults['reference.default'] = ''
factory.defaults['reference.format'] = 'block'
factory.defaults['reference.class'] = 'referencebrowser'
factory.register(
    'reference', 
    [
        generic_extractor,
        generic_required_extractor,
        reference_extractor,
    ], 
    [
        reference_renderer,
    ],
)
Beispiel #34
0
        return select_display_renderer(widget, data)
    value = fetch_value(widget, data)
    if value in [UNSET, u'', None]:
        value = u''
    else:
        value = value[1]
    attrs = {
        'id': cssid(widget, 'display'),
        'class_': 'display-%s' % widget.attrs['class'] or 'generic'
    }
    return data.tag('div', value, **attrs)


factory.register(
    'reference',
    extractors=[generic_extractor, generic_required_extractor,
                reference_extractor],
    edit_renderers=[reference_edit_renderer],
    display_renderers=[reference_display_renderer])

factory.defaults['reference.required_class'] = 'required'

factory.defaults['reference.default'] = ''

factory.defaults['reference.format'] = 'block'

factory.defaults['reference.class'] = 'referencebrowser'

factory.defaults['reference.multivalued'] = False

factory.defaults['reference.root'] = '/'
Beispiel #35
0
    """B/C. Use ``display_proxy`` widget attribute.
    """
    input_attrs = {
        'type': 'hidden',
        'value': fetch_value(widget, data),
        'name_': widget.dottedpath,
        'id': cssid(widget, 'input'),
        'class_': cssclasses(widget, data),
        'required': attr_value('required', widget, data) and 'required' or None
    }
    return data.tag('input', **input_attrs) + data.rendered


factory.register(
     'array_display_proxy',
     extractors=[generic_extractor],
     edit_renderers=[array_display_proxy_renderer],
     display_renderers=[array_display_proxy_renderer])

# do not document internal widget
factory.doc['blueprint']['array_display_proxy'] = UNSET


ICON_CSS = {
    'add': 'icon-plus-sign',
    'remove': 'icon-minus-sign',
    'up': 'icon-circle-arrow-up',
    'down': 'icon-circle-arrow-down',
}

def actions_renderer(widget, data):
Beispiel #36
0
    return tag('div', result, **{'class': 'yafowil-widget-dynatree'})


@managedprops('selectMode')
def dynatree_extractor(widget, data):
    if data.extracted is UNSET:
        return data.extracted
    if attr_value('selectMode', widget, data) == 1:
        return data.extracted.strip('|')
    value = [_ for _ in data.extracted.split('|')if _]
    return value


factory.register(
    'dynatree', 
    extractors=[generic_extractor, generic_required_extractor,
                dynatree_extractor], 
    edit_renderers=[dynatree_renderer])

factory.doc['blueprint']['dynatree'] = \
"""Add-on tree-widget `yafowil.widget.dynatree 
<http://pypi.python.org/pypi/yafowil.widget.dynatree>`_ utilizing the jQuery 
plugin `jquery.dynatree.js <http://wwwendt.de/tech/dynatree/index.html>`_ (at 
`google-code <http://code.google.com/p/dynatree/>`_).

Additional this widget triggers the javascript event ``yafowilDynatreeSelect`` 
via jQuery on elements with class ``dynatreeSelectSensitive``.   
"""

factory.doc['props']['dynatree.source'] = \
"""The vocabulary source. This can be either [o]dict, string or a a callable
def actions_renderer(widget, data):
    tag = data.tag
    actions = list()
    for key in ['add', 'remove', 'up', 'down']:
        if widget.attrs.get(key):
            class_ = 'dict_row_{}'.format(key)
            icon = tag('span', ' ', class_=ICON_CSS[key])
            action = tag('a', icon, href='#', class_=class_)
            actions.append(action)
    kw = dict(class_='dict_actions')
    return tag('div', *actions, **kw)


factory.register(
    'dict_actions',
    edit_renderers=[
        actions_renderer
    ]
)

factory.doc['blueprint']['dict_actions'] = UNSET  # dont document internal widget


def dict_label(widget, data, name, bc_name):
    label = attr_value(name, widget, data)
    if not label:  # B/C
        label = callable_value(
            attr_value('head', widget, data, default={}).get(bc_name, ' '),
            widget,
            data
        )
    return label
Beispiel #38
0
from yafowil.utils import cssclasses
from yafowil.utils import cssid
from yafowil.utils import EMPTY_VALUE
from yafowil.utils import managedprops

_ = TSF('yafowil.widget.cron')


def cron_value_edit_action_renderer(widget, data):
    """Renders cron value edit button.
    """
    return data.rendered + data.tag(
        'button', attr_value('label', widget, data), class_='btn btn-sm edit')


factory.register('cron_value_edit_action',
                 edit_renderers=[cron_value_edit_action_renderer])
# don't document internal widget
factory.doc['blueprint']['cron_value_edit_action'] = UNSET


@managedprops('emptyvalue')
def cron_extractor(widget, data):
    # instanciate subwidgets
    widget()
    # extract subwidgets
    compound_extractor(widget, data)
    minute = data['minute']
    # if one subwidget is UNSET, whole widget not found on request
    if minute.extracted is UNSET:
        return UNSET
    minute = data['minute'].extracted
Beispiel #39
0
            if value is not UNSET and childname in value:
                if child.getter is UNSET:
                    child.getter = value[childname]
                else:
                    raise ValueError(u"Both compound and compound member "
                                     u"provide a value for '%s'" % childname)
        if subdata is None:
            result += child(request=data.request)
        else:
            result += child(data=subdata)
    return result


factory.register(
    'compound', 
    extractors=[compound_extractor], 
    edit_renderers=[compound_renderer],
    display_renderers=[compound_renderer])

factory.doc['blueprint']['compound'] = """\
A blueprint to create a compound of widgets. This blueprint creates a node. A
node can contain sub-widgets.
"""

factory.defaults['structural'] = False
factory.doc['props']['structural'] = """\
If a compound is structural, it will be omitted in the dotted-path levels and 
will not have an own runtime-data. 
"""

    return tag('div', result, **{'class': 'yafowil-widget-dynatree'})


@managedprops('selectMode')
def dynatree_extractor(widget, data):
    if data.extracted is UNSET:
        return data.extracted
    if attr_value('selectMode', widget, data) == 1:
        return data.extracted.strip('|')
    value = [_ for _ in data.extracted.split('|') if _]
    return value


factory.register('dynatree',
                 extractors=[
                     generic_extractor, generic_required_extractor,
                     dynatree_extractor
                 ],
                 edit_renderers=[dynatree_renderer])

factory.doc['blueprint']['dynatree'] = \
"""Add-on tree-widget `yafowil.widget.dynatree 
<http://pypi.python.org/pypi/yafowil.widget.dynatree>`_ utilizing the jQuery 
plugin `jquery.dynatree.js <http://wwwendt.de/tech/dynatree/index.html>`_ (at 
`google-code <http://code.google.com/p/dynatree/>`_).

Additional this widget triggers the javascript event ``yafowilDynatreeSelect`` 
via jQuery on elements with class ``dynatreeSelectSensitive``.   
"""

factory.doc['props']['dynatree.source'] = \
"""The vocabulary source. This can be either [o]dict, string or a a callable