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)) |