20 import venusian |
20 import venusian |
21 |
21 |
22 # import interfaces |
22 # import interfaces |
23 from pyams_form.interfaces.form import IFormLayer, IResetWidget, ICloseWidget, IDateWidget, IDatetimeWidget, \ |
23 from pyams_form.interfaces.form import IFormLayer, IResetWidget, ICloseWidget, IDateWidget, IDatetimeWidget, \ |
24 ITimeWidget, \ |
24 ITimeWidget, \ |
25 IColorWidget, IHTMLWidget, ISelect2Widget, ITextLineListWidget, ISEOTextLineWidget |
25 IColorWidget, IHTMLWidget, ISelect2Widget, ITextLineListWidget, ISEOTextLineWidget, IActionWidget |
26 from pyams_form.schema import IResetButton, ICloseButton |
26 from pyams_form.schema import IResetButton, ICloseButton, IActionButton |
27 from pyams_skin.interfaces.tinymce import ITinyMCEConfiguration |
27 from pyams_skin.interfaces.tinymce import ITinyMCEConfiguration |
28 from pyams_utils.schema import IColorField, IHTMLField, ITextLineListField |
28 from pyams_utils.schema import IColorField, IHTMLField, ITextLineListField |
29 from pyramid.interfaces import IRequest |
29 from pyramid.interfaces import IRequest |
30 from z3c.form.interfaces import INPUT_MODE, DISPLAY_MODE, IFieldWidget, IButtonAction, IWidgetLayoutTemplate, \ |
30 from z3c.form.interfaces import INPUT_MODE, DISPLAY_MODE, IFieldWidget, IButtonAction, IWidgetLayoutTemplate, \ |
31 IDataConverter |
31 IDataConverter |
35 # import packages |
35 # import packages |
36 from pyams_utils.adapter import adapter_config |
36 from pyams_utils.adapter import adapter_config |
37 from pyams_utils.timezone import tztime, localgmtime |
37 from pyams_utils.timezone import tztime, localgmtime |
38 from pyramid.exceptions import ConfigurationError |
38 from pyramid.exceptions import ConfigurationError |
39 from z3c.form.action import Action |
39 from z3c.form.action import Action |
|
40 from z3c.form.browser.button import ButtonWidget |
40 from z3c.form.browser.select import SelectWidget |
41 from z3c.form.browser.select import SelectWidget |
41 from z3c.form.browser.submit import SubmitWidget |
42 from z3c.form.browser.submit import SubmitWidget |
42 from z3c.form.browser.text import TextWidget |
43 from z3c.form.browser.text import TextWidget |
43 from z3c.form.browser.textarea import TextAreaWidget |
44 from z3c.form.browser.textarea import TextAreaWidget |
44 from z3c.form.button import ButtonAction |
45 from z3c.form.button import ButtonAction |
45 from z3c.form.converter import BaseDataConverter, DatetimeDataConverter as BaseDatetimeDataConverter |
46 from z3c.form.converter import BaseDataConverter, DatetimeDataConverter as BaseDatetimeDataConverter |
46 from z3c.form.widget import FieldWidget, WidgetTemplateFactory, WidgetLayoutFactory |
47 from z3c.form.widget import FieldWidget, WidgetTemplateFactory, WidgetLayoutFactory |
47 from zope.interface import implementer_only, directlyProvides, Interface |
48 from zope.interface import implementer_only, directlyProvides, Interface |
|
49 from zope.schema.fieldproperty import FieldProperty |
48 |
50 |
49 from pyams_form import _ |
51 from pyams_form import _ |
50 |
52 |
51 |
53 |
52 # |
54 # |
207 |
209 |
208 def __init__(self, request, field): |
210 def __init__(self, request, field): |
209 Action.__init__(self, request, field.title) |
211 Action.__init__(self, request, field.title) |
210 CloseWidget.__init__(self, request) |
212 CloseWidget.__init__(self, request) |
211 self.field = field |
213 self.field = field |
|
214 |
|
215 |
|
216 # |
|
217 # Action button widget and action |
|
218 # |
|
219 |
|
220 @widgettemplate_config(mode=INPUT_MODE, template='templates/action-input.pt', layer=IFormLayer) |
|
221 @widgettemplate_config(mode=DISPLAY_MODE, template='templates/action-display.pt', layer=IFormLayer) |
|
222 @implementer_only(IActionWidget) |
|
223 class ActionWidget(ButtonWidget): |
|
224 """A dialog action button""" |
|
225 |
|
226 label_css_class = FieldProperty(IActionWidget['label_css_class']) |
|
227 click_handler = FieldProperty(IActionWidget['click_handler']) |
|
228 url = FieldProperty(IActionWidget['url']) |
|
229 modal_target = FieldProperty(IActionWidget['modal_target']) |
|
230 |
|
231 |
|
232 @adapter_config(context=(IActionButton, IFormLayer), provides=IFieldWidget) |
|
233 def ActionFieldWidget(field, request): |
|
234 action = FieldWidget(field, ActionWidget(request)) |
|
235 action.value = field.title |
|
236 return action |
|
237 |
|
238 |
|
239 @adapter_config(context=(IFormLayer, IActionButton), provides=IButtonAction) |
|
240 class ActionButtonAction(ActionWidget, ButtonAction): |
|
241 """Action button action""" |
|
242 |
|
243 def __init__(self, request, field): |
|
244 ActionWidget.__init__(self, request) |
|
245 Action.__init__(self, request, field.title) |
|
246 self.field = field |
|
247 self.label_css_class = field.label_css_class |
|
248 self.click_handler = field.click_handler |
|
249 self.url = field.url |
|
250 self.modal_target = field.modal_target |
212 |
251 |
213 |
252 |
214 # |
253 # |
215 # Date widget |
254 # Date widget |
216 # |
255 # |