Projet

Général

Profil

0001-Prefill-widget-use-new-dynamic-display-js-possibilit.patch

Thomas Noël, 08 janvier 2016 21:07

Télécharger (5,47 ko)

Voir les différences:

Subject: [PATCH] Prefill widget: use new dynamic-display js possibility
 (#9559)

 wcs/fields.py | 86 +++++++++++++++++++++++++++++++++--------------------------
 1 file changed, 48 insertions(+), 38 deletions(-)
wcs/fields.py
19 19
import re
20 20
import base64
21 21
import xml.etree.ElementTree as ET
22
import collections
22 23

  
23 24
from quixote import get_request, get_publisher
24 25
from quixote.html import htmltext, TemplateIO
......
49 50
        if kwargs.get('map'):
50 51
            options = [('none', _('None')), ('geolocation', _('Geolocation')),]
51 52

  
52
        self.add(SingleSelectWidget, 'type', options = options, value = value.get('type'))
53
        self.add(SingleSelectWidget, 'type', options=options, value=value.get('type'),
54
                 attrs={'data-dynamic-display-parent': 'true'})
53 55

  
54 56
        self.parse()
55 57
        if not self.value:
56 58
            self.value = {}
57 59

  
58
        if self.value.get('type') in ('string', 'formula'):
59
            self.add(StringWidget, 'value', value = value.get('value'), size=80)
60
        elif self.value.get('type') == 'user':
61
            formdef = get_publisher().user_class.get_formdef()
62
            users_cfg = get_cfg('users', {})
63
            if formdef:
64
                user_fields = []
65
                for field in formdef.fields:
66
                    if field.label in [x[1] for x in user_fields]:
67
                        # do not allow duplicated field names
68
                        continue
69
                    user_fields.append((field.id, field.label))
70
                if not users_cfg.get('field_email'):
71
                    user_fields.append(('email', _('Email (builtin)')))
72
            else:
73
                user_fields = [('name', _('Name')), ('email', _('Email'))]
60
        prefill_types = collections.OrderedDict(options)
61
        self.add(StringWidget, 'value_string', value = value.get('value'), size=80,
62
                 attrs={'data-dynamic-display-child-of': 'prefill$type',
63
                        'data-dynamic-display-value': prefill_types.get('string')})
64
        self.add(StringWidget, 'value_formula', value = value.get('value'), size=80,
65
                 attrs={'data-dynamic-display-child-of': 'prefill$type',
66
                        'data-dynamic-display-value': prefill_types.get('formula')})
67

  
68
        formdef = get_publisher().user_class.get_formdef()
69
        users_cfg = get_cfg('users', {})
70
        if formdef:
71
            user_fields = []
72
            for field in formdef.fields:
73
                if field.label in [x[1] for x in user_fields]:
74
                    # do not allow duplicated field names
75
                    continue
76
                user_fields.append((field.id, field.label))
77
            if not users_cfg.get('field_email'):
78
                user_fields.append(('email', _('Email (builtin)')))
79
        else:
80
            user_fields = [('name', _('Name')), ('email', _('Email'))]
81
        self.add(SingleSelectWidget, 'value_user', value = value.get('value'),
82
                 options = user_fields,
83
                 attrs={'data-dynamic-display-child-of': 'prefill$type',
84
                        'data-dynamic-display-value': prefill_types.get('user')})
74 85

  
75
            self.add(SingleSelectWidget, 'value', value = value.get('value'),
76
                    options = user_fields)
77
        elif self.value.get('type') == 'geolocation':
78
            if kwargs.get('map'):
79
                geoloc_fields = [('position', _('Position'))]
80
            else:
81
                geoloc_fields = [
82
                    ('house', _('Number')),
83
                    ('road', _('Street')),
84
                    ('number-and-street', _('Number and street')),
85
                    ('postcode', _('Post Code')),
86
                    ('city', _('City')),
87
                    ('country', _('Country')),
88
                    ]
89
            self.add(SingleSelectWidget, 'value', value=value.get('value'),
90
                    options=geoloc_fields)
91

  
92
        self.add(SubmitWidget, 'apply', value = _('Apply'))
86
        if kwargs.get('map'):
87
            geoloc_fields = [('position', _('Position'))]
88
        else:
89
            geoloc_fields = [
90
                ('house', _('Number')),
91
                ('road', _('Street')),
92
                ('number-and-street', _('Number and street')),
93
                ('postcode', _('Post Code')),
94
                ('city', _('City')),
95
                ('country', _('Country')),
96
            ]
97
        self.add(SingleSelectWidget, 'value_geolocation', value=value.get('value'),
98
                 options=geoloc_fields,
99
                 attrs={'data-dynamic-display-child-of': 'prefill$type',
100
                        'data-dynamic-display-value': prefill_types.get('geolocation')})
93 101

  
94 102
        self._parsed = False
95 103

  
96 104

  
97 105
    def _parse(self, request):
98 106
        values = {}
99
        for name in ('type', 'value'):
100
            value = self.get(name)
107
        type_ = self.get('type')
108
        if type_:
109
            values['type'] = type_
110
            value = self.get('value_%s' % type_)
101 111
            if value:
102
                values[name] = value
112
                values['value'] = value
103 113
        self.value = values or None
104 114
        if values and values['type'] == 'formula' and values.get('value'):
105 115
            try:
106
-