src/pyams_content/component/paragraph/zmi/frame.py
changeset 591 b694d5667d17
parent 555 8e8a14452567
child 633 7ebe8a011c16
equal deleted inserted replaced
590:4fafaf94701d 591:b694d5667d17
    36     BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, get_json_paragraph_toolbar_refresh_event, \
    36     BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, get_json_paragraph_toolbar_refresh_event, \
    37     IParagraphEditFormButtons
    37     IParagraphEditFormButtons
    38 from pyams_content.component.paragraph.zmi.container import ParagraphContainerTable, \
    38 from pyams_content.component.paragraph.zmi.container import ParagraphContainerTable, \
    39     ParagraphTitleToolbarViewletManager
    39     ParagraphTitleToolbarViewletManager
    40 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
    40 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
       
    41 from pyams_form.form import ajax_config
    41 from pyams_pagelet.pagelet import pagelet_config
    42 from pyams_pagelet.pagelet import pagelet_config
    42 from pyams_skin.event import get_json_switched_table_refresh_event, get_json_widget_refresh_event
    43 from pyams_skin.event import get_json_switched_table_refresh_event, get_json_widget_refresh_event
    43 from pyams_utils.adapter import adapter_config, ContextRequestAdapter
    44 from pyams_utils.adapter import adapter_config, ContextRequestAdapter
    44 from pyams_utils.traversing import get_parent
    45 from pyams_utils.traversing import get_parent
    45 from pyams_viewlet.viewlet import viewlet_config
    46 from pyams_viewlet.viewlet import viewlet_config
    46 from pyams_zmi.form import AdminDialogAddForm
    47 from pyams_zmi.form import AdminDialogAddForm
    47 from pyramid.view import view_config
       
    48 from z3c.form import field, button
    48 from z3c.form import field, button
    49 from zope.interface import implementer, Interface
    49 from zope.interface import implementer, Interface
    50 
    50 
    51 from pyams_content import _
    51 from pyams_content import _
    52 
    52 
    87     paragraph_type = FRAME_PARAGRAPH_TYPE
    87     paragraph_type = FRAME_PARAGRAPH_TYPE
    88 
    88 
    89 
    89 
    90 @pagelet_config(name='add-frame-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    90 @pagelet_config(name='add-frame-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    91                 permission=MANAGE_CONTENT_PERMISSION)
    91                 permission=MANAGE_CONTENT_PERMISSION)
       
    92 @ajax_config(name='add-frame-paragraph.json', context=IParagraphContainerTarget, request_type=IPyAMSLayer,
       
    93              base=BaseParagraphAJAXAddForm)
    92 @implementer(IFrameParagraphForm)
    94 @implementer(IFrameParagraphForm)
    93 class FrameParagraphAddForm(AdminDialogAddForm):
    95 class FrameParagraphAddForm(AdminDialogAddForm):
    94     """Framed text paragraph add form"""
    96     """Framed text paragraph add form"""
    95 
    97 
    96     legend = _("Add new framed text paragraph")
    98     legend = _("Add new framed text paragraph")
    98     icon_css_class = 'fa fa-fw fa-list-alt'
   100     icon_css_class = 'fa fa-fw fa-list-alt'
    99     label_css_class = 'control-label col-md-2'
   101     label_css_class = 'control-label col-md-2'
   100     input_css_class = 'col-md-10'
   102     input_css_class = 'col-md-10'
   101 
   103 
   102     fields = field.Fields(IFrameParagraph).omit('__parent__', '__name__', 'visible')
   104     fields = field.Fields(IFrameParagraph).omit('__parent__', '__name__', 'visible')
   103     ajax_handler = 'add-frame-paragraph.json'
       
   104     edit_permission = MANAGE_CONTENT_PERMISSION
   105     edit_permission = MANAGE_CONTENT_PERMISSION
   105 
   106 
   106     def updateWidgets(self, prefix=None):
   107     def updateWidgets(self, prefix=None):
   107         super(FrameParagraphAddForm, self).updateWidgets(prefix)
   108         super(FrameParagraphAddForm, self).updateWidgets(prefix)
   108         if 'body' in self.widgets:
   109         if 'body' in self.widgets:
   113 
   114 
   114     def add(self, object):
   115     def add(self, object):
   115         IParagraphContainer(self.context).append(object)
   116         IParagraphContainer(self.context).append(object)
   116 
   117 
   117 
   118 
   118 @view_config(name='add-frame-paragraph.json', context=IParagraphContainerTarget, request_type=IPyAMSLayer,
       
   119              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   120 class FrameParagraphAJAXAddForm(BaseParagraphAJAXAddForm, FrameParagraphAddForm):
       
   121     """Framed text paragraph add form, JSON renderer"""
       
   122 
       
   123 
       
   124 @pagelet_config(name='properties.html', context=IFrameParagraph, layer=IPyAMSLayer,
   119 @pagelet_config(name='properties.html', context=IFrameParagraph, layer=IPyAMSLayer,
   125                 permission=MANAGE_CONTENT_PERMISSION)
   120                 permission=MANAGE_CONTENT_PERMISSION)
       
   121 @ajax_config(name='properties.json', context=IFrameParagraph, request_type=IPyAMSLayer,
       
   122              base=BaseParagraphAJAXEditForm)
   126 @implementer(IFrameParagraphForm)
   123 @implementer(IFrameParagraphForm)
   127 class FrameParagraphPropertiesEditForm(BaseParagraphPropertiesEditForm):
   124 class FrameParagraphPropertiesEditForm(BaseParagraphPropertiesEditForm):
   128     """Framed text paragraph properties edit form"""
   125     """Framed text paragraph properties edit form"""
   129 
   126 
   130     prefix = 'frame_properties.'
   127     prefix = 'frame_properties.'
   136     input_css_class = 'col-md-10'
   133     input_css_class = 'col-md-10'
   137 
   134 
   138     fields = field.Fields(IFrameParagraph).omit('__parent__', '__name__', 'visible')
   135     fields = field.Fields(IFrameParagraph).omit('__parent__', '__name__', 'visible')
   139     fields['renderer'].widgetFactory = RendererFieldWidget
   136     fields['renderer'].widgetFactory = RendererFieldWidget
   140 
   137 
   141     ajax_handler = 'properties.json'
       
   142     edit_permission = MANAGE_CONTENT_PERMISSION
   138     edit_permission = MANAGE_CONTENT_PERMISSION
   143 
   139 
   144     def updateWidgets(self, prefix=None):
   140     def updateWidgets(self, prefix=None):
   145         super(FrameParagraphPropertiesEditForm, self).updateWidgets(prefix)
   141         super(FrameParagraphPropertiesEditForm, self).updateWidgets(prefix)
   146         if 'body' in self.widgets:
   142         if 'body' in self.widgets:
   148             for lang in body_widget.langs:
   144             for lang in body_widget.langs:
   149                 widget = body_widget.widgets[lang]
   145                 widget = body_widget.widgets[lang]
   150                 widget.id = '{id}_{name}'.format(id=widget.id, name=self.context.__name__)
   146                 widget.id = '{id}_{name}'.format(id=widget.id, name=self.context.__name__)
   151             body_widget.widget_css_class = 'textarea'
   147             body_widget.widget_css_class = 'textarea'
   152 
   148 
   153 
       
   154 @view_config(name='properties.json', context=IFrameParagraph, request_type=IPyAMSLayer,
       
   155              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   156 class FrameParagraphPropertiesAJAXEditForm(BaseParagraphAJAXEditForm, FrameParagraphPropertiesEditForm):
       
   157     """Framed text paragraph properties edit form, JSON renderer"""
       
   158 
       
   159     def get_ajax_output(self, changes):
   149     def get_ajax_output(self, changes):
   160         output = super(FrameParagraphPropertiesAJAXEditForm, self).get_ajax_output(changes)
   150         output = super(self.__class__, self).get_ajax_output(changes)
   161         if 'body' in changes.get(IFrameParagraph, ()):
   151         if 'body' in changes.get(IFrameParagraph, ()):
   162             # refresh associations count markers
   152             # refresh associations count markers
   163             parent = get_parent(self.context, IAssociationTarget)
   153             parent = get_parent(self.context, IAssociationTarget)
   164             output.setdefault('events', []).append(
   154             output.setdefault('events', []).append(
   165                 get_json_paragraph_toolbar_refresh_event(parent, self.request,
   155                 get_json_paragraph_toolbar_refresh_event(parent, self.request,
   169                 get_json_switched_table_refresh_event(self.context, self.request, AssociationsTable))
   159                 get_json_switched_table_refresh_event(self.context, self.request, AssociationsTable))
   170         return output
   160         return output
   171 
   161 
   172 
   162 
   173 @adapter_config(context=(IFrameParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
   163 @adapter_config(context=(IFrameParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
       
   164 @ajax_config(name='inner-properties.json', context=IFrameParagraph, layer=IPyAMSLayer,
       
   165              base=BaseParagraphAJAXEditForm)
   174 @implementer(IInnerForm, IPropertiesEditForm, IAssociationsParentForm)
   166 @implementer(IInnerForm, IPropertiesEditForm, IAssociationsParentForm)
   175 class FrameParagraphInnerEditForm(FrameParagraphPropertiesEditForm):
   167 class FrameParagraphInnerEditForm(FrameParagraphPropertiesEditForm):
   176     """Framed text paragraph inner edit form"""
   168     """Framed text paragraph inner edit form"""
   177 
   169 
   178     legend = None
   170     legend = None
   179     ajax_handler = 'inner-properties.json'
       
   180 
   171 
   181     @property
   172     @property
   182     def buttons(self):
   173     def buttons(self):
   183         if self.mode == INPUT_MODE:
   174         if self.mode == INPUT_MODE:
   184             return button.Buttons(IParagraphEditFormButtons)
   175             return button.Buttons(IParagraphEditFormButtons)
   185         else:
   176         else:
   186             return button.Buttons()
   177             return button.Buttons()
   187 
   178 
   188 
       
   189 @view_config(name='inner-properties.json', context=IFrameParagraph, request_type=IPyAMSLayer,
       
   190              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   191 class FrameParagraphInnerAJAXEditForm(BaseParagraphAJAXEditForm, FrameParagraphInnerEditForm):
       
   192     """Framed text paragraph inner edit form, JSON renderer"""
       
   193 
       
   194     def get_ajax_output(self, changes):
   179     def get_ajax_output(self, changes):
   195         output = super(FrameParagraphInnerAJAXEditForm, self).get_ajax_output(changes)
   180         output = super(self.__class__, self).get_ajax_output(changes)
   196         updated = changes.get(IFrameParagraph, ())
   181         updated = changes.get(IFrameParagraph, ())
   197         if 'renderer' in updated:
   182         if 'renderer' in updated:
   198             output.setdefault('events', []).append(
   183             output.setdefault('events', []).append(
   199                 get_json_widget_refresh_event(self.context, self.request, FrameParagraphInnerEditForm, 'renderer'))
   184                 get_json_widget_refresh_event(self.context, self.request, FrameParagraphInnerEditForm, 'renderer'))
   200         return output
   185         return output