16 # import standard library |
16 # import standard library |
17 |
17 |
18 # import interfaces |
18 # import interfaces |
19 from pyams_content.component.association.interfaces import IAssociationTarget |
19 from pyams_content.component.association.interfaces import IAssociationTarget |
20 from pyams_content.component.association.zmi.interfaces import IAssociationsParentForm |
20 from pyams_content.component.association.zmi.interfaces import IAssociationsParentForm |
21 from pyams_content.component.illustration.interfaces import IIllustration |
|
22 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphFactorySettings, \ |
21 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphFactorySettings, \ |
23 IParagraphContainer, IParagraphRenderer |
22 IParagraphContainer |
24 from pyams_content.component.paragraph.interfaces.html import IHTMLParagraph, IRawParagraph, RAW_PARAGRAPH_TYPE, \ |
23 from pyams_content.component.paragraph.interfaces.html import IHTMLParagraph, IRawParagraph, RAW_PARAGRAPH_TYPE, \ |
25 HTML_PARAGRAPH_TYPE |
24 HTML_PARAGRAPH_TYPE |
26 from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView |
25 from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphContainerView |
27 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION |
26 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION |
28 from pyams_form.interfaces.form import IInnerForm |
27 from pyams_form.interfaces.form import IInnerForm |
29 from pyams_i18n.interfaces import II18n |
|
30 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu |
28 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu |
31 from pyams_skin.layer import IPyAMSLayer |
29 from pyams_skin.layer import IPyAMSLayer |
32 from pyams_zmi.interfaces import IPropertiesEditForm |
30 from pyams_zmi.interfaces import IPropertiesEditForm |
33 from z3c.form.interfaces import INPUT_MODE |
31 from z3c.form.interfaces import INPUT_MODE |
34 |
32 |
36 from pyams_content.component.association.zmi import AssociationsTable |
34 from pyams_content.component.association.zmi import AssociationsTable |
37 from pyams_content.component.paragraph.html import HTMLParagraph, RawParagraph |
35 from pyams_content.component.paragraph.html import HTMLParagraph, RawParagraph |
38 from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \ |
36 from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \ |
39 BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, get_json_paragraph_toolbar_refresh_event, \ |
37 BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, get_json_paragraph_toolbar_refresh_event, \ |
40 IParagraphEditFormButtons |
38 IParagraphEditFormButtons |
|
39 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget |
41 from pyams_form.security import ProtectedFormObjectMixin |
40 from pyams_form.security import ProtectedFormObjectMixin |
42 from pyams_pagelet.pagelet import pagelet_config |
41 from pyams_pagelet.pagelet import pagelet_config |
43 from pyams_skin.event import get_json_switched_table_refresh_event |
42 from pyams_skin.event import get_json_switched_table_refresh_event |
44 from pyams_skin.viewlet.menu import MenuDivider |
43 from pyams_skin.viewlet.menu import MenuDivider |
45 from pyams_template.template import template_config |
|
46 from pyams_utils.adapter import adapter_config |
44 from pyams_utils.adapter import adapter_config |
47 from pyams_utils.traversing import get_parent |
45 from pyams_utils.traversing import get_parent |
48 from pyams_viewlet.viewlet import viewlet_config, BaseContentProvider |
46 from pyams_viewlet.viewlet import viewlet_config |
49 from pyams_zmi.form import AdminDialogAddForm |
47 from pyams_zmi.form import AdminDialogAddForm |
50 from pyramid.view import view_config |
48 from pyramid.view import view_config |
51 from z3c.form import field, button |
49 from z3c.form import field, button |
52 from zope.interface import implementer |
50 from zope.interface import implementer |
53 |
51 |
123 |
121 |
124 legend = _("Edit raw HTML paragraph properties") |
122 legend = _("Edit raw HTML paragraph properties") |
125 icon_css_class = 'fa fa-fw fa-code' |
123 icon_css_class = 'fa fa-fw fa-code' |
126 |
124 |
127 fields = field.Fields(IRawParagraph).omit('__parent__', '__name__', 'visible') |
125 fields = field.Fields(IRawParagraph).omit('__parent__', '__name__', 'visible') |
|
126 fields['renderer'].widgetFactory = RendererFieldWidget |
|
127 |
128 ajax_handler = 'properties.json' |
128 ajax_handler = 'properties.json' |
129 edit_permission = MANAGE_CONTENT_PERMISSION |
129 edit_permission = MANAGE_CONTENT_PERMISSION |
130 |
130 |
131 def updateWidgets(self, prefix=None): |
131 def updateWidgets(self, prefix=None): |
132 super(RawParagraphPropertiesEditForm, self).updateWidgets(prefix) |
132 super(RawParagraphPropertiesEditForm, self).updateWidgets(prefix) |
161 class RawParagraphInnerAJAXEditForm(BaseParagraphAJAXEditForm, RawParagraphInnerEditForm): |
161 class RawParagraphInnerAJAXEditForm(BaseParagraphAJAXEditForm, RawParagraphInnerEditForm): |
162 """Raw HTML paragraph inner edit form, JSON renderer""" |
162 """Raw HTML paragraph inner edit form, JSON renderer""" |
163 |
163 |
164 |
164 |
165 # |
165 # |
166 # Raw HTML paragraph renderer |
|
167 # |
|
168 |
|
169 @adapter_config(context=(IRawParagraph, IPyAMSLayer), provides=IParagraphRenderer) |
|
170 @template_config(template='templates/raw-render.pt', layer=IPyAMSLayer) |
|
171 class RawParagraphRenderer(BaseContentProvider): |
|
172 """Raw HTML paragraph renderer""" |
|
173 |
|
174 language = None |
|
175 |
|
176 def update(self): |
|
177 i18n = II18n(self.context) |
|
178 if self.language: |
|
179 for attr in ('title', 'body'): |
|
180 setattr(self, attr, i18n.get_attribute(attr, self.language, request=self.request)) |
|
181 else: |
|
182 for attr in ('title', 'body'): |
|
183 setattr(self, attr, i18n.query_attribute(attr, request=self.request)) |
|
184 |
|
185 |
|
186 # |
|
187 # Rich text paragraph |
166 # Rich text paragraph |
188 # |
167 # |
189 |
168 |
190 @viewlet_config(name='add-html-paragraph.menu', context=IParagraphContainerTarget, view=IParagraphContainerView, |
169 @viewlet_config(name='add-html-paragraph.menu', context=IParagraphContainerTarget, view=IParagraphContainerView, |
191 layer=IPyAMSLayer, manager=IToolbarAddingMenu, weight=50) |
170 layer=IPyAMSLayer, manager=IToolbarAddingMenu, weight=50) |
243 icon_css_class = 'fa fa-fw fa-font' |
222 icon_css_class = 'fa fa-fw fa-font' |
244 label_css_class = 'control-label col-md-2' |
223 label_css_class = 'control-label col-md-2' |
245 input_css_class = 'col-md-10' |
224 input_css_class = 'col-md-10' |
246 |
225 |
247 fields = field.Fields(IHTMLParagraph).omit('__parent__', '__name__', 'visible') |
226 fields = field.Fields(IHTMLParagraph).omit('__parent__', '__name__', 'visible') |
|
227 fields['renderer'].widgetFactory = RendererFieldWidget |
|
228 |
248 ajax_handler = 'properties.json' |
229 ajax_handler = 'properties.json' |
249 edit_permission = MANAGE_CONTENT_PERMISSION |
230 edit_permission = MANAGE_CONTENT_PERMISSION |
250 |
231 |
251 def updateWidgets(self, prefix=None): |
232 def updateWidgets(self, prefix=None): |
252 super(HTMLParagraphPropertiesEditForm, self).updateWidgets(prefix) |
233 super(HTMLParagraphPropertiesEditForm, self).updateWidgets(prefix) |
306 get_json_paragraph_toolbar_refresh_event(parent, self.request)) |
287 get_json_paragraph_toolbar_refresh_event(parent, self.request)) |
307 # refresh associations table |
288 # refresh associations table |
308 output.setdefault('events', []).append( |
289 output.setdefault('events', []).append( |
309 get_json_switched_table_refresh_event(self.context, self.request, AssociationsTable)) |
290 get_json_switched_table_refresh_event(self.context, self.request, AssociationsTable)) |
310 return output |
291 return output |
311 |
|
312 |
|
313 # |
|
314 # Rich text paragraph renderer |
|
315 # |
|
316 |
|
317 @adapter_config(context=(IHTMLParagraph, IPyAMSLayer), provides=IParagraphRenderer) |
|
318 @template_config(template='templates/html-render.pt', layer=IPyAMSLayer) |
|
319 class HTMLParagraphRenderer(BaseContentProvider): |
|
320 """Rich text paragraph renderer""" |
|
321 |
|
322 illustration = None |
|
323 illustration_renderer = None |
|
324 language = None |
|
325 |
|
326 def update(self): |
|
327 i18n = II18n(self.context) |
|
328 if self.language: |
|
329 for attr in ('title', 'body'): |
|
330 setattr(self, attr, i18n.get_attribute(attr, self.language, request=self.request)) |
|
331 else: |
|
332 for attr in ('title', 'body'): |
|
333 setattr(self, attr, i18n.query_attribute(attr, request=self.request)) |
|
334 self.illustration = IIllustration(self.context) |
|
335 if self.illustration.data: |
|
336 renderer = self.illustration_renderer = self.illustration.get_renderer() |
|
337 if renderer is not None: |
|
338 renderer.update() |
|
339 |
|
340 def render_illustration(self): |
|
341 if not self.illustration_renderer: |
|
342 return '' |
|
343 return self.illustration_renderer.render() |
|