Projet

Général

Profil

0001-general-adjust-media-support-in-all-widgets-25113.patch

Frédéric Péters, 06 juillet 2018 12:52

Télécharger (8,28 ko)

Voir les différences:

Subject: [PATCH] general: adjust media support in all widgets (#25113)

 tests/test_form_pages.py |  2 ++
 wcs/compat.py            |  6 +-----
 wcs/qommon/form.py       | 35 +++++++++++++++++++++--------------
 wcs/qommon/template.py   |  7 +++++++
 wcs/views.py             |  1 +
 5 files changed, 32 insertions(+), 19 deletions(-)
tests/test_form_pages.py
3530 3530
    resp = resp.form.submit('submit') # next
3531 3531
    # test javascript will be used to compute the full URL
3532 3532
    assert 'options.wcs_base_url' in resp.body
3533
    assert 'jquery-ui.min.js' in resp.body
3533 3534

  
3534 3535
    # test going forward (will error out), check it's still a variadic URL (#9786)
3535 3536
    resp.form['f1'] = 'Foo'
......
3618 3619

  
3619 3620
    resp = get_app(pub).get('/test/')
3620 3621
    assert 'url: "http://remote.example.net/jsonp"' in resp.body
3622
    assert 'select2.min.js' in resp.body
3621 3623

  
3622 3624
    formdef.fields = [
3623 3625
            fields.ItemField(id='1', label='string', type='item',
wcs/compat.py
174 174
                template_response)
175 175

  
176 176
    def render_template(self, request, response, template_response):
177
        if 'form' in template_response.context:
178
            # run add_media on all widgets so we get them in the page <head>
179
            for widget in template_response.context['form'].get_all_widgets():
180
                if hasattr(widget, 'add_media'):
181
                    widget.add_media()
177
        template_response.add_media()
182 178
        context = template.get_decorate_vars(
183 179
                template_response.context.get('body'),
184 180
                response,
wcs/qommon/form.py
945 945
                self.error = _('invalid date; date must be on or before %s') % strftime(
946 946
                        misc.date_format(), datetime.datetime(*self.maximum_date[:6]))
947 947

  
948
    def add_media(self):
949
        self.prepare_javascript()
950

  
948 951
    @classmethod
949 952
    def prepare_javascript(cls):
950 953
        get_response().add_javascript([
......
962 965
        if self.attrs.get('readonly'):
963 966
            return StringWidget.render_content(self)
964 967

  
965
        self.prepare_javascript()
966

  
967 968
        date_format = self.get_format_string().replace('%Y', 'yyyy').replace(
968 969
                '%m', 'mm').replace('%d', 'dd').replace('%H', 'hh').replace(
969 970
                '%M',  'ii').replace('%S', 'ss')
......
1252 1253
                element_kwargs=element_kwargs,
1253 1254
                add_element_label=add_element_label, **kwargs)
1254 1255

  
1256
    def add_media(self):
1257
        get_response().add_javascript(['jquery.js', 'widget_list.js'])
1255 1258

  
1256 1259
    def render(self):
1257
        get_response().add_javascript(['jquery.js', 'widget_list.js'])
1258 1260
        r = TemplateIO(html=True)
1259 1261
        if self.attrs:
1260 1262
            r += htmltag('div', **self.attrs)
......
1334 1336
        if self.value is not None:
1335 1337
            self.value = [x.strip() for x in self.value.split(',') if x.strip()]
1336 1338

  
1337
    def render_content(self):
1338
        r = TemplateIO(html=True)
1339
    def add_media(self):
1339 1340
        get_response().add_javascript(['jquery.js', 'jquery.autocomplete.js'])
1340 1341
        get_response().add_css_include('../js/jquery.autocomplete.css')
1342

  
1343
    def render_content(self):
1344
        r = TemplateIO(html=True)
1341 1345
        id = 'tags-%s' % randbytes(8)
1342 1346
        if self.value:
1343 1347
            value = ', '.join(self.value) + ', '
......
1371 1375
            if self.value.endswith('<br />'):
1372 1376
                self.value = self.value[:-6]
1373 1377

  
1374
    def render_content(self):
1378
    def add_media(self):
1375 1379
        get_response().add_javascript(['jquery.js', 'ckeditor/ckeditor.js',
1376 1380
            'qommon.wysiwyg.js', 'ckeditor/adapters/jquery.js'])
1377 1381

  
1382
    def render_content(self):
1378 1383
        attrs = self.attrs.copy()
1379

  
1380 1384
        return (htmltag('textarea', name=self.name, **attrs) +
1381 1385
                htmlescape(self.value or '') +
1382 1386
                htmltext("</textarea>"))
......
1763 1767
        Widget.__init__(self, name, value=value, **kwargs)
1764 1768
        self.url = url
1765 1769

  
1770
    def add_media(self):
1771
        get_response().add_javascript(['jquery.js', 'select2.js'])
1772
        get_response().add_css_include('../js/select2/select2.css')
1773

  
1766 1774
    def render_content(self):
1767 1775
        if self.value is None:
1768 1776
            value = None
......
1782 1790
        r += htmltag('input', xml_end=True, type="hidden", name=self.name + '_display', **attrs)
1783 1791
        initial_display_value = attrs.get('value')
1784 1792

  
1785
        get_response().add_javascript(['jquery.js', 'select2.js'])
1786
        get_response().add_css_include('../js/select2/select2.css')
1787

  
1788 1793
        # init select2 widget
1789 1794
        allowclear = ""
1790 1795
        if not self.required:
......
1914 1919
        if kwargs.get('url'):
1915 1920
            self.url = kwargs.get('url')
1916 1921

  
1917
    def render_content(self):
1922
    def add_media(self):
1918 1923
        get_response().add_javascript(['jquery.js', 'jquery-ui.js'])
1919 1924

  
1925
    def render_content(self):
1920 1926
        if Template.is_template_string(self.url):
1921 1927
            vars = get_publisher().substitutions.get_context_variables()
1922 1928
            # skip variables that were not set (None)
......
2004 2010
        SelectWidget.__init__(self, options=colours, *args, **kwargs)
2005 2011
        self.attrs['class'] = 'colour-picker'
2006 2012

  
2007
    def render_content(self):
2013
    def add_media(self):
2008 2014
        get_response().add_javascript(['jquery.js', 'jquery.colourpicker.js'])
2009
        return SingleSelectWidget.render_content(self)
2010 2015

  
2011 2016
    def _parse(self, request):
2012 2017
        SingleSelectWidget._parse(self, request)
......
2059 2064
                    '<input type="hidden" name="%s$encoded" value="%s"></input>' % (
2060 2065
                        fake_value, self.name, encoded_value)))
2061 2066

  
2067
    def add_media(self):
2068
        get_response().add_javascript(['jquery.js', 'jquery.passstrength.js'])
2069

  
2062 2070
    def render_content(self):
2063 2071
        if self.attrs.get('readonly') or not self.strength_indicator:
2064 2072
            return CompositeWidget.render_content(self)
2065
        get_response().add_javascript(['jquery.js', 'jquery.passstrength.js'])
2066 2073
        r = TemplateIO(html=True)
2067 2074
        r += CompositeWidget.render_content(self)
2068 2075
        r += htmltext('''<script>
wcs/qommon/template.py
423 423
        self.templates = templates
424 424
        self.context = context
425 425

  
426
    def add_media(self):
427
        if 'form' in self.context:
428
            # run add_media on all widgets so we get them in the page <head>
429
            for widget in self.context['form'].get_all_widgets():
430
                if hasattr(widget, 'add_media'):
431
                    widget.add_media()
432

  
426 433

  
427 434
class TemplateError(Exception):
428 435
    def __init__(self, msg, params=()):
wcs/views.py
56 56
            get_request().response.filter = {'admin_ezt': True}
57 57
            body = get_publisher().try_publish(get_request())
58 58
            if isinstance(body, template.QommonTemplateResponse):
59
                body.add_media()
59 60
                body = template.render(body.templates, body.context)
60 61
                get_publisher().session_manager.finish_successful_request()
61 62
            self.quixote_response = get_request().response
62
-