diff --git a/themis/fields/interfaces.py b/themis/fields/interfaces.py index 991cc2a..28ab056 100644 --- a/themis/fields/interfaces.py +++ b/themis/fields/interfaces.py @@ -4,6 +4,7 @@ from zope.schema.interfaces import IChoice, IField, IList, IDate from zope import schema from z3c.form.interfaces import IOrderedSelectWidget, ITextWidget from z3c.relationfield.interfaces import IRelation, IRelationList +from plone.formwidget.autocomplete.interfaces import IAutocompleteWidget class ICommission(IField): '''Field containing a unicode string without newlines that is a commission.''' @@ -135,3 +136,9 @@ class IMailRefId(IField): class IMailRefIdWidget(ITextWidget): pass +class IRelatedDocWidget(IAutocompleteWidget): + pass + +class IRelatedDocsWidget(IAutocompleteWidget): + pass + diff --git a/themis/fields/relateddoc_display.pt b/themis/fields/relateddoc_display.pt new file mode 100644 index 0000000..9bbae26 --- /dev/null +++ b/themis/fields/relateddoc_display.pt @@ -0,0 +1,22 @@ +, diff --git a/themis/fields/widgets.py b/themis/fields/widgets.py index c5891ec..57ec81f 100644 --- a/themis/fields/widgets.py +++ b/themis/fields/widgets.py @@ -9,6 +9,9 @@ from z3c.form.interfaces import IFormLayer, IFieldWidget from z3c.form.widget import FieldWidget from collective.z3cform.datetimewidget import DateWidget +from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile + + from themis.fields.interfaces import ICommission, ICommissions from zope.schema.interfaces import IDate, IContextSourceBinder, ISource from themis.fields.interfaces import IDateOnly @@ -24,6 +27,7 @@ from themis.fields.interfaces import IRelatedDoc from themis.fields.interfaces import IRelatedDocs from themis.fields.interfaces import IMailId, IMailIdWidget from themis.fields.interfaces import IMailRefId, IMailRefIdWidget +from themis.fields.interfaces import IRelatedDocWidget, IRelatedDocsWidget from plone.formwidget.autocomplete.interfaces import IAutocompleteWidget from plone.formwidget.autocomplete.widget import AutocompleteSelectionWidget, AutocompleteMultiSelectionWidget @@ -202,20 +206,50 @@ class OrderedSelectAndAddWidget(OrderedSelectWidget): return notselecteditems +class RelatedDocWidget(AutocompleteSelectionWidget): + implements(IRelatedDocWidget) + display_template = ViewPageTemplateFile('relateddoc_display.pt') + maxResults = 50 + + def get_url(self, v): + return v + + def get_label(self, v): + term = self.terms.getTermByToken(v) + return term.title + + def tuples(self): + return [(self.get_url(x), self.get_label(x)) for x in self.value] + @adapter(IRelatedDoc, IFormLayer) @implementer(IFieldWidget) def RelatedDocFieldWidget(field, request): - '''IFieldWidget factory for RadioChoiceWidget''' - return FieldWidget(field, AutocompleteSelectionWidget(request)) + '''IFieldWidget factory for RelatedDocWidget''' + return FieldWidget(field, RelatedDocWidget(request)) +class RelatedDocsWidget(AutocompleteMultiSelectionWidget): + implements(IRelatedDocsWidget) + display_template = ViewPageTemplateFile('relateddoc_display.pt') + maxResults = 50 + + def get_url(self, v): + return v + + def get_label(self, v): + term = self.terms.getTermByToken(v) + return term.title + + def tuples(self): + return [(self.get_url(x), self.get_label(x)) for x in self.value] @adapter(IRelatedDocs, IFormLayer) @implementer(IFieldWidget) def RelatedDocsFieldWidget(field, request): '''IFieldWidget factory for RelatedDocsWidget''' - return FieldWidget(field, MultiContentTreeWidget(request)) + return FieldWidget(field, RelatedDocsWidget(request)) return FieldWidget(field, AutocompleteMultiSelectionWidget(request)) + return FieldWidget(field, MultiContentTreeWidget(request))