|
1 # |
|
2 # Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net> |
|
3 # All Rights Reserved. |
|
4 # |
|
5 # This software is subject to the provisions of the Zope Public License, |
|
6 # Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. |
|
7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED |
|
8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
|
9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
|
10 # FOR A PARTICULAR PURPOSE. |
|
11 # |
|
12 |
|
13 __docformat__ = 'restructuredtext' |
|
14 |
|
15 # import standard library |
|
16 |
|
17 # import interfaces |
|
18 from pyams_skin.interfaces.viewlet import ITopLinksViewletManager, ITopLinksViewlet, ITopLinksMenu, \ |
|
19 ITopTabsViewlet, ITopTabsTab |
|
20 from pyams_skin.layer import IPyAMSLayer |
|
21 |
|
22 # import packages |
|
23 from pyams_template.template import template_config |
|
24 from pyams_viewlet.manager import WeightOrderedViewletManager, TemplateBasedViewletManager, viewletmanager_config |
|
25 from pyams_viewlet.viewlet import Viewlet |
|
26 from zope.interface import implementer |
|
27 |
|
28 |
|
29 # |
|
30 # Top links viewlet manager |
|
31 # |
|
32 |
|
33 @viewletmanager_config(name='pyams.toplinks', layer=IPyAMSLayer) |
|
34 @implementer(ITopLinksViewletManager) |
|
35 class TopLinksViewletManager(WeightOrderedViewletManager): |
|
36 """Top links viewlet manager""" |
|
37 |
|
38 |
|
39 # |
|
40 # Top links viewlet |
|
41 # |
|
42 |
|
43 @template_config(template='toplinks.pt') |
|
44 @implementer(ITopLinksViewlet) |
|
45 class TopLinksViewlet(TemplateBasedViewletManager, WeightOrderedViewletManager, Viewlet): |
|
46 """Top links viewlet""" |
|
47 |
|
48 label = "Label:" |
|
49 css_class = 'top-menu' |
|
50 dropdown_label = "Dropdown label" |
|
51 |
|
52 def __init__(self, context, request, view, manager=None): |
|
53 WeightOrderedViewletManager.__init__(self, context, request, view) |
|
54 Viewlet.__init__(self, context, request, view, manager) |
|
55 |
|
56 def update(self): |
|
57 WeightOrderedViewletManager.update(self) |
|
58 |
|
59 |
|
60 @implementer(ITopLinksMenu) |
|
61 class TopLinksMenu(Viewlet): |
|
62 """Top link menu""" |
|
63 |
|
64 css_class = "" |
|
65 label = "Menu label" |
|
66 click_handler = None |
|
67 url = "#" |
|
68 data = {} |
|
69 |
|
70 def render(self): |
|
71 if self.css_class == 'divider': |
|
72 return '<li class="divider"></li>' |
|
73 else: |
|
74 label = self.request.localizer.translate(self.label, context=self.request) |
|
75 return '''<li class="{0}"> |
|
76 <a href="{1}" {2}>{3}</a> |
|
77 </li>'''.format(self.css_class, |
|
78 self.url, |
|
79 self.get_data_attributes(), |
|
80 label) |
|
81 |
|
82 def get_data_attributes(self): |
|
83 data = self.data.copy() |
|
84 if self.click_handler: |
|
85 data.update({'data-ams-click-handler': self.click_handler}) |
|
86 return ' '.join('%s=%s' % item for item in data.iteritems()) |
|
87 |
|
88 |
|
89 # |
|
90 # Top tabs viewlet |
|
91 # |
|
92 |
|
93 @template_config(template='toptabs.pt') |
|
94 @implementer(ITopTabsViewlet) |
|
95 class TopTabsViewlet(TemplateBasedViewletManager, WeightOrderedViewletManager, Viewlet): |
|
96 """Top tabs viewlet""" |
|
97 |
|
98 label = "Label:" |
|
99 css_class = 'top-tabs' |
|
100 |
|
101 def __init__(self, context, request, view, manager=None): |
|
102 WeightOrderedViewletManager.__init__(self, context, request, view) |
|
103 Viewlet.__init__(self, context, request, view, manager) |
|
104 |
|
105 def update(self): |
|
106 WeightOrderedViewletManager.update(self) |
|
107 |
|
108 |
|
109 @implementer(ITopTabsTab) |
|
110 class TopTabsTab(Viewlet): |
|
111 """Top tabs tab""" |
|
112 |
|
113 css_class = "" |
|
114 label = "Tab label" |
|
115 click_handler = None |
|
116 url = "#" |
|
117 data = {'data-toggle': 'tab'} |
|
118 |
|
119 def render(self): |
|
120 label = self.request.localizer.translate(self.label, context=self.request) |
|
121 return '''<li class="{0}"> |
|
122 <a href="{1}" {2}>{3}</a> |
|
123 </li>'''.format(self.css_class, |
|
124 self.url, |
|
125 self.get_data_attributes(), |
|
126 label) |
|
127 |
|
128 def get_data_attributes(self): |
|
129 data = self.data.copy() |
|
130 if self.click_handler: |
|
131 data.update({'data-ams-click-handler': self.click_handler}) |
|
132 return ' '.join('%s=%s' % item for item in data.iteritems()) |