src/pyams_content/component/paragraph/zmi/header.py
changeset 420 edf9ce1b3f69
parent 415 43f42d74cdb8
child 432 a068d20dc9ae
equal deleted inserted replaced
419:824fef808845 420:edf9ce1b3f69
    29 
    29 
    30 # import packages
    30 # import packages
    31 from pyams_content.component.paragraph.header import HeaderParagraph
    31 from pyams_content.component.paragraph.header import HeaderParagraph
    32 from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \
    32 from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \
    33     BaseParagraphAddMenu, BaseParagraphPropertiesEditForm
    33     BaseParagraphAddMenu, BaseParagraphPropertiesEditForm
       
    34 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
    34 from pyams_pagelet.pagelet import pagelet_config
    35 from pyams_pagelet.pagelet import pagelet_config
    35 from pyams_template.template import template_config
       
    36 from pyams_utils.adapter import adapter_config
    36 from pyams_utils.adapter import adapter_config
    37 from pyams_viewlet.viewlet import viewlet_config, BaseContentProvider
    37 from pyams_viewlet.viewlet import viewlet_config, BaseContentProvider
    38 from pyams_zmi.form import AdminDialogAddForm
    38 from pyams_zmi.form import AdminDialogAddForm
    39 from pyramid.view import view_config
    39 from pyramid.view import view_config
    40 from z3c.form import field, button
    40 from z3c.form import field, button
    60     """Header paragraph add form"""
    60     """Header paragraph add form"""
    61 
    61 
    62     legend = _("Add new header paragraph")
    62     legend = _("Add new header paragraph")
    63     icon_css_class = 'fa fa-fw fa-header'
    63     icon_css_class = 'fa fa-fw fa-header'
    64 
    64 
    65     fields = field.Fields(IHeaderParagraph).select('header')
    65     fields = field.Fields(IHeaderParagraph).select('header', 'renderer')
    66     ajax_handler = 'add-header-paragraph.json'
    66     ajax_handler = 'add-header-paragraph.json'
    67     edit_permission = MANAGE_CONTENT_PERMISSION
    67     edit_permission = MANAGE_CONTENT_PERMISSION
    68 
    68 
    69     def updateWidgets(self, prefix=None):
    69     def updateWidgets(self, prefix=None):
    70         super(HeaderParagraphAddForm, self).updateWidgets(prefix)
    70         super(HeaderParagraphAddForm, self).updateWidgets(prefix)
    90     """Header paragraph properties edit form"""
    90     """Header paragraph properties edit form"""
    91 
    91 
    92     legend = _("Edit header paragraph properties")
    92     legend = _("Edit header paragraph properties")
    93     icon_css_class = 'fa fa-fw fa-header'
    93     icon_css_class = 'fa fa-fw fa-header'
    94 
    94 
    95     fields = field.Fields(IHeaderParagraph).select('header')
    95     fields = field.Fields(IHeaderParagraph).select('header', 'renderer')
       
    96     fields['renderer'].widgetFactory = RendererFieldWidget
       
    97 
    96     ajax_handler = 'properties.json'
    98     ajax_handler = 'properties.json'
    97     edit_permission = MANAGE_CONTENT_PERMISSION
    99     edit_permission = MANAGE_CONTENT_PERMISSION
    98 
   100 
    99     def updateWidgets(self, prefix=None):
   101     def updateWidgets(self, prefix=None):
   100         super(HeaderParagraphPropertiesEditForm, self).updateWidgets(prefix)
   102         super(HeaderParagraphPropertiesEditForm, self).updateWidgets(prefix)
   129 
   131 
   130     legend = None
   132     legend = None
   131     label_css_class = 'control-label col-md-2'
   133     label_css_class = 'control-label col-md-2'
   132     input_css_class = 'col-md-10'
   134     input_css_class = 'col-md-10'
   133 
   135 
       
   136     ajax_handler = 'inner-properties.json'
       
   137 
   134     @property
   138     @property
   135     def buttons(self):
   139     def buttons(self):
   136         if self.mode == INPUT_MODE:
   140         if self.mode == INPUT_MODE:
   137             return button.Buttons(IEditFormButtons)
   141             return button.Buttons(IEditFormButtons)
   138         else:
   142         else:
   139             return button.Buttons()
   143             return button.Buttons()
   140 
   144 
   141 
   145 
       
   146 @view_config(name='inner-properties.json', context=IHeaderParagraph, request_type=IPyAMSLayer,
       
   147              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   148 class HeaderParagraphInnerAJAXEditForm(BaseParagraphAJAXEditForm, HeaderParagraphInnerEditForm):
       
   149     """Header paragraph inner edit form, JSON renderer"""
       
   150 
       
   151     def get_ajax_output(self, changes):
       
   152         output = super(HeaderParagraphInnerAJAXEditForm, self).get_ajax_output(changes)
       
   153         updated = changes.get(IHeaderParagraph, ())
       
   154         if 'renderer' in updated:
       
   155             form = HeaderParagraphInnerEditForm(self.context, self.request)
       
   156             form.update()
       
   157             output.setdefault('events', []).append({
       
   158                 'event': 'myams.refresh',
       
   159                 'options': {
       
   160                     'object_id': '{0}_{1}_{2}'.format(
       
   161                         self.context.__class__.__name__,
       
   162                         getattr(form.getContent(), '__name__', 'noname').replace('++', ''),
       
   163                         form.id),
       
   164                     'content': form.render()
       
   165                 }
       
   166             })
       
   167         return output
       
   168 
       
   169 
   142 #
   170 #
   143 # HTML paragraph preview
   171 # Header paragraph preview
   144 #
   172 #
   145 
   173 
   146 @adapter_config(context=(IHeaderParagraph, IPyAMSLayer), provides=IParagraphPreview)
   174 @adapter_config(context=(IHeaderParagraph, IPyAMSLayer), provides=IParagraphPreview)
   147 @template_config(template='templates/header-preview.pt', layer=IPyAMSLayer)
       
   148 class HeaderParagraphPreview(BaseContentProvider):
   175 class HeaderParagraphPreview(BaseContentProvider):
   149     """Header paragraph preview"""
   176     """Header paragraph preview"""
       
   177 
       
   178     def __init__(self, context, request):
       
   179         super(HeaderParagraphPreview, self).__init__(context, request)
       
   180         self.renderer = self.context.get_renderer()
   150 
   181 
   151     language = None
   182     language = None
   152 
   183 
   153     def update(self):
   184     def update(self):
   154         i18n = II18n(self.context)
   185         if self.renderer is not None:
   155         if self.language:
   186             self.renderer.language = self.language
   156             for attr in ('header', ):
   187             self.renderer.update()
   157                 setattr(self, attr, i18n.get_attribute(attr, self.language, request=self.request))
   188 
       
   189     def render(self):
       
   190         if self.renderer is not None:
       
   191             return self.renderer.render()
   158         else:
   192         else:
   159             for attr in ('header', ):
   193             return ''
   160                 setattr(self, attr, i18n.query_attribute(attr, request=self.request))