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