-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #702 from euphorie/choice-widget
Custom widgets for choice fields in the session @@start view
- Loading branch information
Showing
4 changed files
with
91 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
from functools import cached_property | ||
from z3c.form.browser.select import SelectWidget | ||
from z3c.form.interfaces import IFieldWidget | ||
from z3c.form.widget import FieldWidget | ||
from zope.interface import implementer | ||
|
||
|
||
class EuphorieChoiceWidget(SelectWidget): | ||
"""Select widget for z3c.form in the Euphorie context: better display | ||
mode.""" | ||
|
||
@cached_property | ||
def title_value(self): | ||
if self.name in self.request.form: | ||
token = self.request.form[self.name] | ||
vocabulary = self.field.source(self.context) | ||
try: | ||
return vocabulary.getTermByToken(token).value | ||
except LookupError: | ||
return | ||
|
||
return getattr(self.context.session, self.field.__name__, None) | ||
|
||
def isSelected(self, term): | ||
return term.title == self.title_value | ||
|
||
|
||
@implementer(IFieldWidget) | ||
def EuphorieChoiceFieldWidget(field, request): | ||
"""This is identicall to the equivalent in plone.app.z3cform but needs a | ||
customization to use the EuphorieSelectWidget class.""" | ||
widget = FieldWidget(field, EuphorieChoiceWidget(request)) | ||
return widget |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
<html xmlns="http://www.w3.org/1999/xhtml" | ||
xmlns:i18n="http://xml.zope.org/namespaces/i18n" | ||
xmlns:tal="http://xml.zope.org/namespaces/tal" | ||
tal:omit-tag="" | ||
i18n:domain="nuplone" | ||
> | ||
<div class="z3cFieldContainer ${view/@@dependencies}"> | ||
<label> | ||
<select class="${view/klass}" | ||
id="${view/id}" | ||
multiple="${view/multiple}" | ||
name="${view/name}" | ||
size="${view/size}" | ||
> | ||
<tal:item repeat="item view/items"><option id="${item/id}" | ||
selected="${python:'selected' if selected else None}" | ||
value="${item/value}" | ||
tal:define=" | ||
selected item/selected; | ||
" | ||
>${item/content}</option></tal:item> | ||
</select> | ||
<tal:error condition="view/error" | ||
replace="structure view/error/render|nothing" | ||
/> | ||
</label> | ||
<dfn class="infoPanel" | ||
title="Information" | ||
tal:define=" | ||
description view/field/description; | ||
" | ||
tal:condition="description" | ||
i18n:attributes="title" | ||
>${description}</dfn> | ||
<input name="${view/name}-empty-marker" | ||
type="hidden" | ||
value="1" | ||
/> | ||
</div> | ||
</html> |