src/pyams_skin/viewlet/toplinks/__init__.py
changeset 557 bca7a7e058a3
equal deleted inserted replaced
-1:000000000000 557:bca7a7e058a3
       
     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)
       
    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.items())
       
    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())