src/pyams_content/component/paragraph/zmi/milestone.py
changeset 591 b694d5667d17
parent 589 7a2af6e086a6
child 608 03a373d91db5
equal deleted inserted replaced
590:4fafaf94701d 591:b694d5667d17
    34 # import packages
    34 # import packages
    35 from pyams_content.component.paragraph.milestone import MilestoneParagraph, Milestone
    35 from pyams_content.component.paragraph.milestone import MilestoneParagraph, Milestone
    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_switched_table_refresh_event, get_json_table_row_refresh_event, \
    44 from pyams_skin.event import get_json_switched_table_refresh_event, get_json_table_row_refresh_event, \
    80     paragraph_type = MILESTONE_PARAGRAPH_TYPE
    80     paragraph_type = MILESTONE_PARAGRAPH_TYPE
    81     
    81     
    82     
    82     
    83 @pagelet_config(name='add-milestone-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    83 @pagelet_config(name='add-milestone-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    84                 permission=MANAGE_CONTENT_PERMISSION)
    84                 permission=MANAGE_CONTENT_PERMISSION)
       
    85 @ajax_config(name='add-milestone-paragraph.json', context=IParagraphContainerTarget, layer=IPyAMSLayer,
       
    86              base=BaseParagraphAJAXAddForm)
    85 class MilestoneParagraphAddForm(AdminDialogAddForm):
    87 class MilestoneParagraphAddForm(AdminDialogAddForm):
    86     """Milestone paragraph add form"""
    88     """Milestone paragraph add form"""
    87     
    89     
    88     legend = _("Add new milestone paragraph")
    90     legend = _("Add new milestone paragraph")
    89     icon_css_class = 'fa fa-fw fa-arrows-h'
    91     icon_css_class = 'fa fa-fw fa-arrows-h'
    90     
    92 
    91     fields = field.Fields(IMilestoneParagraph).select('title', 'renderer')
    93     fields = field.Fields(IMilestoneParagraph).select('title', 'renderer')
    92     ajax_handler = 'add-milestone-paragraph.json'
       
    93     edit_permission = MANAGE_CONTENT_PERMISSION
    94     edit_permission = MANAGE_CONTENT_PERMISSION
    94     
    95 
    95     def create(self, data):
    96     def create(self, data):
    96         return MilestoneParagraph()
    97         return MilestoneParagraph()
    97     
    98     
    98     def add(self, object):
    99     def add(self, object):
    99         IParagraphContainer(self.context).append(object)
   100         IParagraphContainer(self.context).append(object)
   100         
   101 
   101         
   102 
   102 @view_config(name='add-milestone-paragraph.json', context=IParagraphContainerTarget, request_type=IPyAMSLayer,
       
   103              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   104 class MilestoneParagraphAJAXAddForm(BaseParagraphAJAXAddForm, MilestoneParagraphAddForm):
       
   105     """Milestone paragraph add form, JSON renderer"""
       
   106     
       
   107     
       
   108 @pagelet_config(name='properties.html', context=IMilestoneParagraph, layer=IPyAMSLayer,
   103 @pagelet_config(name='properties.html', context=IMilestoneParagraph, layer=IPyAMSLayer,
   109                 permission=MANAGE_CONTENT_PERMISSION)
   104                 permission=MANAGE_CONTENT_PERMISSION)
       
   105 @ajax_config(name='properties.json', context=IMilestoneParagraph, layer=IPyAMSLayer,
       
   106              base=BaseParagraphAJAXEditForm)
   110 class MilestoneParagraphPropertiesEditForm(BaseParagraphPropertiesEditForm):
   107 class MilestoneParagraphPropertiesEditForm(BaseParagraphPropertiesEditForm):
   111     """Milestone paragraph properties edit form"""
   108     """Milestone paragraph properties edit form"""
   112 
   109 
   113     prefix = 'milestones_properties.'
   110     prefix = 'milestones_properties.'
   114 
   111 
   121     icon_css_class = 'fa fa-fw fa-arrows-h'
   118     icon_css_class = 'fa fa-fw fa-arrows-h'
   122 
   119 
   123     fields = field.Fields(IMilestoneParagraph).select('title', 'renderer')
   120     fields = field.Fields(IMilestoneParagraph).select('title', 'renderer')
   124     fields['renderer'].widgetFactory = RendererFieldWidget
   121     fields['renderer'].widgetFactory = RendererFieldWidget
   125 
   122 
   126     ajax_handler = 'properties.json'
       
   127     edit_permission = MANAGE_CONTENT_PERMISSION
   123     edit_permission = MANAGE_CONTENT_PERMISSION
   128 
   124 
   129 
   125 
   130 @view_config(name='properties.json', context=IMilestoneParagraph, request_type=IPyAMSLayer,
       
   131              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   132 class MilestoneParagraphPropertiesAJAXEditForm(BaseParagraphAJAXEditForm, MilestoneParagraphPropertiesEditForm):
       
   133     """Milestone paragraph properties edit form, JSON renderer"""
       
   134 
       
   135 
       
   136 @adapter_config(context=(IMilestoneParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
   126 @adapter_config(context=(IMilestoneParagraph, IPyAMSLayer), provides=IParagraphInnerEditor)
       
   127 @ajax_config(name='inner-properties.json', context=IMilestoneParagraph, layer=IPyAMSLayer,
       
   128              base=BaseParagraphAJAXEditForm)
   137 @implementer(IInnerForm, IMilestonesParentForm)
   129 @implementer(IInnerForm, IMilestonesParentForm)
   138 class MilestoneParagraphInnerEditForm(MilestoneParagraphPropertiesEditForm):
   130 class MilestoneParagraphInnerEditForm(MilestoneParagraphPropertiesEditForm):
   139     """Milestone paragraph inner edit form"""
   131     """Milestone paragraph inner edit form"""
   140 
   132 
   141     legend = None
   133     legend = None
   142     ajax_handler = 'inner-properties.json'
       
   143 
   134 
   144     @property
   135     @property
   145     def buttons(self):
   136     def buttons(self):
   146         if self.mode == INPUT_MODE:
   137         if self.mode == INPUT_MODE:
   147             return button.Buttons(IParagraphEditFormButtons)
   138             return button.Buttons(IParagraphEditFormButtons)
   148         else:
   139         else:
   149             return button.Buttons()
   140             return button.Buttons()
   150 
   141 
   151 
       
   152 @view_config(name='inner-properties.json', context=IMilestoneParagraph, request_type=IPyAMSLayer,
       
   153              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   154 class MilestoneParagraphInnerAJAXEditForm(BaseParagraphAJAXEditForm, MilestoneParagraphInnerEditForm):
       
   155     """Milestones paragraph inner edit form, JSON renderer"""
       
   156 
       
   157     def get_ajax_output(self, changes):
   142     def get_ajax_output(self, changes):
   158         output = super(MilestoneParagraphInnerAJAXEditForm, self).get_ajax_output(changes)
   143         output = super(self.__class__, self).get_ajax_output(changes)
   159         updated = changes.get(IMilestoneParagraph, ())
   144         updated = changes.get(IMilestoneParagraph, ())
   160         if 'renderer' in updated:
   145         if 'renderer' in updated:
   161             form = MilestoneParagraphInnerEditForm(self.context, self.request)
   146             form = MilestoneParagraphInnerEditForm(self.context, self.request)
   162             form.update()
   147             form.update()
   163             output.setdefault('events', []) \
   148             output.setdefault('events', []) \
   317     modal_target = True
   302     modal_target = True
   318 
   303 
   319 
   304 
   320 @pagelet_config(name='add-milestone.html', context=IMilestoneContainerTarget, layer=IPyAMSLayer,
   305 @pagelet_config(name='add-milestone.html', context=IMilestoneContainerTarget, layer=IPyAMSLayer,
   321                 permission=MANAGE_CONTENT_PERMISSION)
   306                 permission=MANAGE_CONTENT_PERMISSION)
       
   307 @ajax_config(name='add-milestone.json', context=IParagraphContainerTarget, layer=IPyAMSLayer,
       
   308              base=AJAXAddForm)
   322 class MilestoneAddForm(AdminDialogAddForm):
   309 class MilestoneAddForm(AdminDialogAddForm):
   323     """Milestone add form"""
   310     """Milestone add form"""
   324 
   311 
   325     legend = _("Add new milestone")
   312     legend = _("Add new milestone")
   326     icon_css_class = 'fa fa-fw fa-arrow-h'
   313     icon_css_class = 'fa fa-fw fa-arrow-h'
   327 
   314 
   328     fields = field.Fields(IMilestone).omit('__parent__', '__name__', 'visible')
   315     fields = field.Fields(IMilestone).omit('__parent__', '__name__', 'visible')
   329     ajax_handler = 'add-milestone.json'
       
   330     edit_permission = MANAGE_CONTENT_PERMISSION
   316     edit_permission = MANAGE_CONTENT_PERMISSION
   331 
   317 
   332     def create(self, data):
   318     def create(self, data):
   333         return Milestone()
   319         return Milestone()
   334 
   320 
   335     def add(self, object):
   321     def add(self, object):
   336         IMilestoneContainer(self.context).append(object)
   322         IMilestoneContainer(self.context).append(object)
   337 
       
   338 
       
   339 @view_config(name='add-milestone.json', context=IMilestoneContainerTarget, request_type=IPyAMSLayer,
       
   340              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   341 class MilestoneAJAXAddForm(AJAXAddForm, MilestoneAddForm):
       
   342     """Milestone add form, JSON renderer"""
       
   343 
   323 
   344     def get_ajax_output(self, changes):
   324     def get_ajax_output(self, changes):
   345         return {
   325         return {
   346             'status': 'success',
   326             'status': 'success',
   347             'message': self.request.localizer.translate(_("Milestone was correctly added")),
   327             'message': self.request.localizer.translate(_("Milestone was correctly added")),
   348             'events': [get_json_switched_table_refresh_event(self.context, self.request, MilestonesTable)]
   328             'events': [get_json_switched_table_refresh_event(self.context, self.request, MilestonesTable)]
   349         }
   329         }
   350 
   330 
   351 
   331 
   352 @pagelet_config(name='properties.html', context=IMilestone, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
   332 @pagelet_config(name='properties.html', context=IMilestone, layer=IPyAMSLayer, permission=MANAGE_CONTENT_PERMISSION)
       
   333 @ajax_config(name='properties.json', context=IMilestone, layer=IPyAMSLayer)
   353 class MilestonePropertiesEditForm(AdminDialogEditForm):
   334 class MilestonePropertiesEditForm(AdminDialogEditForm):
   354     """Milestone properties edit form"""
   335     """Milestone properties edit form"""
   355 
   336 
   356     prefix = 'milestone_properties.'
   337     prefix = 'milestone_properties.'
   357 
   338 
   358     legend = _("Edit milestone properties")
   339     legend = _("Edit milestone properties")
   359     icon_css_class = 'fa fa-fw fa-arrows-h'
   340     icon_css_class = 'fa fa-fw fa-arrows-h'
   360 
   341 
   361     fields = field.Fields(IMilestone).omit('__parent__', '__name__', 'visible')
   342     fields = field.Fields(IMilestone).omit('__parent__', '__name__', 'visible')
   362     ajax_handler = 'properties.json'
       
   363     edit_permission = MANAGE_CONTENT_PERMISSION
   343     edit_permission = MANAGE_CONTENT_PERMISSION
   364 
   344 
   365 
       
   366 @view_config(name='properties.json', context=IMilestone, request_type=IPyAMSLayer,
       
   367              permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True)
       
   368 class MilestonePropertiesAJAXEditForm(AJAXEditForm, MilestonePropertiesEditForm):
       
   369     """Milestone properties edit form, JSON renderer"""
       
   370 
       
   371     def get_ajax_output(self, changes):
   345     def get_ajax_output(self, changes):
   372         output = super(MilestonePropertiesAJAXEditForm, self).get_ajax_output(changes)
   346         output = super(self.__class__, self).get_ajax_output(changes)
   373         updated = changes.get(IMilestone, ())
   347         updated = changes.get(IMilestone, ())
   374         if ('title' in updated) or ('anchor' in updated):
   348         if ('title' in updated) or ('anchor' in updated):
   375             target = get_parent(self.context, IMilestoneContainerTarget)
   349             target = get_parent(self.context, IMilestoneContainerTarget)
   376             output.setdefault('events', []).append(get_json_table_row_refresh_event(target, self.request,
   350             output.setdefault('events', []).append(get_json_table_row_refresh_event(target, self.request,
   377                                                                                     MilestonesTable, self.context))
   351                                                                                     MilestonesTable, self.context))