10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
12 |
12 |
13 __docformat__ = 'restructuredtext' |
13 __docformat__ = 'restructuredtext' |
14 |
14 |
15 |
|
16 # import standard library |
|
17 import json |
15 import json |
18 |
16 |
19 # import interfaces |
|
20 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION |
|
21 from pyams_content.component.association.interfaces import IAssociationContainer |
|
22 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \ |
|
23 IBaseParagraph, IParagraphFactorySettings |
|
24 from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor, IParagraphTitleToolbar, \ |
|
25 IParagraphContainerTable, IParagraphContainerView |
|
26 from pyams_form.interfaces.form import IFormSecurityContext, IInnerSubForm |
|
27 from pyams_i18n.interfaces import II18n |
|
28 from pyams_skin.interfaces import IInnerPage, IPageHeader |
|
29 from pyams_skin.interfaces.container import ITableElementEditor |
|
30 from pyams_skin.layer import IPyAMSLayer |
|
31 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION |
|
32 from pyams_zmi.interfaces.menu import IPropertiesMenu |
|
33 from pyams_zmi.layer import IAdminLayer |
|
34 from z3c.table.interfaces import IColumn, IValues |
|
35 from zope.contentprovider.interfaces import IContentProvider |
|
36 |
|
37 # import packages |
|
38 from pyams_content.component.association.zmi import AssociationsContainerView |
|
39 from pyams_content.component.paragraph import BaseParagraph |
|
40 from pyams_content.shared.common.zmi import WfModifiedContentColumnMixin |
|
41 from pyams_content.skin import pyams_content |
|
42 from pyams_form.security import ProtectedFormObjectMixin |
|
43 from pyams_pagelet.pagelet import pagelet_config |
|
44 from pyams_skin.container import switch_element_visibility, switch_element_attribute |
|
45 from pyams_skin.page import DefaultPageHeaderAdapter |
|
46 from pyams_skin.table import BaseTable, I18nColumn, TrashColumn, SorterColumn, ImageColumn, \ |
|
47 VisibilitySwitcherColumn, AttributeSwitcherColumn |
|
48 from pyams_skin.viewlet.menu import MenuItem |
|
49 from pyams_template.template import template_config |
|
50 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter, NullAdapter |
|
51 from pyams_utils.fanstatic import get_resource_path |
|
52 from pyams_utils.traversing import get_parent |
|
53 from pyams_utils.url import absolute_url |
|
54 from pyams_viewlet.manager import viewletmanager_config, WeightOrderedViewletManager, TemplateBasedViewletManager |
|
55 from pyams_viewlet.viewlet import viewlet_config, Viewlet |
|
56 from pyams_zmi.form import AdminDialogDisplayForm |
|
57 from pyams_zmi.view import AdminView, ContainerAdminView |
|
58 from pyams_zmi.zmi.table import InnerTableView |
|
59 from pyramid.decorator import reify |
17 from pyramid.decorator import reify |
60 from pyramid.exceptions import NotFound |
18 from pyramid.exceptions import NotFound |
61 from pyramid.view import view_config |
19 from pyramid.view import view_config |
62 from z3c.form import field |
20 from z3c.form import field |
63 from z3c.table.column import GetAttrColumn |
21 from z3c.table.column import GetAttrColumn |
64 from zope.interface import implementer, Interface |
22 from z3c.table.interfaces import IColumn, IValues |
|
23 from zope.contentprovider.interfaces import IContentProvider |
|
24 from zope.interface import Interface, implementer |
|
25 |
|
26 from pyams_content.component.association.interfaces import IAssociationContainer |
|
27 from pyams_content.component.association.zmi import AssociationsContainerView |
|
28 from pyams_content.component.paragraph import BaseParagraph |
|
29 from pyams_content.component.paragraph.interfaces import IBaseParagraph, IParagraphContainer, IParagraphContainerTarget, \ |
|
30 IParagraphFactorySettings |
|
31 from pyams_content.component.paragraph.zmi.interfaces import IParagraphContainerTable, IParagraphContainerView, \ |
|
32 IParagraphInnerEditor, IParagraphTitleToolbar, IParagraphTitleValue |
|
33 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION |
|
34 from pyams_content.shared.common.zmi import WfModifiedContentColumnMixin |
|
35 from pyams_content.skin import pyams_content |
|
36 from pyams_form.interfaces.form import IFormSecurityContext, IInnerSubForm |
|
37 from pyams_form.security import ProtectedFormObjectMixin |
|
38 from pyams_i18n.interfaces import II18n |
|
39 from pyams_pagelet.pagelet import pagelet_config |
|
40 from pyams_skin.container import switch_element_attribute, switch_element_visibility |
|
41 from pyams_skin.interfaces import IInnerPage, IPageHeader |
|
42 from pyams_skin.interfaces.container import ITableElementEditor |
|
43 from pyams_skin.layer import IPyAMSLayer |
|
44 from pyams_skin.page import DefaultPageHeaderAdapter |
|
45 from pyams_skin.table import AttributeSwitcherColumn, BaseTable, I18nColumn, ImageColumn, SorterColumn, TrashColumn, \ |
|
46 VisibilitySwitcherColumn |
|
47 from pyams_skin.viewlet.menu import MenuItem |
|
48 from pyams_template.template import template_config |
|
49 from pyams_utils.adapter import ContextRequestViewAdapter, NullAdapter, adapter_config |
|
50 from pyams_utils.fanstatic import get_resource_path |
|
51 from pyams_utils.interfaces import VIEW_SYSTEM_PERMISSION |
|
52 from pyams_utils.traversing import get_parent |
|
53 from pyams_utils.url import absolute_url |
|
54 from pyams_viewlet.manager import TemplateBasedViewletManager, WeightOrderedViewletManager, viewletmanager_config |
|
55 from pyams_viewlet.viewlet import Viewlet, viewlet_config |
|
56 from pyams_zmi.form import AdminDialogDisplayForm |
|
57 from pyams_zmi.interfaces.menu import IPropertiesMenu |
|
58 from pyams_zmi.layer import IAdminLayer |
|
59 from pyams_zmi.view import AdminView, ContainerAdminView |
|
60 from pyams_zmi.zmi.table import InnerTableView |
65 |
61 |
66 from pyams_content import _ |
62 from pyams_content import _ |
67 |
63 |
68 |
64 |
69 @viewlet_config(name='paragraphs.menu', context=IParagraphContainerTarget, layer=IAdminLayer, |
65 @viewlet_config(name='paragraphs.menu', context=IParagraphContainerTarget, layer=IAdminLayer, |
290 ' data-ams-click-handler="PyAMS_content.paragraphs.switchAllEditors">' \ |
289 ' data-ams-click-handler="PyAMS_content.paragraphs.switchAllEditors">' \ |
291 ' <span class="small hint" title="{hint}" data-ams-hint-gravity="e">' \ |
290 ' <span class="small hint" title="{hint}" data-ams-hint-gravity="e">' \ |
292 ' <i class="fa fa-plus-square-o switch"></i>' \ |
291 ' <i class="fa fa-plus-square-o switch"></i>' \ |
293 ' </span> {title}' \ |
292 ' </span> {title}' \ |
294 '</span>'.format( |
293 '</span>'.format( |
295 hint=self.request.localizer.translate(_("Click to open/close all paragraphs editors")), |
294 hint=self.request.localizer.translate(_("Click to open/close all paragraphs editors")), |
296 title=super(ParagraphContainerTitleColumn, self).renderHeadCell()) |
295 title=super(ParagraphContainerTitleColumn, self).renderHeadCell()) |
297 |
296 |
298 def renderCell(self, item): |
297 def renderCell(self, item): |
299 provider = getParagraphTitleHints(item, self.request, self.table) or '' |
298 provider = get_paragraph_title_hints(item, self.request, self.table) or '' |
300 return '<div data-ams-stop-propagation="true" ' \ |
299 return '<div data-ams-stop-propagation="true" ' \ |
301 ' data-ams-click-handler="PyAMS_content.paragraphs.switchEditor">{provider}' \ |
300 ' data-ams-click-handler="PyAMS_content.paragraphs.switchEditor">{provider}' \ |
302 ' <span class="small hint" title="{hint}" data-ams-hint-gravity="e">' \ |
301 ' <span class="small hint" title="{hint}" data-ams-hint-gravity="e">' \ |
303 ' <i class="fa fa-plus-square-o switch"></i>' \ |
302 ' <i class="fa fa-plus-square-o switch"></i>' \ |
304 ' </span> <span class="title">{title}</span>' \ |
303 ' </span> <span class="title">{title}</span>' \ |
305 '</div>' \ |
304 '</div>' \ |
306 '<div class="inner-table-form editor margin-x-10 margin-bottom-0"></div>'.format( |
305 '<div class="inner-table-form editor margin-x-10 margin-bottom-0"></div>'.format( |
307 provider=provider, |
306 provider=provider, |
308 hint=self.request.localizer.translate(_("Click to open/close paragraph editor")), |
307 hint=self.request.localizer.translate(_("Click to open/close paragraph editor")), |
309 title=super(ParagraphContainerTitleColumn, self).renderCell(item)) |
308 title=super(ParagraphContainerTitleColumn, self).renderCell(item)) |
310 |
309 |
311 |
310 |
312 @template_config(template='templates/paragraph-title-icon.pt', layer=IPyAMSLayer) |
311 @template_config(template='templates/paragraph-title-icon.pt', layer=IPyAMSLayer) |
313 class ParagraphContainerCounterBase(Viewlet): |
312 class ParagraphContainerCounterBase(Viewlet): |
314 """Paragraph container base counter viewlet""" |
313 """Paragraph container base counter viewlet""" |