Skip to content

Commit

Permalink
Merge pull request #82 from plone/additional_css_class
Browse files Browse the repository at this point in the history
Allow setting custom CSS class *outside* widget
  • Loading branch information
jensens authored Nov 1, 2017
2 parents cac7e98 + 28cf3ef commit 07b9312
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 4 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,7 @@ dist
/bin
/parts
/develop-eggs
/include
/lib*
.*.swp
pip-selfcheck.json
8 changes: 7 additions & 1 deletion CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Changelog
=========

3.0.3 (unreleased)
------------------
------------------------

Breaking changes:

Expand All @@ -29,6 +29,12 @@ Bug fixes:
the query string is lost
[tomgross]

- Allow an additional CSS class for widgets in this package
[tomgross]

- Document customization of widgets
[tomgross]

3.0.2 (2017-09-06)
------------------

Expand Down
30 changes: 29 additions & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,34 @@ to display these fields in view mode, add the following css in your theme::
display: none;
}


Add additional parameters to widgets
=====================================

You can add additional parameters to widgets defined in this package
via the `plone.autoform.widgets.ParameterizedWidget` ::

from plone.app.z3c.form.widget import DateWidget
MyDateWidget = ParameterizedWidget(DateWidget, wrapper_css_class='event_start')


or via directives ::

from plone.app.z3c.form.widget import DateWidget


@provider(IFormFieldProvider)
class IMyEventBehavior(model.Schema):

...
widget('event_start', DateWidget, wrapper_css_class='event_start')
event_start = schema.TextLine(
title=_(u'label_event_start'),
description=_(u'help_event_start'),
required=True,
)


Testing
===============

Expand All @@ -358,7 +386,7 @@ If you still need to test forms on lower level in unit tests
you need to enable ``plone.app.z3cform`` support manually.
Below is an example::

import unittest2 as unittest
import unittest

from zope.interface import alsoProvides
from zope.publisher.browser import setDefaultSkin
Expand Down
2 changes: 1 addition & 1 deletion buildout.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[buildout]
extends = https://raw.githubusercontent.com/collective/buildout.plonetest/master/test-5.x.cfg
extends = https://raw.githubusercontent.com/collective/buildout.plonetest/master/test-5.1.x.cfg
package-name = plone.app.z3cform
package-extras = [tests]

Expand Down
3 changes: 2 additions & 1 deletion plone/app/z3cform/templates/widget.pt
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@
error_class python:error and ' error' or '';
empty_values python: (None, '', [], ('', '', '', '00', '00', ''), ('', '', ''));
empty_class python: (widget.value in empty_values) and ' empty' or '';
wrapper_css_class widget/wrapper_css_class|nothing;
fieldname_class string:kssattr-fieldname-${widget/name};"
data-pat-inlinevalidation='{"type":"z3c.form"}'
tal:attributes="class string:field pat-inlinevalidation ${fieldname_class}${error_class}${empty_class};
tal:attributes="class string:field pat-inlinevalidation ${fieldname_class}${error_class}${empty_class} ${wrapper_css_class};
data-fieldname widget/name;
id string:formfield-${widget/id};">
<label for="" class="horizontal"
Expand Down
27 changes: 27 additions & 0 deletions plone/app/z3cform/tests/test_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,17 @@
from plone.app.testing import TEST_USER_ID
from plone.app.z3cform.tests.layer import PAZ3CForm_INTEGRATION_TESTING
from plone.app.z3cform.widget import BaseWidget
from plone.app.z3cform.widget import DateWidget
from plone.autoform.directives import widget
from plone.autoform.form import AutoExtensibleForm
from plone.dexterity.fti import DexterityFTI
from plone.registry.interfaces import IRegistry
from plone.supermodel.model import Schema
from plone.testing.zca import UNIT_TESTING
from plone.uuid.interfaces import IUUID
from Products.CMFPlone.interfaces import IMarkupSchema
from z3c.form.form import Form
from z3c.form.form import EditForm
from z3c.form.interfaces import IFormLayer
from z3c.form.widget import FieldWidget
from zope.component import getUtility
Expand Down Expand Up @@ -1588,3 +1593,25 @@ def test_link_widget__data_converter(self):
converter.toWidgetValue(u'mailto:me?subject=jep')['email_subject'],
u'jep'
)


class WidgetCustomizingIntegrationTests(unittest.TestCase):

layer = PAZ3CForm_INTEGRATION_TESTING

def test_widget_base_wrapper_css(self):

class ITestDateSchema(Schema):

widget('my_date', DateWidget, wrapper_css_class='foo')
my_date = Date(title=u'My Date')

class TestForm(AutoExtensibleForm, EditForm):

ignoreContext = True
schema = ITestDateSchema

render = TestForm(self.layer['portal'], self.layer['request'])
self.assertIn(
'empty foo" data-fieldname="form.widgets.my_date"', render())

1 comment on commit 07b9312

