31 IWidgetTitleViewletManager |
31 IWidgetTitleViewletManager |
32 from pyams_skin.layer import IPyAMSLayer |
32 from pyams_skin.layer import IPyAMSLayer |
33 from pyams_skin.page import DefaultPageHeaderAdapter |
33 from pyams_skin.page import DefaultPageHeaderAdapter |
34 from pyams_skin.table import DefaultElementEditorAdapter |
34 from pyams_skin.table import DefaultElementEditorAdapter |
35 from pyams_skin.viewlet.breadcrumb import BreadcrumbAdminLayerItem |
35 from pyams_skin.viewlet.breadcrumb import BreadcrumbAdminLayerItem |
|
36 from pyams_skin.viewlet.menu import MenuItem |
36 from pyams_skin.viewlet.toolbar import ToolbarAction, ToolbarMenuDivider, ToolbarMenuItem |
37 from pyams_skin.viewlet.toolbar import ToolbarAction, ToolbarMenuDivider, ToolbarMenuItem |
37 from pyams_utils.adapter import ContextRequestAdapter, adapter_config |
38 from pyams_utils.adapter import ContextRequestAdapter, adapter_config |
38 from pyams_utils.registry import get_utility, query_utility |
39 from pyams_utils.registry import get_utility, query_utility |
39 from pyams_utils.traversing import get_parent |
40 from pyams_utils.traversing import get_parent |
40 from pyams_utils.unicode import translate_string |
41 from pyams_utils.unicode import translate_string |
41 from pyams_utils.url import absolute_url |
42 from pyams_utils.url import absolute_url |
42 from pyams_viewlet.viewlet import viewlet_config |
43 from pyams_viewlet.viewlet import viewlet_config |
43 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm |
44 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm |
|
45 from pyams_zmi.interfaces.menu import IPropertiesMenu |
44 from pyams_zmi.layer import IAdminLayer |
46 from pyams_zmi.layer import IAdminLayer |
45 |
47 |
46 |
48 |
47 __docformat__ = 'restructuredtext' |
49 __docformat__ = 'restructuredtext' |
48 |
50 |
80 container = get_parent(self.context, IPortalTemplateContainer) |
82 container = get_parent(self.context, IPortalTemplateContainer) |
81 if container is not None: |
83 if container is not None: |
82 return self.context.name |
84 return self.context.name |
83 context = get_parent(self.context, IPortalContext) |
85 context = get_parent(self.context, IPortalContext) |
84 if context is not None: |
86 if context is not None: |
85 adapter = self.request.registry.queryMultiAdapter((context, self.request), ITableElementName) |
87 adapter = self.request.registry.queryMultiAdapter((context, self.request), |
|
88 ITableElementName) |
86 if adapter is not None: |
89 if adapter is not None: |
87 return self.request.localizer.translate(_("{0} (local template)")).format(adapter.name) |
90 return self.request.localizer.translate(_("{0} (local template)")).format( |
|
91 adapter.name) |
88 return '--' |
92 return '--' |
89 |
93 |
90 |
94 |
91 @adapter_config(context=(IPortalTemplate, IAdminLayer, Interface), provides=ITableElementEditor) |
95 @adapter_config(context=(IPortalTemplate, IAdminLayer, Interface), provides=ITableElementEditor) |
92 class PortalTemplateTableElementEditorAdapter(DefaultElementEditorAdapter): |
96 class PortalTemplateTableElementEditorAdapter(DefaultElementEditorAdapter): |
110 if container is not None: |
114 if container is not None: |
111 return translate(_("« {0} » portal template")).format(self.context.name) |
115 return translate(_("« {0} » portal template")).format(self.context.name) |
112 # check for portal context |
116 # check for portal context |
113 context = get_parent(self.context, IPortalContext) |
117 context = get_parent(self.context, IPortalContext) |
114 if context is not None: |
118 if context is not None: |
115 adapter = self.request.registry.queryMultiAdapter((context, self.request, self.view), IContentTitle) |
119 adapter = self.request.registry.queryMultiAdapter((context, self.request, self.view), |
|
120 IContentTitle) |
116 if adapter is None: |
121 if adapter is None: |
117 adapter = IContentTitle(context, None) |
122 adapter = IContentTitle(context, None) |
118 if adapter is not None: |
123 if adapter is not None: |
119 return adapter.title |
124 return adapter.title |
120 |
125 |
121 |
126 |
122 # |
127 # |
123 # Template views |
128 # Template add views |
124 # |
129 # |
125 |
130 |
126 @viewlet_config(name='add-portal-template.action', context=ISite, layer=IAdminLayer, |
131 @viewlet_config(name='add-portal-template.action', context=ISite, layer=IAdminLayer, |
127 view=PortalTemplateContainerTable, manager=IWidgetTitleViewletManager, |
132 view=PortalTemplateContainerTable, manager=IWidgetTitleViewletManager, |
128 permission=MANAGE_TEMPLATE_PERMISSION, weight=1) |
133 permission=MANAGE_TEMPLATE_PERMISSION, weight=1) |
166 if name in container: |
171 if name in container: |
167 event.form.widgets.errors += (Invalid(_("Specified name is already used!")),) |
172 event.form.widgets.errors += (Invalid(_("Specified name is already used!")),) |
168 |
173 |
169 |
174 |
170 # |
175 # |
171 # Template renaming form |
176 # Template properties form |
172 # |
177 # |
173 |
178 |
174 @viewlet_config(name='rename.menu', context=IPortalTemplate, layer=IPyAMSLayer, |
179 @viewlet_config(name='properties.menu', |
175 view=PortalTemplateLayoutView, manager=IContextActions, |
180 context=IPortalTemplate, layer=IAdminLayer, |
176 permission=MANAGE_TEMPLATE_PERMISSION, weight=100) |
181 manager=IPropertiesMenu, weight=10, |
177 class PortalTemplateRenameMenu(ToolbarMenuItem): |
182 permission=MANAGE_TEMPLATE_PERMISSION) |
178 """Portal template rename menu item""" |
183 class PortalTemplatePropertiesMenu(MenuItem): |
|
184 """Portal template properties menu item""" |
179 |
185 |
180 def __new__(cls, context, request, view, manager): |
186 def __new__(cls, context, request, view, manager): |
181 container = get_parent(context, IPortalTemplateContainer) |
187 container = get_parent(context, IPortalTemplateContainer) |
182 if container is None: |
188 if container is None: |
183 return None |
189 return None |
184 return ToolbarMenuDivider.__new__(cls) |
190 return MenuItem.__new__(cls) |
185 |
191 |
186 label = _("Rename template...") |
192 label = _("Template properties...") |
187 label_css_class = 'fa fa-fw fa-edit' |
193 label_css_class = 'fa fa-fw fa-edit' |
188 |
194 |
189 url = 'rename.html' |
195 url = 'properties.html' |
190 modal_target = True |
196 modal_target = True |
191 |
197 |
192 |
198 |
193 class IPortalTemplateRenameButtons(Interface): |
199 @pagelet_config(name='properties.html', |
194 """Portal template rename form buttons""" |
200 context=IPortalTemplate, layer=IPyAMSLayer, |
195 |
|
196 close = CloseButton(name='close', title=_("Cancel")) |
|
197 rename = button.Button(name='rename', title=_("Rename template")) |
|
198 |
|
199 |
|
200 @pagelet_config(name='rename.html', context=IPortalTemplate, layer=IPyAMSLayer, |
|
201 permission=MANAGE_TEMPLATE_PERMISSION) |
201 permission=MANAGE_TEMPLATE_PERMISSION) |
202 @ajax_config(name='rename.json', context=IPortalTemplate, layer=IPyAMSLayer) |
202 @ajax_config(name='properties.json', context=IPortalTemplate, layer=IPyAMSLayer) |
203 class PortalTemplateRenameForm(AdminDialogEditForm): |
203 class PortalTemplatePropertiesEditForm(AdminDialogEditForm): |
204 """Portal template rename form""" |
204 """Portal template properties edit form""" |
205 |
205 |
206 legend = _("Rename template") |
206 legend = _("Template properties") |
207 icon_css_class = 'fa fa-fw fa-edit' |
207 icon_css_class = 'fa fa-fw fa-edit' |
208 |
208 |
209 fields = field.Fields(IPortalTemplate).select('name') |
209 fields = field.Fields(IPortalTemplate).select('name', 'css_class') |
210 buttons = button.Buttons(IPortalTemplateRenameButtons) |
|
211 |
210 |
212 edit_permission = MANAGE_TEMPLATE_PERMISSION |
211 edit_permission = MANAGE_TEMPLATE_PERMISSION |
213 |
212 |
214 _renamed = False |
213 _renamed = False |
215 |
214 |
216 def updateActions(self): |
|
217 super(PortalTemplateRenameForm, self).updateActions() |
|
218 if 'rename' in self.actions: |
|
219 self.actions['rename'].addClass('btn-primary') |
|
220 |
|
221 def update_content(self, content, data): |
215 def update_content(self, content, data): |
222 changes = super(PortalTemplateRenameForm, self).update_content(content, data) |
216 changes = super().update_content(content, data) |
223 if changes: |
217 if changes: |
224 data = data.get(self, data) |
218 data = data.get(self, data) |
225 old_name = content.__name__ |
219 old_name = content.__name__ |
226 new_name = translate_string(data.get('name'), spaces='-') |
220 new_name = translate_string(data.get('name'), spaces='-') |
227 if old_name != new_name: |
221 if old_name != new_name: |