From d362b92bda179afd5103a875e8bc624ff804f790 Mon Sep 17 00:00:00 2001 From: Thomas NOEL Date: Fri, 8 Jan 2016 21:00:56 +0100 Subject: [PATCH] Prefill widget: use new dynamic-display js possibility (#9559) --- wcs/fields.py | 86 +++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 38 deletions(-) diff --git a/wcs/fields.py b/wcs/fields.py index 6f31a37..b1cd313 100644 --- a/wcs/fields.py +++ b/wcs/fields.py @@ -19,6 +19,7 @@ import random import re import base64 import xml.etree.ElementTree as ET +import collections from quixote import get_request, get_publisher from quixote.html import htmltext, TemplateIO @@ -49,57 +50,66 @@ class PrefillSelectionWidget(CompositeWidget): if kwargs.get('map'): options = [('none', _('None')), ('geolocation', _('Geolocation')),] - self.add(SingleSelectWidget, 'type', options = options, value = value.get('type')) + self.add(SingleSelectWidget, 'type', options=options, value=value.get('type'), + attrs={'data-dynamic-display-parent': 'true'}) self.parse() if not self.value: self.value = {} - if self.value.get('type') in ('string', 'formula'): - self.add(StringWidget, 'value', value = value.get('value'), size=80) - elif self.value.get('type') == 'user': - formdef = get_publisher().user_class.get_formdef() - users_cfg = get_cfg('users', {}) - if formdef: - user_fields = [] - for field in formdef.fields: - if field.label in [x[1] for x in user_fields]: - # do not allow duplicated field names - continue - user_fields.append((field.id, field.label)) - if not users_cfg.get('field_email'): - user_fields.append(('email', _('Email (builtin)'))) - else: - user_fields = [('name', _('Name')), ('email', _('Email'))] + prefill_types = collections.OrderedDict(options) + self.add(StringWidget, 'value_string', value = value.get('value'), size=80, + attrs={'data-dynamic-display-child-of': 'prefill$type', + 'data-dynamic-display-value': prefill_types.get('string')}) + self.add(StringWidget, 'value_formula', value = value.get('value'), size=80, + attrs={'data-dynamic-display-child-of': 'prefill$type', + 'data-dynamic-display-value': prefill_types.get('formula')}) + + formdef = get_publisher().user_class.get_formdef() + users_cfg = get_cfg('users', {}) + if formdef: + user_fields = [] + for field in formdef.fields: + if field.label in [x[1] for x in user_fields]: + # do not allow duplicated field names + continue + user_fields.append((field.id, field.label)) + if not users_cfg.get('field_email'): + user_fields.append(('email', _('Email (builtin)'))) + else: + user_fields = [('name', _('Name')), ('email', _('Email'))] + self.add(SingleSelectWidget, 'value_user', value = value.get('value'), + options = user_fields, + attrs={'data-dynamic-display-child-of': 'prefill$type', + 'data-dynamic-display-value': prefill_types.get('user')}) - self.add(SingleSelectWidget, 'value', value = value.get('value'), - options = user_fields) - elif self.value.get('type') == 'geolocation': - if kwargs.get('map'): - geoloc_fields = [('position', _('Position'))] - else: - geoloc_fields = [ - ('house', _('Number')), - ('road', _('Street')), - ('number-and-street', _('Number and street')), - ('postcode', _('Post Code')), - ('city', _('City')), - ('country', _('Country')), - ] - self.add(SingleSelectWidget, 'value', value=value.get('value'), - options=geoloc_fields) - - self.add(SubmitWidget, 'apply', value = _('Apply')) + if kwargs.get('map'): + geoloc_fields = [('position', _('Position'))] + else: + geoloc_fields = [ + ('house', _('Number')), + ('road', _('Street')), + ('number-and-street', _('Number and street')), + ('postcode', _('Post Code')), + ('city', _('City')), + ('country', _('Country')), + ] + self.add(SingleSelectWidget, 'value_geolocation', value=value.get('value'), + options=geoloc_fields, + attrs={'data-dynamic-display-child-of': 'prefill$type', + 'data-dynamic-display-value': prefill_types.get('geolocation')}) self._parsed = False def _parse(self, request): values = {} - for name in ('type', 'value'): - value = self.get(name) + type_ = self.get('type') + if type_: + values['type'] = type_ + value = self.get('value_%s' % type_) if value: - values[name] = value + values['value'] = value self.value = values or None if values and values['type'] == 'formula' and values.get('value'): try: -- 2.6.4