} 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'] = ''
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.
'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``. """
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. """
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'
' ', 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.
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'] = ''
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'
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'
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
############################################################################### # 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 ###############################################################################
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'] = '/'
@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. """
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'),
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,
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.
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'] = ''
'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])
['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'
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={
@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, ], )
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'] = '/'
"""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):
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
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
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