3838except ImportError :
3939 from io import StringIO
4040
41-
4241PY3 = sys .version_info [0 ] == 3
4342PY38MIN = sys .version_info [0 ] == 3 and sys .version_info [1 ] >= 8
4443
@@ -53,6 +52,7 @@ def unicode(val, encoding="utf-8"):
5352formatter = HtmlFormatter (nowrap = True )
5453css = formatter .get_style_defs ()
5554
55+
5656# the zpt_renderer above is referred to within the demo.ini file by dotted name
5757
5858
@@ -69,7 +69,6 @@ def __call__(self, method):
6969# http://stackoverflow.com/a/16888673/315168
7070# eliminate u''
7171def my_safe_repr (obj , context , maxlevels , level , sort_dicts = True ):
72-
7372 if type (obj ) == unicode :
7473 obj = obj .encode ("utf-8" )
7574
@@ -549,7 +548,6 @@ def popup(self):
549548 """
550549
551550 class Schema (colander .Schema ):
552-
553551 title = "Pop up example title"
554552
555553 # Override default form.pt for rendering <form>
@@ -2096,6 +2094,153 @@ class Schema(colander.Schema):
20962094
20972095 return self .render_form (form )
20982096
2097+ @view_config (renderer = "templates/form.pt" , name = "selectize" )
2098+ @demonstrate ("Selectize Widget" )
2099+ def selectize (self ):
2100+
2101+ choices = (
2102+ ("" , "- Select -" ),
2103+ ("habanero" , "Habanero" ),
2104+ ("jalapeno" , "Jalapeno" ),
2105+ ("chipotle" , "Chipotle" ),
2106+ )
2107+
2108+ class Schema (colander .Schema ):
2109+ pepper = colander .SchemaNode (
2110+ colander .String (),
2111+ widget = deform .widget .SelectizeWidget (values = choices ),
2112+ )
2113+
2114+ schema = Schema ()
2115+ form = deform .Form (schema , buttons = ("submit" ,))
2116+
2117+ return self .render_form (form )
2118+
2119+ @view_config (renderer = "templates/form.pt" , name = "selectize_with_multiple" )
2120+ @demonstrate ("Selectize Widget (with multiple)" )
2121+ def selectize_with_multiple (self ):
2122+
2123+ choices = (
2124+ ("habanero" , "Habanero" ),
2125+ ("jalapeno" , "Jalapeno" ),
2126+ ("chipotle" , "Chipotle" ),
2127+ )
2128+
2129+ class Schema (colander .Schema ):
2130+ pepper = colander .SchemaNode (
2131+ colander .Set (),
2132+ widget = deform .widget .SelectizeWidget (
2133+ values = choices ,
2134+ multiple = True ,
2135+ attributes = {
2136+ "placeholder" : "Select..." ,
2137+ },
2138+ ),
2139+ validator = colander .Length (
2140+ min = 1 , min_err = "You must select at least one pepper."
2141+ ),
2142+ )
2143+
2144+ schema = Schema ()
2145+ form = deform .Form (schema , buttons = ("submit" ,))
2146+
2147+ return self .render_form (form )
2148+
2149+ @view_config (renderer = "templates/form.pt" , name = "selectize_with_optgroup" )
2150+ @demonstrate ("Selectize Widget (with optgroup)" )
2151+ def selectize_with_optgroup (self ):
2152+ from deform .widget import OptGroup
2153+
2154+ choices = (
2155+ ("" , "Select your favorite musician" ),
2156+ OptGroup (
2157+ "Guitarists" ,
2158+ ("page" , "Jimmy Page" ),
2159+ ("hendrix" , "Jimi Hendrix" ),
2160+ ),
2161+ OptGroup (
2162+ "Drummers" ,
2163+ ("cobham" , "Billy Cobham" ),
2164+ ("bonham" , "John Bonham" ),
2165+ ),
2166+ )
2167+
2168+ class Schema (colander .Schema ):
2169+ musician = colander .SchemaNode (
2170+ colander .String (),
2171+ widget = deform .widget .SelectizeWidget (
2172+ values = choices ,
2173+ attributes = {
2174+ "placeholder" : "Select..." ,
2175+ },
2176+ ),
2177+ )
2178+
2179+ schema = Schema ()
2180+ form = deform .Form (schema , buttons = ("submit" ,))
2181+
2182+ return self .render_form (form )
2183+
2184+ @view_config (renderer = "templates/form.pt" , name = "selectize_with_tags" )
2185+ @demonstrate ("Selectize Widget (with tags)" )
2186+ def selectize_with_tags (self ):
2187+
2188+ choices = ()
2189+
2190+ class Schema (colander .Schema ):
2191+ pepper = colander .SchemaNode (
2192+ colander .String (),
2193+ widget = deform .widget .SelectizeWidget (
2194+ values = choices ,
2195+ tags = True ,
2196+ selectize_options = {
2197+ "createOnBlur" : True ,
2198+ "create" : True ,
2199+ },
2200+ attributes = {
2201+ "placeholder" : "Add a tag..." ,
2202+ },
2203+ ),
2204+ )
2205+
2206+ schema = Schema ()
2207+ form = deform .Form (schema , buttons = ("submit" ,))
2208+
2209+ return self .render_form (form )
2210+
2211+ @view_config (
2212+ renderer = "templates/form.pt" , name = "selectize_with_tags_and_multiple"
2213+ )
2214+ @demonstrate ("Selectize Widget (with tags and multiple)" )
2215+ def selectize_with_tags_and_multiple (self ):
2216+
2217+ choices = ()
2218+
2219+ class Schema (colander .Schema ):
2220+ pepper = colander .SchemaNode (
2221+ colander .Set (),
2222+ widget = deform .widget .SelectizeWidget (
2223+ values = choices ,
2224+ tags = True ,
2225+ multiple = True ,
2226+ selectize_options = {
2227+ "createOnBlur" : True ,
2228+ "create" : True ,
2229+ },
2230+ attributes = {
2231+ "placeholder" : "Add a tag..." ,
2232+ },
2233+ ),
2234+ validator = colander .Length (
2235+ min = 1 , min_err = "You must enter at least one tag."
2236+ ),
2237+ )
2238+
2239+ schema = Schema ()
2240+ form = deform .Form (schema , buttons = ("submit" ,))
2241+
2242+ return self .render_form (form )
2243+
20992244 @view_config (renderer = "templates/form.pt" , name = "checkboxchoice" )
21002245 @demonstrate ("Checkbox Choice Widget" )
21012246 def checkboxchoice (self ):
@@ -2341,7 +2486,8 @@ def validator(form, value):
23412486 return self .render_form (form )
23422487
23432488 @view_config (
2344- renderer = "templates/form.pt" , name = "multiple_error_messages_mapping"
2489+ renderer = "templates/form.pt" ,
2490+ name = "multiple_error_messages_mapping" ,
23452491 )
23462492 @demonstrate ("Multiple Error Messages For a Single Widget (Mapping)" )
23472493 def multiple_error_messages_mapping (self ):
@@ -2685,7 +2831,7 @@ class EmailMessage(colander.Schema):
26852831 @view_config (
26862832 renderer = "templates/form.pt" , name = "readonly_value_nonvalidation"
26872833 )
2688- @demonstrate ("Dont Validate Readonly Fields" )
2834+ @demonstrate ("Don't Validate Readonly Fields" )
26892835 def readonly_value_nonvalidation (self ):
26902836 @colander .deferred
26912837 def deferred_missing (node , kw ):
@@ -2699,15 +2845,18 @@ class Values(colander.Schema):
26992845 )
27002846 readwrite = colander .SchemaNode (colander .String ())
27012847
2702- appstruct = {"readonly" : "Read Only" , "readwrite" : "Read and Write" }
2848+ appstruct = {
2849+ "readonly" : "Read Only" ,
2850+ "readwrite" : "Read and Write" ,
2851+ }
27032852 schema = Values ().bind ()
27042853 form = deform .Form (schema , buttons = ("submit" ,))
27052854
27062855 return self .render_form (form , appstruct = appstruct )
27072856
2708- @view_config (renderer = "templates/form.pt" , name = "readonly_fields " )
2709- @demonstrate ("Read-Only Fields " )
2710- def readonly_fields (self ):
2857+ @view_config (renderer = "templates/form.pt" , name = "readonly_argument " )
2858+ @demonstrate ("Readonly Widget Argument " )
2859+ def readonly_argument (self ):
27112860 import datetime
27122861
27132862 class Schema (colander .Schema ):
@@ -2777,6 +2926,107 @@ class Schema(colander.Schema):
27772926
27782927 return self .render_form (form , appstruct = appstruct )
27792928
2929+ @view_config (renderer = "templates/form.pt" , name = "readonly_html" )
2930+ @demonstrate ("Readonly HTML Attribute" )
2931+ def readonly_html (self ):
2932+ """
2933+ This form shows the widgets that support the HTML attribute
2934+ ``readonly``.
2935+ """
2936+ values = [
2937+ ("a" , "The letter a" ),
2938+ ("b" , "The letter b" ),
2939+ ("c" , "The letter c" ),
2940+ ]
2941+
2942+ class Schema (colander .Schema ):
2943+ checkbox = colander .SchemaNode (
2944+ colander .Set (),
2945+ widget = deform .widget .CheckboxChoiceWidget (
2946+ values = values ,
2947+ attributes = {"onclick" : "return false;" },
2948+ ),
2949+ description = "Readonly checkbox choices" ,
2950+ )
2951+ money = colander .SchemaNode (
2952+ colander .Decimal (),
2953+ widget = deform .widget .MoneyInputWidget (
2954+ attributes = {"readonly" : "readonly" }
2955+ ),
2956+ description = "Readonly money" ,
2957+ )
2958+ radio = colander .SchemaNode (
2959+ colander .String (),
2960+ widget = deform .widget .RadioChoiceWidget (
2961+ values = values ,
2962+ attributes = {"readonly" : "readonly" },
2963+ ),
2964+ description = "Readonly radio choices" ,
2965+ )
2966+ select_single = colander .SchemaNode (
2967+ colander .String (),
2968+ widget = deform .widget .SelectWidget (
2969+ values = values ,
2970+ attributes = {"readonly" : "readonly" },
2971+ ),
2972+ description = "Readonly select single" ,
2973+ )
2974+ selectize_multi = colander .SchemaNode (
2975+ colander .Set (),
2976+ widget = deform .widget .SelectizeWidget (
2977+ values = values ,
2978+ multiple = True ,
2979+ attributes = {"readonly" : "readonly" },
2980+ selectize_options = {
2981+ "persist" : False ,
2982+ "plugins" : ["remove_button" ],
2983+ },
2984+ ),
2985+ description = "Readonly selectize multiple" ,
2986+ )
2987+ selectize_single = colander .SchemaNode (
2988+ colander .String (),
2989+ widget = deform .widget .SelectizeWidget (
2990+ values = values ,
2991+ attributes = {"readonly" : "readonly" },
2992+ selectize_options = {
2993+ "persist" : False ,
2994+ },
2995+ ),
2996+ description = "Readonly selectize single" ,
2997+ )
2998+ textarea = colander .SchemaNode (
2999+ colander .String (),
3000+ widget = deform .widget .TextAreaWidget (
3001+ attributes = {"readonly" : "readonly" }
3002+ ),
3003+ description = "Readonly textarea" ,
3004+ )
3005+ textinput = colander .SchemaNode (
3006+ colander .String (),
3007+ widget = deform .widget .TextInputWidget (
3008+ attributes = {"readonly" : "readonly" }
3009+ ),
3010+ description = "Readonly text input" ,
3011+ )
3012+
3013+ appstruct = {
3014+ "checkbox" : "b" ,
3015+ "money" : decimal .Decimal (1 ),
3016+ "radio" : "b" ,
3017+ "select_single" : "b" ,
3018+ "selectize_single" : "b" ,
3019+ "selectize_multi" : ("a" , "b" ),
3020+ "textarea" : "readonly text area" ,
3021+ "textinput" : "readonly text input" ,
3022+ }
3023+
3024+ schema = Schema ()
3025+
3026+ form = deform .Form (schema , buttons = ("submit" ,))
3027+
3028+ return self .render_form (form , appstruct = appstruct )
3029+
27803030 @view_config (
27813031 renderer = "templates/form.pt" ,
27823032 name = "custom_classes_on_outermost_html_element" ,
@@ -2893,7 +3143,10 @@ def translator(term):
28933143
28943144 # Configure renderer
28953145 configure_zpt_renderer (
2896- ("deformdemo:custom_widgets" , "unofficial-deformdemo:custom_widgets" ),
3146+ (
3147+ "deformdemo:custom_widgets" ,
3148+ "unofficial-deformdemo:custom_widgets" ,
3149+ ),
28973150 translator ,
28983151 )
28993152 config .add_static_view ("static_deform" , "deform:static" )
0 commit comments