src/pyams_skin/viewlet/toplinks/__init__.py
changeset 0 bb4aabe07487
child 69 a361355b55c7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_skin/viewlet/toplinks/__init__.py	Thu Feb 19 10:59:00 2015 +0100
@@ -0,0 +1,132 @@
+#
+# Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+
+__docformat__ = 'restructuredtext'
+
+# import standard library
+
+# import interfaces
+from pyams_skin.interfaces.viewlet import ITopLinksViewletManager, ITopLinksViewlet, ITopLinksMenu, \
+    ITopTabsViewlet, ITopTabsTab
+from pyams_skin.layer import IPyAMSLayer
+
+# import packages
+from pyams_template.template import template_config
+from pyams_viewlet.manager import WeightOrderedViewletManager, TemplateBasedViewletManager, viewletmanager_config
+from pyams_viewlet.viewlet import Viewlet
+from zope.interface import implementer
+
+
+#
+# Top links viewlet manager
+#
+
+@viewletmanager_config(name='pyams.toplinks', layer=IPyAMSLayer)
+@implementer(ITopLinksViewletManager)
+class TopLinksViewletManager(WeightOrderedViewletManager):
+    """Top links viewlet manager"""
+
+
+#
+# Top links viewlet
+#
+
+@template_config(template='toplinks.pt')
+@implementer(ITopLinksViewlet)
+class TopLinksViewlet(TemplateBasedViewletManager, WeightOrderedViewletManager, Viewlet):
+    """Top links viewlet"""
+
+    label = "Label:"
+    css_class = 'top-menu'
+    dropdown_label = "Dropdown label"
+
+    def __init__(self, context, request, view, manager=None):
+        WeightOrderedViewletManager.__init__(self, context, request, view)
+        Viewlet.__init__(self, context, request, view, manager)
+
+    def update(self):
+        WeightOrderedViewletManager.update(self)
+
+
+@implementer(ITopLinksMenu)
+class TopLinksMenu(Viewlet):
+    """Top link menu"""
+
+    css_class = ""
+    label = "Menu label"
+    click_handler = None
+    url = "#"
+    data = {}
+
+    def render(self):
+        if self.css_class == 'divider':
+            return '<li class="divider"></li>'
+        else:
+            label = self.request.localizer.translate(self.label, context=self.request)
+            return '''<li class="{0}">
+                        <a href="{1}" {2}>{3}</a>
+                    </li>'''.format(self.css_class,
+                                    self.url,
+                                    self.get_data_attributes(),
+                                    label)
+
+    def get_data_attributes(self):
+        data = self.data.copy()
+        if self.click_handler:
+            data.update({'data-ams-click-handler': self.click_handler})
+        return ' '.join('%s=%s' % item for item in data.iteritems())
+
+
+#
+# Top tabs viewlet
+#
+
+@template_config(template='toptabs.pt')
+@implementer(ITopTabsViewlet)
+class TopTabsViewlet(TemplateBasedViewletManager, WeightOrderedViewletManager, Viewlet):
+    """Top tabs viewlet"""
+
+    label = "Label:"
+    css_class = 'top-tabs'
+
+    def __init__(self, context, request, view, manager=None):
+        WeightOrderedViewletManager.__init__(self, context, request, view)
+        Viewlet.__init__(self, context, request, view, manager)
+
+    def update(self):
+        WeightOrderedViewletManager.update(self)
+
+
+@implementer(ITopTabsTab)
+class TopTabsTab(Viewlet):
+    """Top tabs tab"""
+
+    css_class = ""
+    label = "Tab label"
+    click_handler = None
+    url = "#"
+    data = {'data-toggle': 'tab'}
+
+    def render(self):
+        label = self.request.localizer.translate(self.label, context=self.request)
+        return '''<li class="{0}">
+                    <a href="{1}" {2}>{3}</a>
+                </li>'''.format(self.css_class,
+                                self.url,
+                                self.get_data_attributes(),
+                                label)
+
+    def get_data_attributes(self):
+        data = self.data.copy()
+        if self.click_handler:
+            data.update({'data-ams-click-handler': self.click_handler})
+        return ' '.join('%s=%s' % item for item in data.iteritems())