general: adjust media support in all widgets (#25113)
This commit is contained in:
parent
34c5d97519
commit
6df1af66e9
|
@ -3530,6 +3530,7 @@ def test_form_autocomplete_variadic_url(pub):
|
|||
resp = resp.form.submit('submit') # next
|
||||
# test javascript will be used to compute the full URL
|
||||
assert 'options.wcs_base_url' in resp.body
|
||||
assert 'jquery-ui.min.js' in resp.body
|
||||
|
||||
# test going forward (will error out), check it's still a variadic URL (#9786)
|
||||
resp.form['f1'] = 'Foo'
|
||||
|
@ -3618,6 +3619,7 @@ def test_form_jsonp_item_field(http_requests, pub):
|
|||
|
||||
resp = get_app(pub).get('/test/')
|
||||
assert 'url: "http://remote.example.net/jsonp"' in resp.body
|
||||
assert 'select2.min.js' in resp.body
|
||||
|
||||
formdef.fields = [
|
||||
fields.ItemField(id='1', label='string', type='item',
|
||||
|
|
|
@ -174,11 +174,7 @@ class CompatWcsPublisher(WcsPublisher):
|
|||
template_response)
|
||||
|
||||
def render_template(self, request, response, template_response):
|
||||
if 'form' in template_response.context:
|
||||
# run add_media on all widgets so we get them in the page <head>
|
||||
for widget in template_response.context['form'].get_all_widgets():
|
||||
if hasattr(widget, 'add_media'):
|
||||
widget.add_media()
|
||||
template_response.add_media()
|
||||
context = template.get_decorate_vars(
|
||||
template_response.context.get('body'),
|
||||
response,
|
||||
|
|
|
@ -945,6 +945,9 @@ class DateWidget(StringWidget):
|
|||
self.error = _('invalid date; date must be on or before %s') % strftime(
|
||||
misc.date_format(), datetime.datetime(*self.maximum_date[:6]))
|
||||
|
||||
def add_media(self):
|
||||
self.prepare_javascript()
|
||||
|
||||
@classmethod
|
||||
def prepare_javascript(cls):
|
||||
get_response().add_javascript([
|
||||
|
@ -962,8 +965,6 @@ class DateWidget(StringWidget):
|
|||
if self.attrs.get('readonly'):
|
||||
return StringWidget.render_content(self)
|
||||
|
||||
self.prepare_javascript()
|
||||
|
||||
date_format = self.get_format_string().replace('%Y', 'yyyy').replace(
|
||||
'%m', 'mm').replace('%d', 'dd').replace('%H', 'hh').replace(
|
||||
'%M', 'ii').replace('%S', 'ss')
|
||||
|
@ -1252,9 +1253,10 @@ class WidgetList(quixote.form.widget.WidgetList):
|
|||
element_kwargs=element_kwargs,
|
||||
add_element_label=add_element_label, **kwargs)
|
||||
|
||||
def add_media(self):
|
||||
get_response().add_javascript(['jquery.js', 'widget_list.js'])
|
||||
|
||||
def render(self):
|
||||
get_response().add_javascript(['jquery.js', 'widget_list.js'])
|
||||
r = TemplateIO(html=True)
|
||||
if self.attrs:
|
||||
r += htmltag('div', **self.attrs)
|
||||
|
@ -1334,10 +1336,12 @@ class TagsWidget(StringWidget):
|
|||
if self.value is not None:
|
||||
self.value = [x.strip() for x in self.value.split(',') if x.strip()]
|
||||
|
||||
def render_content(self):
|
||||
r = TemplateIO(html=True)
|
||||
def add_media(self):
|
||||
get_response().add_javascript(['jquery.js', 'jquery.autocomplete.js'])
|
||||
get_response().add_css_include('../js/jquery.autocomplete.css')
|
||||
|
||||
def render_content(self):
|
||||
r = TemplateIO(html=True)
|
||||
id = 'tags-%s' % randbytes(8)
|
||||
if self.value:
|
||||
value = ', '.join(self.value) + ', '
|
||||
|
@ -1371,12 +1375,12 @@ class WysiwygTextWidget(TextWidget):
|
|||
if self.value.endswith('<br />'):
|
||||
self.value = self.value[:-6]
|
||||
|
||||
def render_content(self):
|
||||
def add_media(self):
|
||||
get_response().add_javascript(['jquery.js', 'ckeditor/ckeditor.js',
|
||||
'qommon.wysiwyg.js', 'ckeditor/adapters/jquery.js'])
|
||||
|
||||
def render_content(self):
|
||||
attrs = self.attrs.copy()
|
||||
|
||||
return (htmltag('textarea', name=self.name, **attrs) +
|
||||
htmlescape(self.value or '') +
|
||||
htmltext("</textarea>"))
|
||||
|
@ -1763,6 +1767,10 @@ class JsonpSingleSelectWidget(Widget):
|
|||
Widget.__init__(self, name, value=value, **kwargs)
|
||||
self.url = url
|
||||
|
||||
def add_media(self):
|
||||
get_response().add_javascript(['jquery.js', 'select2.js'])
|
||||
get_response().add_css_include('../js/select2/select2.css')
|
||||
|
||||
def render_content(self):
|
||||
if self.value is None:
|
||||
value = None
|
||||
|
@ -1782,9 +1790,6 @@ class JsonpSingleSelectWidget(Widget):
|
|||
r += htmltag('input', xml_end=True, type="hidden", name=self.name + '_display', **attrs)
|
||||
initial_display_value = attrs.get('value')
|
||||
|
||||
get_response().add_javascript(['jquery.js', 'select2.js'])
|
||||
get_response().add_css_include('../js/select2/select2.css')
|
||||
|
||||
# init select2 widget
|
||||
allowclear = ""
|
||||
if not self.required:
|
||||
|
@ -1914,9 +1919,10 @@ class AutocompleteStringWidget(WcsExtraStringWidget):
|
|||
if kwargs.get('url'):
|
||||
self.url = kwargs.get('url')
|
||||
|
||||
def render_content(self):
|
||||
def add_media(self):
|
||||
get_response().add_javascript(['jquery.js', 'jquery-ui.js'])
|
||||
|
||||
def render_content(self):
|
||||
if Template.is_template_string(self.url):
|
||||
vars = get_publisher().substitutions.get_context_variables()
|
||||
# skip variables that were not set (None)
|
||||
|
@ -2004,9 +2010,8 @@ class ColourWidget(SingleSelectWidget):
|
|||
SelectWidget.__init__(self, options=colours, *args, **kwargs)
|
||||
self.attrs['class'] = 'colour-picker'
|
||||
|
||||
def render_content(self):
|
||||
def add_media(self):
|
||||
get_response().add_javascript(['jquery.js', 'jquery.colourpicker.js'])
|
||||
return SingleSelectWidget.render_content(self)
|
||||
|
||||
def _parse(self, request):
|
||||
SingleSelectWidget._parse(self, request)
|
||||
|
@ -2059,10 +2064,12 @@ class PasswordEntryWidget(CompositeWidget):
|
|||
'<input type="hidden" name="%s$encoded" value="%s"></input>' % (
|
||||
fake_value, self.name, encoded_value)))
|
||||
|
||||
def add_media(self):
|
||||
get_response().add_javascript(['jquery.js', 'jquery.passstrength.js'])
|
||||
|
||||
def render_content(self):
|
||||
if self.attrs.get('readonly') or not self.strength_indicator:
|
||||
return CompositeWidget.render_content(self)
|
||||
get_response().add_javascript(['jquery.js', 'jquery.passstrength.js'])
|
||||
r = TemplateIO(html=True)
|
||||
r += CompositeWidget.render_content(self)
|
||||
r += htmltext('''<script>
|
||||
|
|
|
@ -423,6 +423,13 @@ class QommonTemplateResponse(object):
|
|||
self.templates = templates
|
||||
self.context = context
|
||||
|
||||
def add_media(self):
|
||||
if 'form' in self.context:
|
||||
# run add_media on all widgets so we get them in the page <head>
|
||||
for widget in self.context['form'].get_all_widgets():
|
||||
if hasattr(widget, 'add_media'):
|
||||
widget.add_media()
|
||||
|
||||
|
||||
class TemplateError(Exception):
|
||||
def __init__(self, msg, params=()):
|
||||
|
|
|
@ -56,6 +56,7 @@ class Backoffice(compat.TemplateWithFallbackView):
|
|||
get_request().response.filter = {'admin_ezt': True}
|
||||
body = get_publisher().try_publish(get_request())
|
||||
if isinstance(body, template.QommonTemplateResponse):
|
||||
body.add_media()
|
||||
body = template.render(body.templates, body.context)
|
||||
get_publisher().session_manager.finish_successful_request()
|
||||
self.quixote_response = get_request().response
|
||||
|
|
Loading…
Reference in New Issue