8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
12 |
12 |
|
13 |
13 __docformat__ = 'restructuredtext' |
14 __docformat__ = 'restructuredtext' |
14 |
15 |
15 |
|
16 # import standard library |
|
17 import json |
16 import json |
18 |
17 |
19 from pyramid.decorator import reify |
18 from pyramid.decorator import reify |
20 from pyramid.events import subscriber |
19 from pyramid.events import subscriber |
21 from pyramid.exceptions import NotFound |
20 from pyramid.exceptions import NotFound |
22 from pyramid.view import view_config |
21 from pyramid.view import view_config |
23 from z3c.form import field |
22 from z3c.form import field |
24 from z3c.form.interfaces import DISPLAY_MODE, IDataExtractedEvent |
23 from z3c.form.interfaces import DISPLAY_MODE, IDataExtractedEvent |
25 from z3c.table.interfaces import IColumn, IValues |
24 from z3c.table.interfaces import IColumn, IValues |
26 from zope.interface import Invalid |
25 from zope.interface import Invalid, implementer |
27 |
26 |
28 from pyams_content import _ |
27 from pyams_content import _ |
29 # import interfaces |
|
30 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION, MANAGE_TOOL_PERMISSION |
28 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION, MANAGE_TOOL_PERMISSION |
31 # import packages |
|
32 from pyams_content.reference.pictograms.zmi.widget import PictogramSelectFieldWidget |
29 from pyams_content.reference.pictograms.zmi.widget import PictogramSelectFieldWidget |
33 from pyams_content.shared.common.interfaces.types import IBaseDataType, IDataType, ISubType, ITypedDataManager, \ |
30 from pyams_content.shared.common.interfaces.types import IBaseDataType, IDataType, ISubType, ITypedDataManager, \ |
34 ITypedSharedTool, IWfTypedSharedContent |
31 ITypedSharedTool, IWfTypedSharedContent |
35 from pyams_content.shared.common.types import DataType, SubType |
32 from pyams_content.shared.common.types import DataType, SubType |
36 from pyams_content.shared.common.zmi import SharedContentAddForm |
33 from pyams_content.shared.common.zmi import SharedContentAddForm |
37 from pyams_content.shared.common.zmi.properties import SharedContentPropertiesEditForm |
34 from pyams_content.shared.common.zmi.properties import SharedContentPropertiesEditForm |
38 from pyams_content.skin import pyams_content |
35 from pyams_content.skin import pyams_content |
39 from pyams_form.form import AJAXAddForm, ajax_config |
36 from pyams_form.form import AJAXAddForm, ajax_config |
|
37 from pyams_form.interfaces.form import IWidgetForm |
40 from pyams_form.security import ProtectedFormObjectMixin |
38 from pyams_form.security import ProtectedFormObjectMixin |
41 from pyams_i18n.interfaces import II18n |
39 from pyams_i18n.interfaces import II18n |
42 from pyams_i18n.widget import I18nSEOTextLineFieldWidget |
40 from pyams_i18n.widget import I18nSEOTextLineFieldWidget |
43 from pyams_pagelet.pagelet import pagelet_config |
41 from pyams_pagelet.pagelet import pagelet_config |
44 from pyams_skin.container import delete_container_element |
42 from pyams_skin.container import delete_container_element |
45 from pyams_skin.event import get_json_table_refresh_event |
43 from pyams_skin.event import get_json_table_refresh_event |
|
44 from pyams_skin.interfaces import IInnerPage |
46 from pyams_skin.interfaces.container import ITableElementName |
45 from pyams_skin.interfaces.container import ITableElementName |
47 from pyams_skin.interfaces.viewlet import IWidgetTitleViewletManager |
46 from pyams_skin.interfaces.viewlet import IWidgetTitleViewletManager |
48 from pyams_skin.layer import IPyAMSLayer |
47 from pyams_skin.layer import IPyAMSLayer |
49 from pyams_skin.table import ActionColumn, BaseTable, NameColumn, SorterColumn, TrashColumn |
48 from pyams_skin.table import ActionColumn, BaseTable, NameColumn, SorterColumn, TrashColumn |
50 from pyams_skin.viewlet.menu import MenuItem |
49 from pyams_skin.viewlet.menu import MenuItem |
54 from pyams_utils.traversing import get_parent |
53 from pyams_utils.traversing import get_parent |
55 from pyams_utils.unicode import translate_string |
54 from pyams_utils.unicode import translate_string |
56 from pyams_utils.url import absolute_url |
55 from pyams_utils.url import absolute_url |
57 from pyams_viewlet.interfaces import IViewletManager |
56 from pyams_viewlet.interfaces import IViewletManager |
58 from pyams_viewlet.viewlet import viewlet_config |
57 from pyams_viewlet.viewlet import viewlet_config |
59 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm |
58 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm, AdminEditForm |
60 from pyams_zmi.interfaces.menu import IPropertiesMenu |
59 from pyams_zmi.interfaces.menu import IPropertiesMenu |
61 from pyams_zmi.layer import IAdminLayer |
60 from pyams_zmi.layer import IAdminLayer |
62 from pyams_zmi.view import ContainerAdminView |
61 from pyams_zmi.view import ContainerAdminView |
63 |
62 |
64 |
63 |
155 ' <span class="small hint" title="{hint}" data-ams-hint-gravity="e">' \ |
154 ' <span class="small hint" title="{hint}" data-ams-hint-gravity="e">' \ |
156 ' <i class="fa fa-plus-square-o switch"></i>' \ |
155 ' <i class="fa fa-plus-square-o switch"></i>' \ |
157 ' </span>' \ |
156 ' </span>' \ |
158 '</span> <span class="title">{title}</span>' \ |
157 '</span> <span class="title">{title}</span>' \ |
159 '<div class="inner-table-form subtypes margin-x-10 margin-bottom-0 padding-left-5"></div>'.format( |
158 '<div class="inner-table-form subtypes margin-x-10 margin-bottom-0 padding-left-5"></div>'.format( |
160 hint=self.request.localizer.translate(_("Click to see subtypes")), |
159 hint=self.request.localizer.translate(_("Click to see subtypes")), |
161 title=super(TypedSharedToolTypesNameColumn, self).renderCell(item)) |
160 title=super(TypedSharedToolTypesNameColumn, self).renderCell(item)) |
162 |
161 |
163 |
162 |
164 @adapter_config(name='paragraphs', context=(ITypedSharedTool, IPyAMSLayer, TypedSharedToolTypesTable), |
163 @adapter_config(name='paragraphs', context=(ITypedSharedTool, IPyAMSLayer, TypedSharedToolTypesTable), |
165 provides=IColumn) |
164 provides=IColumn) |
166 class TypedSharedToolTypesParagraphsColumn(ActionColumn): |
165 class TypedSharedToolTypesParagraphsColumn(ActionColumn): |
590 if not self.context.handle_header: |
589 if not self.context.handle_header: |
591 fields = fields.omit('header') |
590 fields = fields.omit('header') |
592 if not self.context.handle_description: |
591 if not self.context.handle_description: |
593 fields = fields.omit('description') |
592 fields = fields.omit('description') |
594 return fields |
593 return fields |
|
594 |
|
595 |
|
596 # |
|
597 # Typed shared content custom fields edit form |
|
598 # |
|
599 |
|
600 @implementer(IWidgetForm, IInnerPage) |
|
601 class TypedSharedContentTypeFieldsEditForm(AdminEditForm): |
|
602 """Typed shared content type fields properties edit form""" |
|
603 |
|
604 prefix = 'type_properties.' |
|
605 |
|
606 @property |
|
607 def legend(self): |
|
608 translate = self.request.localizer.translate |
|
609 data_type = self.context.get_data_type() |
|
610 return translate(_("Custom properties for type « {0} »")).format( |
|
611 II18n(data_type).query_attribute('label', request=self.request)) |
|
612 |
|
613 @property |
|
614 def fields(self): |
|
615 data_type = self.context.get_data_type() |
|
616 if data_type is not None: |
|
617 manager = get_parent(self.context, ITypedSharedTool) |
|
618 return field.Fields(manager.shared_content_types_fields).select(*data_type.field_names) |