Skip to content

Commit e8768e0

Browse files
committed
Merge branch '2.0-branch' of https://github.com/Pylons/deformdemo into 2.0-branch
2 parents 72af9ab + b292024 commit e8768e0

File tree

2 files changed

+687
-31
lines changed

2 files changed

+687
-31
lines changed

deformdemo/__init__.py

Lines changed: 263 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
except ImportError:
3939
from io import StringIO
4040

41-
4241
PY3 = sys.version_info[0] == 3
4342
PY38MIN = sys.version_info[0] == 3 and sys.version_info[1] >= 8
4443

@@ -53,6 +52,7 @@ def unicode(val, encoding="utf-8"):
5352
formatter = HtmlFormatter(nowrap=True)
5453
css = 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''
7171
def 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

Comments
 (0)