36 BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, get_json_paragraph_toolbar_refresh_event, \ |
36 BaseParagraphAddMenu, BaseParagraphPropertiesEditForm, get_json_paragraph_toolbar_refresh_event, \ |
37 IParagraphEditFormButtons |
37 IParagraphEditFormButtons |
38 from pyams_content.component.paragraph.zmi.container import ParagraphContainerTable, \ |
38 from pyams_content.component.paragraph.zmi.container import ParagraphContainerTable, \ |
39 ParagraphTitleToolbarViewletManager |
39 ParagraphTitleToolbarViewletManager |
40 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget |
40 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget |
|
41 from pyams_form.form import ajax_config |
41 from pyams_pagelet.pagelet import pagelet_config |
42 from pyams_pagelet.pagelet import pagelet_config |
42 from pyams_skin.event import get_json_switched_table_refresh_event, get_json_widget_refresh_event |
43 from pyams_skin.event import get_json_switched_table_refresh_event, get_json_widget_refresh_event |
43 from pyams_utils.adapter import adapter_config, ContextRequestAdapter |
44 from pyams_utils.adapter import adapter_config, ContextRequestAdapter |
44 from pyams_utils.traversing import get_parent |
45 from pyams_utils.traversing import get_parent |
45 from pyams_viewlet.viewlet import viewlet_config |
46 from pyams_viewlet.viewlet import viewlet_config |
46 from pyams_zmi.form import AdminDialogAddForm |
47 from pyams_zmi.form import AdminDialogAddForm |
47 from pyramid.view import view_config |
|
48 from z3c.form import field, button |
48 from z3c.form import field, button |
49 from zope.interface import implementer, Interface |
49 from zope.interface import implementer, Interface |
50 |
50 |
51 from pyams_content import _ |
51 from pyams_content import _ |
52 |
52 |
87 paragraph_type = FRAME_PARAGRAPH_TYPE |
87 paragraph_type = FRAME_PARAGRAPH_TYPE |
88 |
88 |
89 |
89 |
90 @pagelet_config(name='add-frame-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer, |
90 @pagelet_config(name='add-frame-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer, |
91 permission=MANAGE_CONTENT_PERMISSION) |
91 permission=MANAGE_CONTENT_PERMISSION) |
|
92 @ajax_config(name='add-frame-paragraph.json', context=IParagraphContainerTarget, request_type=IPyAMSLayer, |
|
93 base=BaseParagraphAJAXAddForm) |
92 @implementer(IFrameParagraphForm) |
94 @implementer(IFrameParagraphForm) |
93 class FrameParagraphAddForm(AdminDialogAddForm): |
95 class FrameParagraphAddForm(AdminDialogAddForm): |
94 """Framed text paragraph add form""" |
96 """Framed text paragraph add form""" |
95 |
97 |
96 legend = _("Add new framed text paragraph") |
98 legend = _("Add new framed text paragraph") |
98 icon_css_class = 'fa fa-fw fa-list-alt' |
100 icon_css_class = 'fa fa-fw fa-list-alt' |
99 label_css_class = 'control-label col-md-2' |
101 label_css_class = 'control-label col-md-2' |
100 input_css_class = 'col-md-10' |
102 input_css_class = 'col-md-10' |
101 |
103 |
102 fields = field.Fields(IFrameParagraph).omit('__parent__', '__name__', 'visible') |
104 fields = field.Fields(IFrameParagraph).omit('__parent__', '__name__', 'visible') |
103 ajax_handler = 'add-frame-paragraph.json' |
|
104 edit_permission = MANAGE_CONTENT_PERMISSION |
105 edit_permission = MANAGE_CONTENT_PERMISSION |
105 |
106 |
106 def updateWidgets(self, prefix=None): |
107 def updateWidgets(self, prefix=None): |
107 super(FrameParagraphAddForm, self).updateWidgets(prefix) |
108 super(FrameParagraphAddForm, self).updateWidgets(prefix) |
108 if 'body' in self.widgets: |
109 if 'body' in self.widgets: |
113 |
114 |
114 def add(self, object): |
115 def add(self, object): |
115 IParagraphContainer(self.context).append(object) |
116 IParagraphContainer(self.context).append(object) |
116 |
117 |
117 |
118 |
118 @view_config(name='add-frame-paragraph.json', context=IParagraphContainerTarget, request_type=IPyAMSLayer, |
|
119 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
|
120 class FrameParagraphAJAXAddForm(BaseParagraphAJAXAddForm, FrameParagraphAddForm): |
|
121 """Framed text paragraph add form, JSON renderer""" |
|
122 |
|
123 |
|
124 @pagelet_config(name='properties.html', context=IFrameParagraph, layer=IPyAMSLayer, |
119 @pagelet_config(name='properties.html', context=IFrameParagraph, layer=IPyAMSLayer, |
125 permission=MANAGE_CONTENT_PERMISSION) |
120 permission=MANAGE_CONTENT_PERMISSION) |
|
121 @ajax_config(name='properties.json', context=IFrameParagraph, request_type=IPyAMSLayer, |
|
122 base=BaseParagraphAJAXEditForm) |
126 @implementer(IFrameParagraphForm) |
123 @implementer(IFrameParagraphForm) |
127 class FrameParagraphPropertiesEditForm(BaseParagraphPropertiesEditForm): |
124 class FrameParagraphPropertiesEditForm(BaseParagraphPropertiesEditForm): |
128 """Framed text paragraph properties edit form""" |
125 """Framed text paragraph properties edit form""" |
129 |
126 |
130 prefix = 'frame_properties.' |
127 prefix = 'frame_properties.' |
136 input_css_class = 'col-md-10' |
133 input_css_class = 'col-md-10' |
137 |
134 |
138 fields = field.Fields(IFrameParagraph).omit('__parent__', '__name__', 'visible') |
135 fields = field.Fields(IFrameParagraph).omit('__parent__', '__name__', 'visible') |
139 fields['renderer'].widgetFactory = RendererFieldWidget |
136 fields['renderer'].widgetFactory = RendererFieldWidget |
140 |
137 |
141 ajax_handler = 'properties.json' |
|
142 edit_permission = MANAGE_CONTENT_PERMISSION |
138 edit_permission = MANAGE_CONTENT_PERMISSION |
143 |
139 |
144 def updateWidgets(self, prefix=None): |
140 def updateWidgets(self, prefix=None): |
145 super(FrameParagraphPropertiesEditForm, self).updateWidgets(prefix) |
141 super(FrameParagraphPropertiesEditForm, self).updateWidgets(prefix) |
146 if 'body' in self.widgets: |
142 if 'body' in self.widgets: |
148 for lang in body_widget.langs: |
144 for lang in body_widget.langs: |
149 widget = body_widget.widgets[lang] |
145 widget = body_widget.widgets[lang] |
150 widget.id = '{id}_{name}'.format(id=widget.id, name=self.context.__name__) |
146 widget.id = '{id}_{name}'.format(id=widget.id, name=self.context.__name__) |
151 body_widget.widget_css_class = 'textarea' |
147 body_widget.widget_css_class = 'textarea' |
152 |
148 |
153 |
|
154 @view_config(name='properties.json', context=IFrameParagraph, request_type=IPyAMSLayer, |
|
155 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
|
156 class FrameParagraphPropertiesAJAXEditForm(BaseParagraphAJAXEditForm, FrameParagraphPropertiesEditForm): |
|
157 """Framed text paragraph properties edit form, JSON renderer""" |
|
158 |
|
159 def get_ajax_output(self, changes): |
149 def get_ajax_output(self, changes): |
160 output = super(FrameParagraphPropertiesAJAXEditForm, self).get_ajax_output(changes) |
150 output = super(self.__class__, self).get_ajax_output(changes) |
161 if 'body' in changes.get(IFrameParagraph, ()): |
151 if 'body' in changes.get(IFrameParagraph, ()): |
162 # refresh associations count markers |
152 # refresh associations count markers |
163 parent = get_parent(self.context, IAssociationTarget) |
153 parent = get_parent(self.context, IAssociationTarget) |
164 output.setdefault('events', []).append( |
154 output.setdefault('events', []).append( |
165 get_json_paragraph_toolbar_refresh_event(parent, self.request, |
155 get_json_paragraph_toolbar_refresh_event(parent, self.request, |
169 get_json_switched_table_refresh_event(self.context, self.request, AssociationsTable)) |
159 get_json_switched_table_refresh_event(self.context, self.request, AssociationsTable)) |
170 return output |
160 return output |
171 |
161 |
172 |
162 |
173 @adapter_config(context=(IFrameParagraph, IPyAMSLayer), provides=IParagraphInnerEditor) |
163 @adapter_config(context=(IFrameParagraph, IPyAMSLayer), provides=IParagraphInnerEditor) |
|
164 @ajax_config(name='inner-properties.json', context=IFrameParagraph, layer=IPyAMSLayer, |
|
165 base=BaseParagraphAJAXEditForm) |
174 @implementer(IInnerForm, IPropertiesEditForm, IAssociationsParentForm) |
166 @implementer(IInnerForm, IPropertiesEditForm, IAssociationsParentForm) |
175 class FrameParagraphInnerEditForm(FrameParagraphPropertiesEditForm): |
167 class FrameParagraphInnerEditForm(FrameParagraphPropertiesEditForm): |
176 """Framed text paragraph inner edit form""" |
168 """Framed text paragraph inner edit form""" |
177 |
169 |
178 legend = None |
170 legend = None |
179 ajax_handler = 'inner-properties.json' |
|
180 |
171 |
181 @property |
172 @property |
182 def buttons(self): |
173 def buttons(self): |
183 if self.mode == INPUT_MODE: |
174 if self.mode == INPUT_MODE: |
184 return button.Buttons(IParagraphEditFormButtons) |
175 return button.Buttons(IParagraphEditFormButtons) |
185 else: |
176 else: |
186 return button.Buttons() |
177 return button.Buttons() |
187 |
178 |
188 |
|
189 @view_config(name='inner-properties.json', context=IFrameParagraph, request_type=IPyAMSLayer, |
|
190 permission=MANAGE_CONTENT_PERMISSION, renderer='json', xhr=True) |
|
191 class FrameParagraphInnerAJAXEditForm(BaseParagraphAJAXEditForm, FrameParagraphInnerEditForm): |
|
192 """Framed text paragraph inner edit form, JSON renderer""" |
|
193 |
|
194 def get_ajax_output(self, changes): |
179 def get_ajax_output(self, changes): |
195 output = super(FrameParagraphInnerAJAXEditForm, self).get_ajax_output(changes) |
180 output = super(self.__class__, self).get_ajax_output(changes) |
196 updated = changes.get(IFrameParagraph, ()) |
181 updated = changes.get(IFrameParagraph, ()) |
197 if 'renderer' in updated: |
182 if 'renderer' in updated: |
198 output.setdefault('events', []).append( |
183 output.setdefault('events', []).append( |
199 get_json_widget_refresh_event(self.context, self.request, FrameParagraphInnerEditForm, 'renderer')) |
184 get_json_widget_refresh_event(self.context, self.request, FrameParagraphInnerEditForm, 'renderer')) |
200 return output |
185 return output |