diff --git a/src/example/contenttype/example.py b/src/example/contenttype/example.py
index e61127f..ce52b90 100644
--- a/src/example/contenttype/example.py
+++ b/src/example/contenttype/example.py
@@ -2,32 +2,35 @@
from plone.app.textfield import RichText
from plone.app.vocabularies.catalog import CatalogSource
from plone.app.vocabularies.catalog import StaticCatalogVocabulary
-from plone.app.z3cform.widget import AjaxSelectFieldWidget
-from plone.app.z3cform.widget import RelatedItemsFieldWidget
-from plone.app.z3cform.widget import SelectFieldWidget
from plone.autoform import directives
from plone.dexterity.content import Container
-
from plone.namedfile.field import NamedBlobFile
from plone.namedfile.field import NamedBlobImage
from plone.schema import Email
-
-# from plone.schema import (
-# Dict,
-# ) # take Dict field from plone.schema to use the widget attribute
from plone.supermodel import model
from plone.supermodel.directives import fieldset
from plone.supermodel.directives import primary
-
from z3c.form.browser.checkbox import CheckBoxFieldWidget
from z3c.form.browser.radio import RadioFieldWidget
from z3c.relationfield.schema import RelationChoice
from z3c.relationfield.schema import RelationList
from zope import schema
from zope.interface import implementer
-
from zope.interface import Interface
+try:
+ # Plone 6.1
+ from plone.app.z3cform.widgets.contentbrowser import ContentBrowserFieldWidget
+ from plone.app.z3cform.widgets.select import AjaxSelectFieldWidget
+ from plone.app.z3cform.widgets.select import Select2FieldWidget
+except ImportError:
+ # Plone 6.0
+ from plone.app.z3cform.widget import (
+ RelatedItemsFieldWidget as ContentBrowserFieldWidget,
+ )
+ from plone.app.z3cform.widget import AjaxSelectFieldWidget
+ from plone.app.z3cform.widget import SelectFieldWidget as Select2FieldWidget
+
class IExample(model.Schema):
"""Dexterity-Schema with all field-types."""
@@ -59,6 +62,7 @@ class IExample(model.Schema):
"choice_field",
"choice_field_radio",
"choice_field_select",
+ "choice_field_treevocabulary",
"choice_field_voc",
"list_field",
"list_field_checkbox",
@@ -194,7 +198,7 @@ class IExample(model.Schema):
required=False,
)
- directives.widget(choice_field_select=SelectFieldWidget)
+ directives.widget(choice_field_select=Select2FieldWidget)
choice_field_select = schema.Choice(
title="Choicefield with select2 widget",
description="zope.schema.Choice",
@@ -202,6 +206,24 @@ class IExample(model.Schema):
required=False,
)
+ directives.widget(choice_field_treevocabulary=Select2FieldWidget)
+ choice_field_treevocabulary = schema.Choice(
+ title="Choicefield with TreeVocabulary",
+ vocabulary=schema.vocabulary.TreeVocabulary.fromDict(
+ {
+ ("foo_group", "Foo Group"): {
+ ("bar_group", "bar_group", "Bar Group"): {},
+ ("qux_group", "qux_group", "Qux Group"): {},
+ },
+ ("corge_group", "Corge Group"): {
+ ("grault_group", "grault_group", "Grault Group"): {},
+ ("garply_group", "garply_group", "Garply Group"): {},
+ },
+ }
+ ),
+ required=False,
+ )
+
list_field = schema.List(
title="List field",
description="zope.schema.List",
@@ -225,7 +247,7 @@ class IExample(model.Schema):
default=[],
)
- directives.widget(list_field_select=SelectFieldWidget)
+ directives.widget(list_field_select=Select2FieldWidget)
list_field_select = schema.List(
title="List field with select widget",
description="zope.schema.List",
@@ -351,7 +373,7 @@ class IExample(model.Schema):
)
directives.widget(
"relationchoice_field_constrained",
- RelatedItemsFieldWidget,
+ ContentBrowserFieldWidget,
pattern_options={"selectableTypes": ["Document"]},
)
@@ -365,7 +387,7 @@ class IExample(model.Schema):
)
directives.widget(
"relationlist_field_constrained",
- RelatedItemsFieldWidget,
+ ContentBrowserFieldWidget,
pattern_options={"selectableTypes": ["Document", "Event"]},
)
@@ -383,7 +405,7 @@ class IExample(model.Schema):
)
directives.widget(
"relationlist_field_search_mode",
- RelatedItemsFieldWidget,
+ ContentBrowserFieldWidget,
pattern_options={
"baseCriteria": [ # This is a optimization that limits the catalog-query
{
@@ -401,7 +423,7 @@ class IExample(model.Schema):
},
)
- # From here on we use other widgets than the default RelatedItemsFieldWidget
+ # From here on we use other widgets than the default ContentBrowserFieldWidget
# # This one also works in Volto!
# # All other options use the default ObjectWidget in Volto so far.
@@ -417,7 +439,7 @@ class IExample(model.Schema):
# )
# directives.widget(
# "relationchoice_field_select",
- # SelectFieldWidget,
+ # Select2FieldWidget,
# )
# relationchoice_field_radio = RelationChoice(
@@ -445,7 +467,7 @@ class IExample(model.Schema):
)
directives.widget(
"relationlist_field_select",
- SelectFieldWidget,
+ Select2FieldWidget,
pattern_options={
"closeOnSelect": False, # Select2 option to leave dropdown open for multiple selection
},
@@ -524,7 +546,7 @@ class IExample(model.Schema):
vocabulary="plone.app.vocabularies.Catalog",
required=False,
)
- directives.widget("uuid_choice_field", RelatedItemsFieldWidget)
+ directives.widget("uuid_choice_field", ContentBrowserFieldWidget)
uuid_list_field = schema.List(
title="List Field with RelatedItems widget storing uuids",
@@ -534,7 +556,7 @@ class IExample(model.Schema):
required=False,
missing_value=[],
)
- directives.widget("uuid_list_field", RelatedItemsFieldWidget)
+ directives.widget("uuid_list_field", ContentBrowserFieldWidget)
uuid_choice_field_constrained = schema.Choice(
title="Choice field with RelatedItems widget storing uuids (only allows Documents)",
@@ -544,7 +566,7 @@ class IExample(model.Schema):
)
directives.widget(
"uuid_choice_field_constrained",
- RelatedItemsFieldWidget,
+ ContentBrowserFieldWidget,
pattern_options={"selectableTypes": ["Document"]},
)
@@ -558,12 +580,12 @@ class IExample(model.Schema):
)
directives.widget(
"uuid_list_field_constrained",
- RelatedItemsFieldWidget,
+ ContentBrowserFieldWidget,
pattern_options={"selectableTypes": ["Document", "Folder"]},
)
uuid_list_field_search_mode = schema.List(
- title="List Field with RelatedItems widget in Search Mode storing uuids",
+ title="List Field with RelatedItems widget in Search Mode storing uuids (constrained to published Documents and Events)",
description="zope.schema.List",
default=[],
value_type=schema.Choice(
@@ -576,7 +598,7 @@ class IExample(model.Schema):
)
directives.widget(
"uuid_list_field_search_mode",
- RelatedItemsFieldWidget,
+ ContentBrowserFieldWidget,
pattern_options={
"selectableTypes": ["Document", "Folder"],
"basePath": "", # Start the search at the portal root
@@ -584,7 +606,7 @@ class IExample(model.Schema):
},
)
- # From here on we use other widgets than the default RelatedItemsFieldWidget
+ # From here on we use other widgets than the default ContentBrowserFieldWidget
# uuid_choice_field_select = schema.Choice(
# title="UUID Choice with select widget storing uuids",
@@ -598,7 +620,7 @@ class IExample(model.Schema):
# )
# directives.widget(
# "uuid_choice_field_select",
- # SelectFieldWidget,
+ # Select2FieldWidget,
# )
# uuid_choice_field_radio = schema.Choice(
@@ -626,7 +648,7 @@ class IExample(model.Schema):
)
directives.widget(
"uuid_list_field_select",
- SelectFieldWidget,
+ Select2FieldWidget,
pattern_options={
"closeOnSelect": False, # Select2 option to leave dropdown open for multiple selection
},
diff --git a/src/example/contenttype/profiles/default/types/example.xml b/src/example/contenttype/profiles/default/types/example.xml
index 4a6c05b..8a5666f 100644
--- a/src/example/contenttype/profiles/default/types/example.xml
+++ b/src/example/contenttype/profiles/default/types/example.xml
@@ -3,7 +3,7 @@
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
Example
-
+ string:file-check
example
string:${folder_url}/++add++example
@@ -37,13 +37,13 @@
-
\ No newline at end of file
+