@jenkins-plone-org
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jensens Jenkins CI reporting about code analysis
See the full report here: http://jenkins.plone.org/job/package-plone.app.z3cform/75/violations

plone/app/z3cform/inline_validation.py:15:5: C901 'InlineValidationView.__call__' is too complex (15)
plone/app/z3cform/widget.py:111:25: C812 missing trailing comma
plone/app/z3cform/widget.py:117:49: C812 missing trailing comma
plone/app/z3cform/widget.py:179:20: C812 missing trailing comma
plone/app/z3cform/widget.py:394:26: C812 missing trailing comma
plone/app/z3cform/widget.py:502:36: C812 missing trailing comma
plone/app/z3cform/widget.py:517:26: C812 missing trailing comma
plone/app/z3cform/widget.py:616:29: C812 missing trailing comma
plone/app/z3cform/widget.py:618:36: C812 missing trailing comma
plone/app/z3cform/widget.py:649:47: C812 missing trailing comma
plone/app/z3cform/widget.py:653:19: T000 Todo note found.
plone/app/z3cform/widget.py:667:47: T000 Todo note found.
plone/app/z3cform/widget.py:671:66: C812 missing trailing comma
plone/app/z3cform/widget.py:672:30: C812 missing trailing comma
plone/app/z3cform/widget.py:673:26: C812 missing trailing comma
plone/app/z3cform/widget.py:674:22: C812 missing trailing comma
plone/app/z3cform/widget.py:689:46: C812 missing trailing comma
plone/app/z3cform/widget.py:714:42: C812 missing trailing comma
plone/app/z3cform/widget.py:716:38: C812 missing trailing comma
plone/app/z3cform/widget.py:736:36: C812 missing trailing comma
plone/app/z3cform/widget.py:835:29: C812 missing trailing comma
plone/app/z3cform/widget.py:836:48: C812 missing trailing comma
plone/app/z3cform/widget.py:846:68: C812 missing trailing comma
plone/app/z3cform/widget.py:848:18: C812 missing trailing comma
plone/app/z3cform/templates.py:19:17: C812 missing trailing comma
plone/app/z3cform/utils.py:99:43: C812 missing trailing comma
plone/app/z3cform/utils.py:106:34: C812 missing trailing comma
plone/app/z3cform/converters.py:105:11: T000 Todo note found.
plone/app/z3cform/converters.py:323:33: C812 missing trailing comma
plone/app/z3cform/wysiwyg/widget.py:49:27: C812 missing trailing comma
plone/app/z3cform/tests/tests.py:47:10: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:19:1: I001 isort found an import in the wrong position
plone/app/z3cform/tests/test_widgets.py:89:38: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:140:14: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:190:56: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:195:18: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:264:37: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:293:56: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:298:39: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:302:18: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:450:43: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:464:39: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:465:18: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:482:39: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:483:18: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:500:39: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:501:18: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:520:39: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:521:18: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:539:39: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:540:18: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:552:62: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:566:39: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:567:18: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:578:62: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:592:39: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:593:18: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:605:62: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:619:39: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:620:18: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:630:43: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:673:52: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:678:36: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:751:32: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:763:37: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:765:14: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:778:37: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:780:14: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:877:75: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1011:41: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1015:41: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1019:41: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1038:32: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1075:50: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1079:49: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1083:50: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1087:55: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1109:50: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1113:49: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1117:50: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1121:55: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1158:51: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1186:30: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1211:39: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1229:68: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1249:36: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1315:25: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1338:21: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1348:25: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1358:25: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1368:21: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1485:44: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1498:33: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1511:36: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1524:36: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1548:33: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1554:20: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1560:20: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1566:45: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1572:36: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1578:36: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1584:18: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1590:18: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1594:19: C812 missing trailing comma
plone/app/z3cform/tests/test_widgets.py:1617:1: W391 blank line at end of file
plone/app/z3cform/tests/test_utils.py:14:33: C812 missing trailing comma
plone/app/z3cform/tests/test_utils.py:25:33: C812 missing trailing comma
plone/app/z3cform/tests/test_utils.py:36:33: C812 missing trailing comma
plone/app/z3cform/tests/test_utils.py:47:33: C812 missing trailing comma
plone/app/z3cform/tests/test_utils.py:66:18: C812 missing trailing comma
plone/app/z3cform/tests/test_utils.py:67:14: C812 missing trailing comma
plone/app/z3cform/tests/test_utils.py:82:18: C812 missing trailing comma
plone/app/z3cform/tests/test_utils.py:83:14: C812 missing trailing comma
plone/app/z3cform/tests/test_utils.py:88:33: C812 missing trailing comma
plone/app/z3cform/tests/test_utils.py:111:42: C812 missing trailing comma
plone/app/z3cform/tests/test_utils.py:117:40: C812 missing trailing comma
plone/app/z3cform/tests/test_utils.py:123:31: C812 missing trailing comma
plone/app/z3cform/tests/layer.py:34:41: C812 missing trailing comma

Follow these instructions to reproduce it locally.

Please sign in to comment.