src/pyams_content/component/paragraph/zmi/keynumber.py
changeset 591 b694d5667d17
parent 587 978dc30214ce
child 599 7f97d8cae72e
equal deleted inserted replaced
590:4fafaf94701d 591:b694d5667d17
    34 # import packages
    34 # import packages
    35 from pyams_content.component.paragraph.keynumber import KeyNumberParagraph, KeyNumber
    35 from pyams_content.component.paragraph.keynumber import KeyNumberParagraph, KeyNumber
    36 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
    36 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
    37     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm
    37     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm
    38 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
    38 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
    39 from pyams_form.form import AJAXAddForm, AJAXEditForm
    39 from pyams_form.form import AJAXAddForm, ajax_config
    40 from pyams_form.security import ProtectedFormObjectMixin
    40 from pyams_form.security import ProtectedFormObjectMixin
    41 from pyams_i18n.column import I18nAttrColumn
    41 from pyams_i18n.column import I18nAttrColumn
    42 from pyams_pagelet.pagelet import pagelet_config
    42 from pyams_pagelet.pagelet import pagelet_config
    43 from pyams_skin.container import switch_element_visibility
    43 from pyams_skin.container import switch_element_visibility
    44 from pyams_skin.event import get_json_widget_refresh_event, get_json_switched_table_refresh_event, \
    44 from pyams_skin.event import get_json_widget_refresh_event, get_json_switched_table_refresh_event, \
    79     paragraph_type = KEYNUMBER_PARAGRAPH_TYPE
    79     paragraph_type = KEYNUMBER_PARAGRAPH_TYPE
    80     
    80     
    81     
    81     
    82 @pagelet_config(name='add-keynumber-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    82 @pagelet_config(name='add-keynumber-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    83                 permission=MANAGE_CONTENT_PERMISSION)
    83                 permission=MANAGE_CONTENT_PERMISSION)
       
    84 @ajax_config(name='add-keynumber-paragraph.json', context=IParagraphContainerTarget, layer=IPyAMSLayer,
       
    85              base=BaseParagraphAJAXAddForm)
    84 class KeyNumberParagraphAddForm(AdminDialogAddForm):
    86 class KeyNumberParagraphAddForm(AdminDialogAddForm):
    85     """Key number paragraph add form"""
    87     """Key number paragraph add form"""
    86     
    88     
    87     legend = _("Add new key number paragraph")
    89     legend = _("Add new key number paragraph")
    88     icon_css_class = 'fa fa-fw fa-dashboard'
    90     icon_css_class = 'fa fa-fw fa-dashboard'
    89     
    91     
    90     fields = field.Fields(IKeyNumberParagraph).select('title', 'renderer')
    92     fields = field.Fields(IKeyNumberParagraph).select('title', 'renderer')
    91     ajax_handler = 'add-keynumber-paragraph.json'
       
    92     edit_permission = MANAGE_CONTENT_PERMISSION
    93     edit_permission = MANAGE_CONTENT_PERMISSION
    93     
    94     
    94     def create(self, data):
    95     def create(self, data):
    95         return KeyNumberParagraph()
    96         return KeyNumberParagraph()
    96     
    97     
    97     def add(self, object):
    98     def add(self, object):
    98         IParagraphContainer(self.context).append(object)
    99         IParagraphContainer(self.context).append(object)
    99         
   100 
   100         
       
   101 @view_config(name='add-keynumber-paragraph.json', context=IParagraphContainerTarget, request_type=IPyAMSLayer,
       
   102              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   103 class KeyNumberParagraphAJAXAddForm(BaseParagraphAJAXAddForm, KeyNumberParagraphAddForm):
       
   104     """Key number paragraph add form, JSON renderer"""
       
   105     
       
   106     
   101     
   107 @pagelet_config(name='properties.html', context=IKeyNumberParagraph, layer=IPyAMSLayer,
   102 @pagelet_config(name='properties.html', context=IKeyNumberParagraph, layer=IPyAMSLayer,
   108                 permission=MANAGE_CONTENT_PERMISSION)
   103                 permission=MANAGE_CONTENT_PERMISSION)
       
   104 @ajax_config(name='properties.json', context=IKeyNumberParagraph, layer=IPyAMSLayer,
       
   105              base=BaseParagraphAJAXEditForm)
   109 class KeyNumberParagraphPropertiesEditForm(BaseParagraphPropertiesEditForm):
   106 class KeyNumberParagraphPropertiesEditForm(BaseParagraphPropertiesEditForm):
   110     """Key number paragraph properties edit form"""
   107     """Key number paragraph properties edit form"""
   111 
   108 
   112     prefix = 'keynumbers_properties.'
   109     prefix = 'keynumbers_properties.'
   113 
   110 
   120     icon_css_class = 'fa fa-fw fa-dashboard'
   117     icon_css_class = 'fa fa-fw fa-dashboard'
   121 
   118 
   122     fields = field.Fields(IKeyNumberParagraph).select('title', 'renderer')
   119     fields = field.Fields(IKeyNumberParagraph).select('title', 'renderer')
   123     fields['renderer'].widgetFactory = RendererFieldWidget
   120     fields['renderer'].widgetFactory = RendererFieldWidget
   124 
   121 
   125     ajax_handler = 'properties.json'
       
   126     edit_permission = MANAGE_CONTENT_PERMISSION
   122     edit_permission = MANAGE_CONTENT_PERMISSION
   127 
   123 
   128 
   124 
   129 @view_config(name='properties.json', context=IKeyNumberParagraph, request_type=IPyAMSLayer,
       
   130              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   131 class KeyNumberParagraphPropertiesAJAXEditForm(BaseParagraphAJAXEditForm, KeyNumberParagraphPropertiesEditForm):
       
   132     """Key number paragraph properties edit form, JSON renderer"""
       
   133 
       
   134 
       
   135 @adapter_config(context=(IKeyNumberParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
   125 @adapter_config(context=(IKeyNumberParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
       
   126 @ajax_config(name='inner-properties.json', context=IKeyNumberParagraph, layer=IPyAMSLayer,
       
   127              base=BaseParagraphAJAXEditForm)
   136 @implementer(IInnerForm, IKeyNumbersParentForm)
   128 @implementer(IInnerForm, IKeyNumbersParentForm)
   137 class KeyNumberParagraphInnerEditForm(KeyNumberParagraphPropertiesEditForm):
   129 class KeyNumberParagraphInnerEditForm(KeyNumberParagraphPropertiesEditForm):
   138     """Key number paragraph inner edit form"""
   130     """Key number paragraph inner edit form"""
   139 
   131 
   140     legend = None
   132     legend = None
   141     ajax_handler = 'inner-properties.json'
       
   142 
   133 
   143     @property
   134     @property
   144     def buttons(self):
   135     def buttons(self):
   145         if self.mode == INPUT_MODE:
   136         if self.mode == INPUT_MODE:
   146             return button.Buttons(IParagraphEditFormButtons)
   137             return button.Buttons(IParagraphEditFormButtons)
   147         else:
   138         else:
   148             return button.Buttons()
   139             return button.Buttons()
   149 
   140 
   150 
       
   151 @view_config(name='inner-properties.json', context=IKeyNumberParagraph, request_type=IPyAMSLayer,
       
   152              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   153 class KeyNumberParagraphInnerAJAXEditForm(BaseParagraphAJAXEditForm, KeyNumberParagraphInnerEditForm):
       
   154     """Key numbers paragraph inner edit form, JSON renderer"""
       
   155 
       
   156     def get_ajax_output(self, changes):
   141     def get_ajax_output(self, changes):
   157         output = super(KeyNumberParagraphInnerAJAXEditForm, self).get_ajax_output(changes)
   142         output = super(self.__class__, self).get_ajax_output(changes)
   158         updated = changes.get(IKeyNumberParagraph, ())
   143         updated = changes.get(IKeyNumberParagraph, ())
   159         if 'renderer' in updated:
   144         if 'renderer' in updated:
   160             output.setdefault('events', []).append(
   145             output.setdefault('events', []).append(
   161                 get_json_widget_refresh_event(self.context, self.request, KeyNumberParagraphInnerEditForm, 'renderer'))
   146                 get_json_widget_refresh_event(self.context, self.request, KeyNumberParagraphInnerEditForm, 'renderer'))
   162         return output
   147         return output
   300     modal_target = True
   285     modal_target = True
   301 
   286 
   302 
   287 
   303 @pagelet_config(name='add-keynumber.html', context=IKeyNumberContainerTarget, layer=IPyAMSLayer,
   288 @pagelet_config(name='add-keynumber.html', context=IKeyNumberContainerTarget, layer=IPyAMSLayer,
   304                 permission=MANAGE_CONTENT_PERMISSION)
   289                 permission=MANAGE_CONTENT_PERMISSION)
       
   290 @ajax_config(name='add-keynumber.json', context=IParagraphContainerTarget, layer=IPyAMSLayer,
       
   291              base=AJAXAddForm)
   305 class KeyNumberAddForm(AdminDialogAddForm):
   292 class KeyNumberAddForm(AdminDialogAddForm):
   306     """Key number add form"""
   293     """Key number add form"""
   307 
   294 
   308     legend = _("Add new keynumber")
   295     legend = _("Add new keynumber")
   309     icon_css_class = 'fa fa-fw fa-dashboard'
   296     icon_css_class = 'fa fa-fw fa-dashboard'
   310 
   297 
   311     fields = field.Fields(IKeyNumber).omit('__parent__', '__name__', 'visible')
   298     fields = field.Fields(IKeyNumber).omit('__parent__', '__name__', 'visible')
   312     ajax_handler = 'add-keynumber.json'
       
   313     edit_permission = MANAGE_CONTENT_PERMISSION
   299     edit_permission = MANAGE_CONTENT_PERMISSION
   314 
   300 
   315     def create(self, data):
   301     def create(self, data):
   316         return KeyNumber()
   302         return KeyNumber()
   317 
   303 
   318     def add(self, object):
   304     def add(self, object):
   319         IKeyNumberContainer(self.context).append(object)
   305         IKeyNumberContainer(self.context).append(object)
   320 
       
   321 
       
   322 @view_config(name='add-keynumber.json', context=IKeyNumberContainerTarget, request_type=IPyAMSLayer,
       
   323              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   324 class KeyNumberAJAXAddForm(AJAXAddForm, KeyNumberAddForm):
       
   325     """Key number add form, JSON renderer"""
       
   326 
   306 
   327     def get_ajax_output(self, changes):
   307     def get_ajax_output(self, changes):
   328         return {
   308         return {
   329             'status': 'success',
   309             'status': 'success',
   330             'message': self.request.localizer.translate(_("Key number was correctly added")),
   310             'message': self.request.localizer.translate(_("Key number was correctly added")),
   331             'events': [get_json_switched_table_refresh_event(self.context, self.request, KeyNumbersTable), ]
   311             'events': [get_json_switched_table_refresh_event(self.context, self.request, KeyNumbersTable), ]
   332         }
   312         }
   333 
   313 
   334 
   314 
   335 @pagelet_config(name='properties.html', context=IKeyNumber, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
   315 @pagelet_config(name='properties.html', context=IKeyNumber, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
       
   316 @ajax_config(name='properties.json', context=IKeyNumber, layer=IPyAMSLayer)
   336 class KeyNumberPropertiesEditForm(AdminDialogEditForm):
   317 class KeyNumberPropertiesEditForm(AdminDialogEditForm):
   337     """Key number properties edit form"""
   318     """Key number properties edit form"""
   338 
   319 
   339     prefix = 'keynumber_properties.'
   320     prefix = 'keynumber_properties.'
   340 
   321 
   341     legend = _("Edit keynumber properties")
   322     legend = _("Edit keynumber properties")
   342     icon_css_class = 'fa fa-fw fa-dashboard'
   323     icon_css_class = 'fa fa-fw fa-dashboard'
   343 
   324 
   344     fields = field.Fields(IKeyNumber).omit('__parent__', '__name__', 'visible')
   325     fields = field.Fields(IKeyNumber).omit('__parent__', '__name__', 'visible')
   345     ajax_handler = 'properties.json'
       
   346     edit_permission = MANAGE_CONTENT_PERMISSION
   326     edit_permission = MANAGE_CONTENT_PERMISSION
   347 
   327 
   348 
       
   349 @view_config(name='properties.json', context=IKeyNumber, request_type=IPyAMSLayer,
       
   350              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   351 class KeyNumberPropertiesAJAXEditForm(AJAXEditForm, KeyNumberPropertiesEditForm):
       
   352     """Key number properties edit form, JSON renderer"""
       
   353 
       
   354     def get_ajax_output(self, changes):
   328     def get_ajax_output(self, changes):
   355         output = super(KeyNumberPropertiesAJAXEditForm, self).get_ajax_output(changes)
   329         output = super(self.__class__, self).get_ajax_output(changes)
   356         updated = changes.get(IKeyNumber, ())
   330         updated = changes.get(IKeyNumber, ())
   357         if updated:
   331         if updated:
   358             target = get_parent(self.context, IKeyNumberContainerTarget)
   332             target = get_parent(self.context, IKeyNumberContainerTarget)
   359             output.setdefault('events', []).append(
   333             output.setdefault('events', []).append(
   360                 get_json_table_row_refresh_event(target, self.request, KeyNumbersTable, self.context))
   334                 get_json_table_row_refresh_event(target, self.request, KeyNumbersTable, self.context))