src/ztfy/myams/viewlet/toplinks/__init__.py
changeset 51 dbed1ff1e070
parent 0 8a19e25e39e4
--- a/src/ztfy/myams/viewlet/toplinks/__init__.py	Wed Jul 02 10:29:06 2014 +0200
+++ b/src/ztfy/myams/viewlet/toplinks/__init__.py	Wed Jul 02 10:30:01 2014 +0200
@@ -9,22 +9,28 @@
 # import Zope3 interfaces
 
 # import local interfaces
-from ztfy.myams.viewlet.toplinks.interfaces import ITopLinksViewletManager, ITopLinksViewlet, ITopLinksMenu
+from ztfy.myams.viewlet.toplinks.interfaces import ITopLinksViewletManager, ITopLinksViewlet, ITopLinksMenu, \
+    ITopTabsViewlet, ITopTabsTab
 
 # import Zope3 packages
 from zope.i18n import translate
 from zope.interface import implements
+from zope.viewlet.manager import WeightOrderedViewletManager
 
 # import local packages
 from ztfy.baseskin.viewlet import WeightViewletManagerBase, ViewletBase
 
 
-class TopLinksViewletManager(WeightViewletManagerBase):
+class TopLinksViewletManager(WeightOrderedViewletManager):
     """Top links viewlet manager"""
 
     implements(ITopLinksViewletManager)
 
 
+#
+# Top links viewlet
+#
+
 class TopLinksViewlet(WeightViewletManagerBase, ViewletBase):
     """Top links viewlet"""
 
@@ -70,3 +76,50 @@
         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
+#
+
+class TopTabsViewlet(WeightViewletManagerBase, ViewletBase):
+    """Top tabs viewlet"""
+
+    implements(ITopTabsViewlet)
+
+    label = u"Label:"
+    css_class = u'top-tabs'
+
+    def __init__(self, context, request, view, manager=None):
+        WeightViewletManagerBase.__init__(self, context, request, view)
+        ViewletBase.__init__(self, context, request, view, manager)
+
+    def update(self):
+        WeightViewletManagerBase.update(self)
+
+
+class TopTabsTab(ViewletBase):
+    """Top tabs tab"""
+
+    implements(ITopTabsTab)
+
+    css_class = u""
+    label = u"Tab label"
+    click_handler = None
+    url = u"#"
+    data = {'data-toggle': 'tab'}
+
+    def render(self):
+        label = translate(self.label, context=self.request)
+        return u'''<li class="%s">
+                    <a href="%s" %s>%s</a>
+                </li>''' % (self.css_class,
+                            self.url,
+                            self.getDataAttributes(),
+                            unicode(label, 'utf-8') if isinstance(label, str) else label)
+
+    def getDataAttributes(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())