29 # import packages |
29 # import packages |
30 from pyams_content.component.association.zmi import AssociationItemAJAXAddForm, AssociationItemAJAXEditForm |
30 from pyams_content.component.association.zmi import AssociationItemAJAXAddForm, AssociationItemAJAXEditForm |
31 from pyams_content.component.links import InternalLink, ExternalLink, MailtoLink |
31 from pyams_content.component.links import InternalLink, ExternalLink, MailtoLink |
32 from pyams_content.component.paragraph.zmi import get_json_paragraph_markers_refresh_event |
32 from pyams_content.component.paragraph.zmi import get_json_paragraph_markers_refresh_event |
33 from pyams_content.component.paragraph.zmi.container import ParagraphContainerCounterBase |
33 from pyams_content.component.paragraph.zmi.container import ParagraphContainerCounterBase |
|
34 from pyams_form.form import ajax_config |
34 from pyams_form.security import ProtectedFormObjectMixin |
35 from pyams_form.security import ProtectedFormObjectMixin |
35 from pyams_pagelet.pagelet import pagelet_config |
36 from pyams_pagelet.pagelet import pagelet_config |
36 from pyams_skin.viewlet.toolbar import ToolbarMenuItem |
37 from pyams_skin.viewlet.toolbar import ToolbarMenuItem |
37 from pyams_viewlet.viewlet import viewlet_config |
38 from pyams_viewlet.viewlet import viewlet_config |
38 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm |
39 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm |
39 from pyramid.view import view_config |
|
40 from z3c.form import field |
40 from z3c.form import field |
41 |
41 |
42 from pyams_content import _ |
42 from pyams_content import _ |
43 |
43 |
44 |
44 |
76 modal_target = True |
76 modal_target = True |
77 |
77 |
78 |
78 |
79 @pagelet_config(name='add-internal-link.html', context=ILinkContainerTarget, layer=IPyAMSLayer, |
79 @pagelet_config(name='add-internal-link.html', context=ILinkContainerTarget, layer=IPyAMSLayer, |
80 permission=MANAGE_CONTENT_PERMISSION) |
80 permission=MANAGE_CONTENT_PERMISSION) |
|
81 @ajax_config(name='add-internal-link.json', context=ILinkContainerTarget, layer=IPyAMSLayer, |
|
82 base=AssociationItemAJAXAddForm) |
81 class InternalLinkAddForm(AdminDialogAddForm): |
83 class InternalLinkAddForm(AdminDialogAddForm): |
82 """Internal link add form""" |
84 """Internal link add form""" |
83 |
85 |
84 legend = _("Add new internal link") |
86 legend = _("Add new internal link") |
85 icon_css_class = 'fa fa-fw fa-external-link-square fa-rotate-90' |
87 icon_css_class = 'fa fa-fw fa-external-link-square fa-rotate-90' |
86 |
88 |
87 fields = field.Fields(IInternalLink).select('reference', 'title', 'description') |
89 fields = field.Fields(IInternalLink).select('reference', 'title', 'description') |
88 ajax_handler = 'add-internal-link.json' |
|
89 edit_permission = MANAGE_CONTENT_PERMISSION |
90 edit_permission = MANAGE_CONTENT_PERMISSION |
90 |
91 |
91 def updateWidgets(self, prefix=None): |
92 def updateWidgets(self, prefix=None): |
92 super(InternalLinkAddForm, self).updateWidgets(prefix) |
93 super(InternalLinkAddForm, self).updateWidgets(prefix) |
93 if 'description' in self.widgets: |
94 if 'description' in self.widgets: |
97 return InternalLink() |
98 return InternalLink() |
98 |
99 |
99 def add(self, object): |
100 def add(self, object): |
100 IAssociationContainer(self.context).append(object) |
101 IAssociationContainer(self.context).append(object) |
101 |
102 |
102 |
103 def get_ajax_output(self, changes): |
103 @view_config(name='add-internal-link.json', context=ILinkContainerTarget, request_type=IPyAMSLayer, |
104 output = super(self.__class__, self).get_ajax_output(changes) |
104 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
|
105 class InternalLinkAJAXAddForm(AssociationItemAJAXAddForm, InternalLinkAddForm): |
|
106 """Internal link add form, JSON renderer""" |
|
107 |
|
108 def get_ajax_output(self, changes): |
|
109 output = super(InternalLinkAJAXAddForm, self).get_ajax_output(changes) |
|
110 if output: |
105 if output: |
111 output.setdefault('events', []).append(get_json_paragraph_markers_refresh_event(self.context, self.request, |
106 output.setdefault('events', []).append(get_json_paragraph_markers_refresh_event(self.context, self.request, |
112 self, InternalLinksCounter)) |
107 self, InternalLinksCounter)) |
113 return output |
108 return output |
114 |
109 |
115 |
110 |
116 @pagelet_config(name='properties.html', context=IInternalLink, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION) |
111 @pagelet_config(name='properties.html', context=IInternalLink, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION) |
|
112 @ajax_config(name='properties.json', context=IInternalLink, layer=IPyAMSLayer, |
|
113 permission=MANAGE_CONTENT_PERMISSION, base=AssociationItemAJAXEditForm) |
117 class InternalLinkPropertiesEditForm(AdminDialogEditForm): |
114 class InternalLinkPropertiesEditForm(AdminDialogEditForm): |
118 """Internal link properties edit form""" |
115 """Internal link properties edit form""" |
119 |
116 |
120 prefix = 'internallink_properties.' |
117 prefix = 'internallink_properties.' |
121 |
118 |
122 legend = _("Edit internal link properties") |
119 legend = _("Edit internal link properties") |
123 icon_css_class = 'fa fa-fw fa-external-link-square fa-rotate-90' |
120 icon_css_class = 'fa fa-fw fa-external-link-square fa-rotate-90' |
124 |
121 |
125 fields = field.Fields(IInternalLink).select('reference', 'title', 'description') |
122 fields = field.Fields(IInternalLink).select('reference', 'title', 'description') |
126 ajax_handler = 'properties.json' |
|
127 edit_permission = None # defined by IFormContextPermissionChecker adapter |
123 edit_permission = None # defined by IFormContextPermissionChecker adapter |
128 |
124 |
129 def updateWidgets(self, prefix=None): |
125 def updateWidgets(self, prefix=None): |
130 super(InternalLinkPropertiesEditForm, self).updateWidgets(prefix) |
126 super(InternalLinkPropertiesEditForm, self).updateWidgets(prefix) |
131 if 'description' in self.widgets: |
127 if 'description' in self.widgets: |
132 self.widgets['description'].widget_css_class = 'textarea' |
128 self.widgets['description'].widget_css_class = 'textarea' |
133 |
|
134 |
|
135 @view_config(name='properties.json', context=IInternalLink, request_type=IPyAMSLayer, |
|
136 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
|
137 class InternalLinkPropertiesAJAXEditForm(AssociationItemAJAXEditForm, InternalLinkPropertiesEditForm): |
|
138 """Internal link properties edit form, JSON renderer""" |
|
139 |
129 |
140 def get_ajax_output(self, changes): |
130 def get_ajax_output(self, changes): |
141 if ('title' in changes.get(IBaseLink, ())) or \ |
131 if ('title' in changes.get(IBaseLink, ())) or \ |
142 ('reference' in changes.get(IInternalLink, ())): |
132 ('reference' in changes.get(IInternalLink, ())): |
143 return self.get_associations_table() |
133 return self.get_associations_table() |
144 else: |
134 else: |
145 return super(InternalLinkPropertiesAJAXEditForm, self).get_ajax_output(changes) |
135 return super(self.__class__, self).get_ajax_output(changes) |
146 |
136 |
147 |
137 |
148 # |
138 # |
149 # External links views |
139 # External links views |
150 # |
140 # |
179 modal_target = True |
169 modal_target = True |
180 |
170 |
181 |
171 |
182 @pagelet_config(name='add-external-link.html', context=ILinkContainerTarget, layer=IPyAMSLayer, |
172 @pagelet_config(name='add-external-link.html', context=ILinkContainerTarget, layer=IPyAMSLayer, |
183 permission=MANAGE_CONTENT_PERMISSION) |
173 permission=MANAGE_CONTENT_PERMISSION) |
|
174 @ajax_config(name='add-external-link.json', context=ILinkContainerTarget, layer=IPyAMSLayer, |
|
175 base=AssociationItemAJAXAddForm) |
184 class ExternalLinkAddForm(AdminDialogAddForm): |
176 class ExternalLinkAddForm(AdminDialogAddForm): |
185 """External link add form""" |
177 """External link add form""" |
186 |
178 |
187 legend = _("Add new external link") |
179 legend = _("Add new external link") |
188 icon_css_class = 'fa fa-fw fa-external-link' |
180 icon_css_class = 'fa fa-fw fa-external-link' |
189 |
181 |
190 fields = field.Fields(IExternalLink).select('url', 'title', 'description', 'language') |
182 fields = field.Fields(IExternalLink).select('url', 'title', 'description', 'language') |
191 ajax_handler = 'add-external-link.json' |
|
192 edit_permission = MANAGE_CONTENT_PERMISSION |
183 edit_permission = MANAGE_CONTENT_PERMISSION |
193 |
184 |
194 def updateWidgets(self, prefix=None): |
185 def updateWidgets(self, prefix=None): |
195 super(ExternalLinkAddForm, self).updateWidgets(prefix) |
186 super(ExternalLinkAddForm, self).updateWidgets(prefix) |
196 if 'description' in self.widgets: |
187 if 'description' in self.widgets: |
200 return ExternalLink() |
191 return ExternalLink() |
201 |
192 |
202 def add(self, object): |
193 def add(self, object): |
203 IAssociationContainer(self.context).append(object) |
194 IAssociationContainer(self.context).append(object) |
204 |
195 |
205 |
196 def get_ajax_output(self, changes): |
206 @view_config(name='add-external-link.json', context=ILinkContainerTarget, request_type=IPyAMSLayer, |
197 output = super(self.__class__, self).get_ajax_output(changes) |
207 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
|
208 class ExternalLinkAJAXAddForm(AssociationItemAJAXAddForm, ExternalLinkAddForm): |
|
209 """External link add form, JSON renderer""" |
|
210 |
|
211 def get_ajax_output(self, changes): |
|
212 output = super(ExternalLinkAJAXAddForm, self).get_ajax_output(changes) |
|
213 if output: |
198 if output: |
214 output.setdefault('events', []).append(get_json_paragraph_markers_refresh_event(self.context, self.request, |
199 output.setdefault('events', []).append(get_json_paragraph_markers_refresh_event(self.context, self.request, |
215 self, ExternalLinksCounter)) |
200 self, ExternalLinksCounter)) |
216 return output |
201 return output |
217 |
202 |
218 |
203 |
219 @pagelet_config(name='properties.html', context=IExternalLink, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION) |
204 @pagelet_config(name='properties.html', context=IExternalLink, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION) |
|
205 @ajax_config(name='properties.json', context=IExternalLink, layer=IPyAMSLayer, |
|
206 permission=MANAGE_CONTENT_PERMISSION, base=AssociationItemAJAXEditForm) |
220 class ExternalLinkPropertiesEditForm(AdminDialogEditForm): |
207 class ExternalLinkPropertiesEditForm(AdminDialogEditForm): |
221 """External link properties edit form""" |
208 """External link properties edit form""" |
222 |
209 |
223 prefix = 'externallink_properties.' |
210 prefix = 'externallink_properties.' |
224 |
211 |
225 legend = _("Edit external link properties") |
212 legend = _("Edit external link properties") |
226 icon_css_class = 'fa fa-fw fa-external-link' |
213 icon_css_class = 'fa fa-fw fa-external-link' |
227 |
214 |
228 fields = field.Fields(IExternalLink).select('url', 'title', 'description', 'language') |
215 fields = field.Fields(IExternalLink).select('url', 'title', 'description', 'language') |
229 ajax_handler = 'properties.json' |
|
230 edit_permission = None # defined by IFormContextPermissionChecker adapter |
216 edit_permission = None # defined by IFormContextPermissionChecker adapter |
231 |
217 |
232 def updateWidgets(self, prefix=None): |
218 def updateWidgets(self, prefix=None): |
233 super(ExternalLinkPropertiesEditForm, self).updateWidgets(prefix) |
219 super(ExternalLinkPropertiesEditForm, self).updateWidgets(prefix) |
234 if 'description' in self.widgets: |
220 if 'description' in self.widgets: |
235 self.widgets['description'].widget_css_class = 'textarea' |
221 self.widgets['description'].widget_css_class = 'textarea' |
236 |
|
237 |
|
238 @view_config(name='properties.json', context=IExternalLink, request_type=IPyAMSLayer, |
|
239 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
|
240 class ExternalLinkPropertiesAJAXEditForm(AssociationItemAJAXEditForm, ExternalLinkPropertiesEditForm): |
|
241 """External link properties edit form, JSON renderer""" |
|
242 |
222 |
243 def get_ajax_output(self, changes): |
223 def get_ajax_output(self, changes): |
244 if ('title' in changes.get(IBaseLink, ())) or \ |
224 if ('title' in changes.get(IBaseLink, ())) or \ |
245 ('url' in changes.get(IExternalLink, ())): |
225 ('url' in changes.get(IExternalLink, ())): |
246 return self.get_associations_table() |
226 return self.get_associations_table() |
247 else: |
227 else: |
248 return super(ExternalLinkPropertiesAJAXEditForm, self).get_ajax_output(changes) |
228 return super(self.__class__, self).get_ajax_output(changes) |
249 |
229 |
250 |
230 |
251 # |
231 # |
252 # Mailto links views |
232 # Mailto links views |
253 # |
233 # |
282 modal_target = True |
262 modal_target = True |
283 |
263 |
284 |
264 |
285 @pagelet_config(name='add-mailto-link.html', context=ILinkContainerTarget, layer=IPyAMSLayer, |
265 @pagelet_config(name='add-mailto-link.html', context=ILinkContainerTarget, layer=IPyAMSLayer, |
286 permission=MANAGE_CONTENT_PERMISSION) |
266 permission=MANAGE_CONTENT_PERMISSION) |
|
267 @ajax_config(name='add-mailto-link.json', context=ILinkContainerTarget, layer=IPyAMSLayer, |
|
268 base=AssociationItemAJAXAddForm) |
287 class MailtoLinkAddForm(AdminDialogAddForm): |
269 class MailtoLinkAddForm(AdminDialogAddForm): |
288 """Mailto link add form""" |
270 """Mailto link add form""" |
289 |
271 |
290 legend = _("Add new mailto link") |
272 legend = _("Add new mailto link") |
291 icon_css_class = 'fa fa-fw fa-envelope-o' |
273 icon_css_class = 'fa fa-fw fa-envelope-o' |
292 |
274 |
293 fields = field.Fields(IMailtoLink).select('address', 'address_name', 'title', 'description') |
275 fields = field.Fields(IMailtoLink).select('address', 'address_name', 'title', 'description') |
294 ajax_handler = 'add-mailto-link.json' |
|
295 edit_permission = MANAGE_CONTENT_PERMISSION |
276 edit_permission = MANAGE_CONTENT_PERMISSION |
296 |
277 |
297 def updateWidgets(self, prefix=None): |
278 def updateWidgets(self, prefix=None): |
298 super(MailtoLinkAddForm, self).updateWidgets(prefix) |
279 super(MailtoLinkAddForm, self).updateWidgets(prefix) |
299 if 'description' in self.widgets: |
280 if 'description' in self.widgets: |
303 return MailtoLink() |
284 return MailtoLink() |
304 |
285 |
305 def add(self, object): |
286 def add(self, object): |
306 IAssociationContainer(self.context).append(object) |
287 IAssociationContainer(self.context).append(object) |
307 |
288 |
308 |
289 def get_ajax_output(self, changes): |
309 @view_config(name='add-mailto-link.json', context=ILinkContainerTarget, request_type=IPyAMSLayer, |
290 output = super(self.__class__, self).get_ajax_output(changes) |
310 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
|
311 class MailtoLinkAJAXAddForm(AssociationItemAJAXAddForm, MailtoLinkAddForm): |
|
312 """Mailto link add form, JSON renderer""" |
|
313 |
|
314 def get_ajax_output(self, changes): |
|
315 output = super(MailtoLinkAJAXAddForm, self).get_ajax_output(changes) |
|
316 if output: |
291 if output: |
317 output.setdefault('events', []).append(get_json_paragraph_markers_refresh_event(self.context, self.request, |
292 output.setdefault('events', []).append(get_json_paragraph_markers_refresh_event(self.context, self.request, |
318 self, MailtoLinksCounter)) |
293 self, MailtoLinksCounter)) |
319 return output |
294 return output |
320 |
295 |
321 |
296 |
322 @pagelet_config(name='properties.html', context=IMailtoLink, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION) |
297 @pagelet_config(name='properties.html', context=IMailtoLink, layer=IPyAMSLayer, permission=VIEW_SYSTEM_PERMISSION) |
|
298 @ajax_config(name='properties.json', context=IMailtoLink, layer=IPyAMSLayer, |
|
299 permission=MANAGE_CONTENT_PERMISSION, base=AssociationItemAJAXEditForm) |
323 class MailtoLinkPropertiesEditForm(AdminDialogEditForm): |
300 class MailtoLinkPropertiesEditForm(AdminDialogEditForm): |
324 """Mailto link properties edit form""" |
301 """Mailto link properties edit form""" |
325 |
302 |
326 prefix = 'mailtolink_properties.' |
303 prefix = 'mailtolink_properties.' |
327 |
304 |
328 legend = _("Edit mailto link properties") |
305 legend = _("Edit mailto link properties") |
329 icon_css_class = 'fa fa-fw fa-envelope-o' |
306 icon_css_class = 'fa fa-fw fa-envelope-o' |
330 |
307 |
331 fields = field.Fields(IMailtoLink).select('address', 'address_name', 'title', 'description') |
308 fields = field.Fields(IMailtoLink).select('address', 'address_name', 'title', 'description') |
332 ajax_handler = 'properties.json' |
|
333 edit_permission = None # defined by IFormContextPermissionChecker adapter |
309 edit_permission = None # defined by IFormContextPermissionChecker adapter |
334 |
310 |
335 def updateWidgets(self, prefix=None): |
311 def updateWidgets(self, prefix=None): |
336 super(MailtoLinkPropertiesEditForm, self).updateWidgets(prefix) |
312 super(MailtoLinkPropertiesEditForm, self).updateWidgets(prefix) |
337 if 'description' in self.widgets: |
313 if 'description' in self.widgets: |
338 self.widgets['description'].widget_css_class = 'textarea' |
314 self.widgets['description'].widget_css_class = 'textarea' |
339 |
|
340 |
|
341 @view_config(name='properties.json', context=IMailtoLink, request_type=IPyAMSLayer, |
|
342 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
|
343 class MailtoLinkPropertiesAJAXEditForm(AssociationItemAJAXEditForm, MailtoLinkPropertiesEditForm): |
|
344 """Mailto link properties edit form, JSON renderer""" |
|
345 |
315 |
346 def get_ajax_output(self, changes): |
316 def get_ajax_output(self, changes): |
347 if ('title' in changes.get(IBaseLink, ())) or changes.get(IMailtoLink, ()): |
317 if ('title' in changes.get(IBaseLink, ())) or changes.get(IMailtoLink, ()): |
348 return self.get_associations_table() |
318 return self.get_associations_table() |
349 else: |
319 else: |
350 return super(MailtoLinkPropertiesAJAXEditForm, self).get_ajax_output(changes) |
320 return super(self.__class__, self).get_ajax_output(changes) |