10 # FOR A PARTICULAR PURPOSE. |
10 # FOR A PARTICULAR PURPOSE. |
11 # |
11 # |
12 |
12 |
13 __docformat__ = 'restructuredtext' |
13 __docformat__ = 'restructuredtext' |
14 |
14 |
|
15 import json |
|
16 import locale |
15 |
17 |
16 # import standard library |
18 from z3c.form import button, field |
17 import json |
19 from z3c.form.util import changedField |
|
20 from zope.interface import Interface, implementer |
18 |
21 |
19 # import interfaces |
|
20 from pyams_content.interfaces import MANAGE_TOOL_PERMISSION |
22 from pyams_content.interfaces import MANAGE_TOOL_PERMISSION |
21 from pyams_content.reference.pictograms.interfaces import IPictogramManagerTarget, IPictogramManager, IPictogramTable |
23 from pyams_content.reference.pictograms.interfaces import IPictogramManager, IPictogramManagerTarget, IPictogramTable |
22 from pyams_form.interfaces.form import IWidgetForm, IWidgetsSuffixViewletsManager, IUncheckedEditFormButtons |
24 from pyams_form.form import ajax_config |
|
25 from pyams_form.interfaces.form import IUncheckedEditFormButtons, IWidgetForm, IWidgetsSuffixViewletsManager |
|
26 from pyams_i18n.interfaces import II18n |
|
27 from pyams_pagelet.pagelet import pagelet_config |
23 from pyams_skin.interfaces import IInnerPage |
28 from pyams_skin.interfaces import IInnerPage |
24 from pyams_skin.layer import IPyAMSLayer |
29 from pyams_skin.layer import IPyAMSLayer |
|
30 from pyams_skin.viewlet.menu import MenuItem |
|
31 from pyams_template.template import template_config |
25 from pyams_utils.interfaces.data import IObjectData |
32 from pyams_utils.interfaces.data import IObjectData |
|
33 from pyams_utils.registry import query_utility |
|
34 from pyams_utils.traversing import get_parent |
|
35 from pyams_viewlet.viewlet import Viewlet, viewlet_config |
|
36 from pyams_zmi.form import AdminEditForm |
26 from pyams_zmi.interfaces.menu import IPropertiesMenu |
37 from pyams_zmi.interfaces.menu import IPropertiesMenu |
27 from pyams_zmi.layer import IAdminLayer |
38 from pyams_zmi.layer import IAdminLayer |
28 |
|
29 # import packages |
|
30 from pyams_form.form import ajax_config |
|
31 from pyams_pagelet.pagelet import pagelet_config |
|
32 from pyams_skin.viewlet.menu import MenuItem |
|
33 from pyams_template.template import template_config |
|
34 from pyams_utils.registry import query_utility |
|
35 from pyams_utils.traversing import get_parent |
|
36 from pyams_viewlet.viewlet import viewlet_config, Viewlet |
|
37 from pyams_zmi.form import AdminEditForm |
|
38 from z3c.form import field, button |
|
39 from z3c.form.util import changedField |
|
40 from zope.interface import implementer, Interface |
|
41 |
39 |
42 from pyams_content import _ |
40 from pyams_content import _ |
43 |
41 |
44 |
42 |
45 @viewlet_config(name='pictograms-selection.menu', context=IPictogramManagerTarget, layer=IAdminLayer, |
43 @viewlet_config(name='pictograms-selection.menu', context=IPictogramManagerTarget, layer=IAdminLayer, |
83 view=PictogramManagerEditForm, manager=IWidgetsSuffixViewletsManager, permission=MANAGE_TOOL_PERMISSION) |
81 view=PictogramManagerEditForm, manager=IWidgetsSuffixViewletsManager, permission=MANAGE_TOOL_PERMISSION) |
84 @template_config(template='templates/manager-selection.pt', layer=IAdminLayer) |
82 @template_config(template='templates/manager-selection.pt', layer=IAdminLayer) |
85 class PictogramManagerSelectionView(Viewlet): |
83 class PictogramManagerSelectionView(Viewlet): |
86 """Pictogram manager selection viewlet""" |
84 """Pictogram manager selection viewlet""" |
87 |
85 |
|
86 pictogram_table = None |
|
87 pictogram_manager = None |
|
88 |
|
89 def update(self): |
|
90 super(PictogramManagerSelectionView, self).update() |
|
91 self.pictogram_table = query_utility(IPictogramTable) |
|
92 target = get_parent(self.context, IPictogramManagerTarget) |
|
93 if target is not None: |
|
94 self.pictogram_manager = IPictogramManager(target) |
|
95 |
|
96 @property |
|
97 def sorted_pictograms(self): |
|
98 yield from sorted(self.pictogram_table.values(), |
|
99 key=lambda x: locale.strxfrm(II18n(x).query_attribute('title', |
|
100 request=self.request) or '').lower()) |
|
101 |
88 @property |
102 @property |
89 def available_pictograms(self): |
103 def available_pictograms(self): |
90 table = query_utility(IPictogramTable) |
104 manager = self.pictogram_manager |
91 target = get_parent(self.context, IPictogramManagerTarget) |
105 if manager is not None: |
92 if target is not None: |
106 for pictogram in self.sorted_pictograms: |
93 manager = IPictogramManager(target) |
107 if pictogram.__name__ not in manager.selected_pictograms: |
94 for pictogram in table.values(): |
|
95 if (not manager.selected_pictograms) or (pictogram.__name__ not in manager.selected_pictograms): |
|
96 yield pictogram |
108 yield pictogram |
97 |
109 |
98 @property |
110 @property |
99 def selected_pictograms(self): |
111 def selected_pictograms(self): |
100 table = query_utility(IPictogramTable) |
112 manager = self.pictogram_manager |
101 target = get_parent(self.context, IPictogramManagerTarget) |
113 if manager is not None: |
102 if target is not None: |
114 for name in (manager.selected_pictograms or ()): |
103 manager = IPictogramManager(target) |
115 pictogram = self.pictogram_table.get(name) |
104 if manager.selected_pictograms: |
116 if pictogram is not None: |
105 for name in manager.selected_pictograms: |
117 yield pictogram |
106 pictogram = table.get(name) |
|
107 if pictogram is not None: |
|
108 yield pictogram |
|