93 edit_permission = MANAGE_TEMPLATE_PERMISSION |
93 edit_permission = MANAGE_TEMPLATE_PERMISSION |
94 |
94 |
95 def getContent(self): |
95 def getContent(self): |
96 return IPortalPage(self.context) |
96 return IPortalPage(self.context) |
97 |
97 |
|
98 @property |
|
99 def template_css_class(self): |
|
100 template = IPortalPage(self.context).local_template |
|
101 return template.css_class if template is not None else '' |
|
102 |
98 def updateWidgets(self, prefix=None): |
103 def updateWidgets(self, prefix=None): |
99 super().updateWidgets(prefix) |
104 super().updateWidgets(prefix) |
100 shared_template = self.widgets.get('shared_template') |
105 shared_template = self.widgets.get('shared_template') |
101 if shared_template is not None: |
106 if shared_template is not None: |
102 shared_template.object_data = { |
107 shared_template.object_data = { |
114 if template_mode == TEMPLATE_SHARED_MODE: |
119 if template_mode == TEMPLATE_SHARED_MODE: |
115 content.shared_template = data.get('shared_template') |
120 content.shared_template = data.get('shared_template') |
116 content.use_local_template = False |
121 content.use_local_template = False |
117 elif template_mode == TEMPLATE_LOCAL_MODE: |
122 elif template_mode == TEMPLATE_LOCAL_MODE: |
118 content.use_local_template = True |
123 content.use_local_template = True |
119 return {IPortalPage: ('inherit_parent', 'use_local_template', 'shared_template')} |
124 template = IPortalPage(self.context).local_template |
|
125 if template is not None: |
|
126 template.css_class = self.request.params.get('template_css_class', '') |
|
127 return { |
|
128 IPortalPage: ('inherit_parent', 'use_local_template', 'shared_template') |
|
129 } |
120 |
130 |
121 def get_ajax_output(self, changes): |
131 def get_ajax_output(self, changes): |
122 output = super(self.__class__, self).get_ajax_output(changes) |
132 output = super(self.__class__, self).get_ajax_output(changes) |
123 if changes: |
133 if changes: |
124 output.update({ |
134 output.update({ |
135 def handle_template_properties_extract_event(event): |
145 def handle_template_properties_extract_event(event): |
136 """Handle template properties extract event""" |
146 """Handle template properties extract event""" |
137 form = event.form |
147 form = event.form |
138 if not form.getContent().can_inherit: |
148 if not form.getContent().can_inherit: |
139 data = event.data |
149 data = event.data |
140 if (form.request.params.get('template_mode') == TEMPLATE_SHARED_MODE) and not data.get('shared_template'): |
150 if (form.request.params.get('template_mode') == TEMPLATE_SHARED_MODE) and \ |
|
151 not data.get('shared_template'): |
141 form.widgets.errors += (Invalid(_("You must select which shared template to use!")),) |
152 form.widgets.errors += (Invalid(_("You must select which shared template to use!")),) |
142 |
153 |
143 |
154 |
144 @adapter_config(context=(Interface, IPyAMSLayer, PortalContextTemplatePropertiesEditForm), provides=IPageHeader) |
155 @adapter_config(context=(Interface, IPyAMSLayer, PortalContextTemplatePropertiesEditForm), |
|
156 provides=IPageHeader) |
145 class PortalContextPropertiesEditFormHeaderAdapter(PropertiesEditFormHeaderAdapter): |
157 class PortalContextPropertiesEditFormHeaderAdapter(PropertiesEditFormHeaderAdapter): |
146 """Portal context template properties edit form header adapter""" |
158 """Portal context template properties edit form header adapter""" |
147 |
159 |
148 icon_class = 'fa fa-fw fa-columns' |
160 icon_class = 'fa fa-fw fa-columns' |
149 |
161 |
150 |
162 |
151 @adapter_config(context=(IPortalContext, IAdminLayer, PortalContextTemplatePropertiesEditForm), provides=IFormHelp) |
163 @adapter_config(context=(IPortalContext, IAdminLayer, PortalContextTemplatePropertiesEditForm), |
|
164 provides=IFormHelp) |
152 class PortalContextPropertiesEditFormHelpAdapter(FormHelp): |
165 class PortalContextPropertiesEditFormHelpAdapter(FormHelp): |
153 """Portal context properties edit form help adapter""" |
166 """Portal context properties edit form help adapter""" |
154 |
167 |
155 message = _("If you choose a shared template, you can only adjust settings of " |
168 message = _("If you choose a shared template, you can only adjust settings of " |
156 "each portlet individually but can't change portlets list or page configuration.\n" |
169 "each portlet individually but can't change portlets list or page " |
|
170 "configuration.\n" |
157 "If you use a local template, you can define a whole custom " |
171 "If you use a local template, you can define a whole custom " |
158 "configuration but the template definition can't be reused anywhere...""") |
172 "configuration but the template definition can't be reused anywhere...""") |
159 message_format = 'text' |
173 message_format = 'text' |
160 |
174 |
161 |
175 |
162 # |
176 # |
163 # Portal context template configuration |
177 # Portal context template configuration |
164 # |
178 # |
165 |
179 |
166 @viewlet_config(name='template-config.menu', context=IPortalContext, layer=IAdminLayer, |
180 @viewlet_config(name='template-config.menu', |
167 manager=IPortalContextTemplatePropertiesMenu, permission=MANAGE_TEMPLATE_PERMISSION, weight=50) |
181 context=IPortalContext, layer=IAdminLayer, |
|
182 manager=IPortalContextTemplatePropertiesMenu, weight=50, |
|
183 permission=MANAGE_TEMPLATE_PERMISSION) |
168 class PortalContextTemplateConfigMenu(MenuItem): |
184 class PortalContextTemplateConfigMenu(MenuItem): |
169 """Portal context template configuration menu""" |
185 """Portal context template configuration menu""" |
170 |
186 |
171 label = _("Template properties") |
187 label = _("Template properties") |
172 |
188 |
184 return absolute_url(page.local_template, self.request, 'admin#properties.html') |
200 return absolute_url(page.local_template, self.request, 'admin#properties.html') |
185 else: |
201 else: |
186 return super(PortalContextTemplateConfigMenu, self).get_url() |
202 return super(PortalContextTemplateConfigMenu, self).get_url() |
187 |
203 |
188 |
204 |
189 @pagelet_config(name='template-config.html', context=IPortalContext, layer=IPyAMSLayer, |
205 @pagelet_config(name='template-config.html', |
|
206 context=IPortalContext, layer=IPyAMSLayer, |
190 permission=MANAGE_TEMPLATE_PERMISSION) |
207 permission=MANAGE_TEMPLATE_PERMISSION) |
191 class PortalContextTemplateLayoutView(PortalTemplateLayoutView): |
208 class PortalContextTemplateLayoutView(PortalTemplateLayoutView): |
192 """Portal context template configuration view""" |
209 """Portal context template configuration view""" |
193 |
210 |
194 def get_template(self): |
211 def get_template(self): |
199 if not IPortalPage(self.context).use_local_template: |
216 if not IPortalPage(self.context).use_local_template: |
200 return False |
217 return False |
201 return self.request.has_permission(MANAGE_TEMPLATE_PERMISSION) |
218 return self.request.has_permission(MANAGE_TEMPLATE_PERMISSION) |
202 |
219 |
203 |
220 |
204 @adapter_config(context=(IPortalContext, IAdminLayer, PortalContextTemplateLayoutView), provides=IPageHeader) |
221 @adapter_config(context=(IPortalContext, IAdminLayer, PortalContextTemplateLayoutView), |
|
222 provides=IPageHeader) |
205 class PortalContextTemplateLayoutHeaderAdapter(PortalTemplateHeaderAdapter): |
223 class PortalContextTemplateLayoutHeaderAdapter(PortalTemplateHeaderAdapter): |
206 """Portal context template configuration header adapter""" |
224 """Portal context template configuration header adapter""" |
207 |
225 |
208 |
226 |
209 # |
227 # |
210 # Template management views |
228 # Template management views |
211 # |
229 # |
212 |
230 |
213 @view_config(name='get-slots-width.json', context=IPortalContext, request_type=IPyAMSLayer, |
231 @view_config(name='get-slots-width.json', |
|
232 context=IPortalContext, request_type=IPyAMSLayer, |
214 permission=VIEW_SYSTEM_PERMISSION, renderer='json', xhr=True) |
233 permission=VIEW_SYSTEM_PERMISSION, renderer='json', xhr=True) |
215 def get_template_slots_width(request): |
234 def get_template_slots_width(request): |
216 """Get template slots width""" |
235 """Get template slots width""" |
217 config = IPortalTemplateConfiguration(request.context) |
236 config = IPortalTemplateConfiguration(request.context) |
218 return config.get_slots_width(request.params.get('device')) |
237 return config.get_slots_width(request.params.get('device')) |
219 |
238 |
220 |
239 |
221 @view_config(name='portlet-properties.html', context=IPortalContext, request_type=IPyAMSLayer, |
240 @view_config(name='portlet-properties.html', |
|
241 context=IPortalContext, request_type=IPyAMSLayer, |
222 permission=MANAGE_TEMPLATE_PERMISSION) |
242 permission=MANAGE_TEMPLATE_PERMISSION) |
223 class PortalContextTemplatePortletEditForm(PortalTemplatePortletEditForm): |
243 class PortalContextTemplatePortletEditForm(PortalTemplatePortletEditForm): |
224 """Portal context template portlet edit form""" |
244 """Portal context template portlet edit form""" |
225 |
245 |
226 |
246 |
227 @view_config(name='portlet-properties.json', context=IPortalContext, request_type=IPyAMSLayer, |
247 @view_config(name='portlet-properties.json', |
|
248 context=IPortalContext, request_type=IPyAMSLayer, |
228 permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True) |
249 permission=MANAGE_TEMPLATE_PERMISSION, renderer='json', xhr=True) |
229 class PortalContextTemplatePortletAJAXEditForm(PortalTemplatePortletAJAXEditForm): |
250 class PortalContextTemplatePortletAJAXEditForm(PortalTemplatePortletAJAXEditForm): |
230 """Portal context template portlet edit form, JSON renderer""" |
251 """Portal context template portlet edit form, JSON renderer""" |