def fixAjaxSelectWidgetDisplayMode(event): if (isinstance(event.widget, AjaxSelectWidget) and event.widget.mode == DISPLAY_MODE and event.widget.vocabulary): # Sanity check field = getattr(event.widget, 'field', None) if ICollection.providedBy(field): field = field.value_type if field is None or not getattr(field, 'vocabularyName', None): # Field doesn't know its vocabulary and SelectWidget cannot be used return # This is crazy! AjaxSelectWidget is based on select widget and # therefore has completely wrong display mode; Here we replace # the widget with SelectWidget, but is it really this hard? tmp = FieldWidget( event.widget.field, SelectWidget(event.widget.request), ) # Do what they do in z3c.form.field update tmp.name = event.widget.name tmp.id = event.widget.id tmp.context = event.widget.context tmp.form = event.widget.form alsoProvides(tmp, IContextAware, IFormAware) tmp.ignoreContext = event.widget.ignoreContext tmp.ignoreRequest = event.widget.ignoreRequest tmp.showDefault = event.widget.showDefault tmp.mode = event.widget.mode event.widget.__class__ = SelectWidget event.widget.__dict__ = tmp.__dict__ event.widget.update()
def test_widget_values(self): from plone.app.widgets.dx import RichTextWidget from plone.app.textfield.value import RichTextValue widget = FieldWidget(self.field, RichTextWidget(self.request)) # set the context so we can get tinymce settings widget.context = self.portal widget.value = RichTextValue(u'Lorem ipsum \u2026') base_args = widget._base_args() self.assertEquals(base_args['value'], u'Lorem ipsum \u2026')
def test_dx_tinymcewidget_single_mimetype(self): """A RichTextWidget with only one available mimetype should render the pattern class directly on itself. """ if IMarkupSchema: # if not, don't run this test self._set_mimetypes(allowed=('text/html',)) from plone.app.z3cform.widget import RichTextWidget widget = FieldWidget(self.field, RichTextWidget(self.request)) # set the context so we can get tinymce settings widget.context = self.portal rendered = widget.render() self.assertTrue('<select' not in rendered) self.assertTrue('pat-tinymce' in rendered) self.assertTrue('data-pat-tinymce' in rendered)
def test_dx_tinymcewidget_single_mimetype(self): """A RichTextWidget with only one available mimetype should render the pattern class directly on itself. """ if IMarkupSchema: # if not, don't run this test self._set_mimetypes(allowed=('text/html', )) from plone.app.z3cform.widget import RichTextWidget widget = FieldWidget(self.field, RichTextWidget(self.request)) # set the context so we can get tinymce settings widget.context = self.portal rendered = widget.render() self.assertTrue('<select' not in rendered) self.assertTrue('pat-tinymce' in rendered) self.assertTrue('data-pat-tinymce' in rendered)
def test_widget_params(self): from plone.app.z3cform.widget import RichTextWidget widget = FieldWidget(self.field, RichTextWidget(self.request)) # set the context so we can get tinymce settings widget.context = self.portal widget.update() base_args = widget._base_args() self.assertEqual(base_args['name'], 'text') self.assertEqual(base_args['value'], u'') self.assertEqual(base_args['pattern'], 'tinymce') self.assertEqual(base_args['pattern_options']['prependToUrl'], 'resolveuid/') self.assertEqual( base_args['pattern_options']['upload']['relativePath'], '@@fileUpload')
def test_dx_tinymcewidget_multiple_mimetypes_create(self): """A RichTextWidget with multiple available mimetypes should render a mimetype selection widget along with the textfield. When there is no field value, the default mimetype should be preselected. """ if IMarkupSchema: # if not, don't run this test self._set_mimetypes(allowed=('text/html', 'text/plain')) from plone.app.z3cform.widget import RichTextWidget widget = FieldWidget(self.field, RichTextWidget(self.request)) # set the context so we can get tinymce settings widget.context = self.portal rendered = widget.render() self.assertTrue('<select' in rendered) self.assertTrue('pat-textareamimetypeselector' in rendered) self.assertTrue('data-pat-textareamimetypeselector' in rendered) self.assertTrue( '<option value="text/html" selected="selected">' in rendered) self.assertTrue('pat-tinymce' not in rendered)
def test_widget_params(self): from plone.app.widgets.dx import RichTextWidget widget = FieldWidget(self.field, RichTextWidget(self.request)) # set the context so we can get tinymce settings widget.context = self.portal widget.update() base_args = widget._base_args() self.assertEqual(base_args['name'], 'text') self.assertEqual(base_args['value'], u'') self.assertEqual(base_args['pattern'], 'tinymce') self.assertEqual(base_args['pattern_options']['prependToUrl'], 'resolveuid/') self.assertEqual(base_args['pattern_options']['rel_upload_path'], '@@fileUpload') if not PLONE50: self.assertEqual(base_args['pattern_options']['anchorSelector'], self.portal.portal_tinymce.anchor_selector)
def test_dx_tinymcewidget_multiple_mimetypes_edit(self): """A RichTextWidget with multiple available mimetypes should render a mimetype selection widget along with the textfield. When there is already a RichTextValue, it's mimetype should be preselected. """ if IMarkupSchema: # if not, don't run this test self._set_mimetypes(allowed=('text/html', 'text/plain')) from collective.patterns.widgets.dx import RichTextWidget from plone.app.textfield.value import RichTextValue widget = FieldWidget(self.field, RichTextWidget(self.request)) # set the context so we can get tinymce settings widget.context = self.portal widget.value = RichTextValue(u'Hello world', mimeType='text/plain') rendered = widget.render() self.assertTrue('<select' in rendered) self.assertTrue('pat-textareamimetypeselector' in rendered) self.assertTrue('data-pat-textareamimetypeselector' in rendered) self.assertTrue( '<option value="text/plain" selected="selected">' in rendered) self.assertTrue('pat-tinymce' not in rendered)