src/pyams_skin/viewlet/menu/__init__.py
changeset 0 bb4aabe07487
child 90 2c75cd01d282
equal deleted inserted replaced
-1:000000000000 0:bb4aabe07487
       
     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 IMainMenusViewletManager, IMenu, IMenuItem
       
    19 from pyams_skin.layer import IPyAMSLayer
       
    20 
       
    21 # import packages
       
    22 from pyams_template.template import template_config
       
    23 from pyams_viewlet.manager import WeightOrderedViewletManager, TemplateBasedViewletManager, viewletmanager_config
       
    24 from pyams_viewlet.viewlet import Viewlet
       
    25 from zope.schema.fieldproperty import FieldProperty
       
    26 from zope.interface import implementer
       
    27 
       
    28 
       
    29 #
       
    30 # Main menus viewlet manager
       
    31 #
       
    32 
       
    33 @viewletmanager_config(name='pyams.menus', layer=IPyAMSLayer, provides=IMainMenusViewletManager)
       
    34 @template_config(template='manager.pt', layer=IPyAMSLayer)
       
    35 class MainMenusViewletManager(TemplateBasedViewletManager, WeightOrderedViewletManager):
       
    36     """Mains menus viewlet manager"""
       
    37 
       
    38 
       
    39 #
       
    40 # Menus group
       
    41 #
       
    42 
       
    43 @template_config(template='menu.pt', layer=IPyAMSLayer)
       
    44 @implementer(IMenu)
       
    45 class Menu(TemplateBasedViewletManager, WeightOrderedViewletManager, Viewlet):
       
    46     """Menu header"""
       
    47 
       
    48     header = FieldProperty(IMenu['header'])
       
    49 
       
    50     def __init__(self, context, request, view, manager=None):
       
    51         WeightOrderedViewletManager.__init__(self, context, request, view)
       
    52         Viewlet.__init__(self, context, request, view, manager)
       
    53 
       
    54     def update(self):
       
    55         WeightOrderedViewletManager.update(self)
       
    56 
       
    57     def render(self):
       
    58         return Viewlet.render(self)
       
    59 
       
    60 
       
    61 @template_config(template='menu-item.pt', layer=IPyAMSLayer)
       
    62 @implementer(IMenuItem)
       
    63 class MenuItem(TemplateBasedViewletManager, WeightOrderedViewletManager, Viewlet):
       
    64     """Menu viewlet"""
       
    65 
       
    66     css_class = FieldProperty(IMenuItem['css_class'])
       
    67     icon_class = FieldProperty(IMenuItem['icon_class'])
       
    68     label = FieldProperty(IMenuItem['label'])
       
    69     badge = FieldProperty(IMenuItem['badge'])
       
    70     badge_class = FieldProperty(IMenuItem['badge_class'])
       
    71     notice = FieldProperty(IMenuItem['notice'])
       
    72     notice_class = FieldProperty(IMenuItem['notice_class'])
       
    73     click_handler = FieldProperty(IMenuItem['click_handler'])
       
    74     url = FieldProperty(IMenuItem['url'])
       
    75     modal_target = FieldProperty(IMenuItem['modal_target'])
       
    76     data = FieldProperty(IMenuItem['data'])
       
    77 
       
    78     def __init__(self, context, request, view, manager=None):
       
    79         WeightOrderedViewletManager.__init__(self, context, request, view)
       
    80         Viewlet.__init__(self, context, request, view, manager)
       
    81 
       
    82     def update(self):
       
    83         WeightOrderedViewletManager.update(self)
       
    84 
       
    85     def render(self):
       
    86         return Viewlet.render(self)
       
    87 
       
    88     def get_url(self):
       
    89         return self.url
       
    90 
       
    91     def get_data_attributes(self):
       
    92         data = self.data.copy()
       
    93         if self.click_handler:
       
    94             data.update({'data-ams-click-handler': self.click_handler})
       
    95         return ' '.join('%s=%s' % item for item in data.iteritems())
       
    96 
       
    97 
       
    98 @template_config(template='menu-divider.pt', layer=IPyAMSLayer)
       
    99 @implementer(IMenuItem)
       
   100 class MenuDivider(Viewlet):
       
   101     """Menu divider viewlet"""
       
   102 
       
   103     header = None
       
   104     css_class = 'divider'
       
   105     icon_class = None
       
   106     label = None
       
   107     badge = None
       
   108     badge_class = None
       
   109     notice = None
       
   110     notice_class = None
       
   111     click_handler = None
       
   112     url = None
       
   113     modal_target = False
       
   114     data = None
       
   115 
       
   116     def get_url(self):
       
   117         return None