29 |
29 |
30 # import packages |
30 # import packages |
31 from pyams_content.component.paragraph.header import HeaderParagraph |
31 from pyams_content.component.paragraph.header import HeaderParagraph |
32 from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \ |
32 from pyams_content.component.paragraph.zmi import BaseParagraphAJAXAddForm, BaseParagraphAJAXEditForm, \ |
33 BaseParagraphAddMenu, BaseParagraphPropertiesEditForm |
33 BaseParagraphAddMenu, BaseParagraphPropertiesEditForm |
|
34 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget |
34 from pyams_pagelet.pagelet import pagelet_config |
35 from pyams_pagelet.pagelet import pagelet_config |
35 from pyams_template.template import template_config |
|
36 from pyams_utils.adapter import adapter_config |
36 from pyams_utils.adapter import adapter_config |
37 from pyams_viewlet.viewlet import viewlet_config, BaseContentProvider |
37 from pyams_viewlet.viewlet import viewlet_config, BaseContentProvider |
38 from pyams_zmi.form import AdminDialogAddForm |
38 from pyams_zmi.form import AdminDialogAddForm |
39 from pyramid.view import view_config |
39 from pyramid.view import view_config |
40 from z3c.form import field, button |
40 from z3c.form import field, button |
60 """Header paragraph add form""" |
60 """Header paragraph add form""" |
61 |
61 |
62 legend = _("Add new header paragraph") |
62 legend = _("Add new header paragraph") |
63 icon_css_class = 'fa fa-fw fa-header' |
63 icon_css_class = 'fa fa-fw fa-header' |
64 |
64 |
65 fields = field.Fields(IHeaderParagraph).select('header') |
65 fields = field.Fields(IHeaderParagraph).select('header', 'renderer') |
66 ajax_handler = 'add-header-paragraph.json' |
66 ajax_handler = 'add-header-paragraph.json' |
67 edit_permission = MANAGE_CONTENT_PERMISSION |
67 edit_permission = MANAGE_CONTENT_PERMISSION |
68 |
68 |
69 def updateWidgets(self, prefix=None): |
69 def updateWidgets(self, prefix=None): |
70 super(HeaderParagraphAddForm, self).updateWidgets(prefix) |
70 super(HeaderParagraphAddForm, self).updateWidgets(prefix) |
90 """Header paragraph properties edit form""" |
90 """Header paragraph properties edit form""" |
91 |
91 |
92 legend = _("Edit header paragraph properties") |
92 legend = _("Edit header paragraph properties") |
93 icon_css_class = 'fa fa-fw fa-header' |
93 icon_css_class = 'fa fa-fw fa-header' |
94 |
94 |
95 fields = field.Fields(IHeaderParagraph).select('header') |
95 fields = field.Fields(IHeaderParagraph).select('header', 'renderer') |
|
96 fields['renderer'].widgetFactory = RendererFieldWidget |
|
97 |
96 ajax_handler = 'properties.json' |
98 ajax_handler = 'properties.json' |
97 edit_permission = MANAGE_CONTENT_PERMISSION |
99 edit_permission = MANAGE_CONTENT_PERMISSION |
98 |
100 |
99 def updateWidgets(self, prefix=None): |
101 def updateWidgets(self, prefix=None): |
100 super(HeaderParagraphPropertiesEditForm, self).updateWidgets(prefix) |
102 super(HeaderParagraphPropertiesEditForm, self).updateWidgets(prefix) |
129 |
131 |
130 legend = None |
132 legend = None |
131 label_css_class = 'control-label col-md-2' |
133 label_css_class = 'control-label col-md-2' |
132 input_css_class = 'col-md-10' |
134 input_css_class = 'col-md-10' |
133 |
135 |
|
136 ajax_handler = 'inner-properties.json' |
|
137 |
134 @property |
138 @property |
135 def buttons(self): |
139 def buttons(self): |
136 if self.mode == INPUT_MODE: |
140 if self.mode == INPUT_MODE: |
137 return button.Buttons(IEditFormButtons) |
141 return button.Buttons(IEditFormButtons) |
138 else: |
142 else: |
139 return button.Buttons() |
143 return button.Buttons() |
140 |
144 |
141 |
145 |
|
146 @view_config(name='inner-properties.json', context=IHeaderParagraph, request_type=IPyAMSLayer, |
|
147 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
|
148 class HeaderParagraphInnerAJAXEditForm(BaseParagraphAJAXEditForm, HeaderParagraphInnerEditForm): |
|
149 """Header paragraph inner edit form, JSON renderer""" |
|
150 |
|
151 def get_ajax_output(self, changes): |
|
152 output = super(HeaderParagraphInnerAJAXEditForm, self).get_ajax_output(changes) |
|
153 updated = changes.get(IHeaderParagraph, ()) |
|
154 if 'renderer' in updated: |
|
155 form = HeaderParagraphInnerEditForm(self.context, self.request) |
|
156 form.update() |
|
157 output.setdefault('events', []).append({ |
|
158 'event': 'myams.refresh', |
|
159 'options': { |
|
160 'object_id': '{0}_{1}_{2}'.format( |
|
161 self.context.__class__.__name__, |
|
162 getattr(form.getContent(), '__name__', 'noname').replace('++', ''), |
|
163 form.id), |
|
164 'content': form.render() |
|
165 } |
|
166 }) |
|
167 return output |
|
168 |
|
169 |
142 # |
170 # |
143 # HTML paragraph preview |
171 # Header paragraph preview |
144 # |
172 # |
145 |
173 |
146 @adapter_config(context=(IHeaderParagraph, IPyAMSLayer), provides=IParagraphPreview) |
174 @adapter_config(context=(IHeaderParagraph, IPyAMSLayer), provides=IParagraphPreview) |
147 @template_config(template='templates/header-preview.pt', layer=IPyAMSLayer) |
|
148 class HeaderParagraphPreview(BaseContentProvider): |
175 class HeaderParagraphPreview(BaseContentProvider): |
149 """Header paragraph preview""" |
176 """Header paragraph preview""" |
|
177 |
|
178 def __init__(self, context, request): |
|
179 super(HeaderParagraphPreview, self).__init__(context, request) |
|
180 self.renderer = self.context.get_renderer() |
150 |
181 |
151 language = None |
182 language = None |
152 |
183 |
153 def update(self): |
184 def update(self): |
154 i18n = II18n(self.context) |
185 if self.renderer is not None: |
155 if self.language: |
186 self.renderer.language = self.language |
156 for attr in ('header', ): |
187 self.renderer.update() |
157 setattr(self, attr, i18n.get_attribute(attr, self.language, request=self.request)) |
188 |
|
189 def render(self): |
|
190 if self.renderer is not None: |
|
191 return self.renderer.render() |
158 else: |
192 else: |
159 for attr in ('header', ): |
193 return '' |
160 setattr(self, attr, i18n.query_attribute(attr, request=self.request)) |
|