src/pyams_form/widget/__init__.py
changeset 104 659ab1e14dca
parent 73 d07ddd028cd0
child 128 26852816c2c2
equal deleted inserted replaced
103:d06578da5e84 104:659ab1e14dca
    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 #