src/pyams_skin/interfaces/viewlet.py
changeset 0 bb4aabe07487
child 17 64b2c19e7452
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_viewlet.interfaces import IViewlet, IViewletManager
       
    19 
       
    20 # import packages
       
    21 from zope.interface import Attribute
       
    22 from zope.schema import Text, TextLine, List, Object, Dict, Bool
       
    23 
       
    24 from pyams_skin import _
       
    25 
       
    26 
       
    27 #
       
    28 # Top links viewlet manager
       
    29 #
       
    30 
       
    31 class ITopLinksViewletManager(IViewletManager):
       
    32     """Topo links viewlet manager interface"""
       
    33 
       
    34 
       
    35 #
       
    36 # Top drop-down menus viewlet
       
    37 #
       
    38 
       
    39 class ITopLinksMenu(IViewlet):
       
    40     """Top link menu"""
       
    41 
       
    42     css_class = TextLine(title="Menu CSS class",
       
    43                          required=False)
       
    44 
       
    45     label = TextLine(title="Menu label")
       
    46 
       
    47     click_handler = TextLine(title="Menu click handler",
       
    48                              description="Name of a Javascript function handling menu click",
       
    49                              required=False)
       
    50 
       
    51     url = TextLine(title="Menu link target")
       
    52 
       
    53     data = Dict(title="Menu data attributes",
       
    54                 key_type=TextLine(),
       
    55                 value_type=TextLine())
       
    56 
       
    57 
       
    58 class ITopLinksViewlet(IViewlet):
       
    59     """Top links viewlet"""
       
    60 
       
    61     label = TextLine(title="Main label")
       
    62 
       
    63     dropdown_label = TextLine(title="Drop-down menu label")
       
    64 
       
    65     css_class = TextLine(title="Main CSS class")
       
    66 
       
    67     viewlets = List(title="Top links menu",
       
    68                     value_type=Object(schema=ITopLinksMenu))
       
    69 
       
    70 
       
    71 #
       
    72 # Top tabs viewlet
       
    73 #
       
    74 
       
    75 class ITopTabsTab(IViewlet):
       
    76     """Top tabs tab"""
       
    77 
       
    78     css_class = TextLine(title="Tab CSS class",
       
    79                          required=False)
       
    80 
       
    81     label = TextLine(title="Tab label")
       
    82 
       
    83     click_handler = TextLine(title="Tab click handler",
       
    84                              description="Name of a Javascript function handling tab click",
       
    85                              required=False)
       
    86 
       
    87     url = TextLine(title="Tab link target")
       
    88 
       
    89     data = Dict(title="Tab data attribrutes",
       
    90                 key_type=TextLine(),
       
    91                 value_type=TextLine())
       
    92 
       
    93 
       
    94 class ITopTabsViewlet(IViewlet):
       
    95     """Top tabs viewlet"""
       
    96 
       
    97     label = TextLine(title="Main label")
       
    98 
       
    99     css_class = TextLine(title="Main CSS class")
       
   100 
       
   101     viewlets = List(title="Top tabs items",
       
   102                     value_type=Object(schema=ITopTabsTab))
       
   103 
       
   104 
       
   105 #
       
   106 # Shortcuts viewlet manager
       
   107 #
       
   108 
       
   109 class IShortcutsViewletManager(IViewletManager):
       
   110     """Shortcuts viewlet manager"""
       
   111 
       
   112 
       
   113 class IShortcut(IViewlet):
       
   114     """Shortcut viewlet interface"""
       
   115 
       
   116     bg_color_class = TextLine(title="Shortcut CSS class")
       
   117 
       
   118     icon_class = TextLine(title="Shortcut icon class")
       
   119 
       
   120     label = Attribute("Shortcut title")
       
   121 
       
   122     url = TextLine(title="Shortcut target URL")
       
   123 
       
   124     target = TextLine(title="Window target",
       
   125                       required=False)
       
   126 
       
   127     modal_target = Bool(title="Modal target",
       
   128                         required=True,
       
   129                         default=True)
       
   130 
       
   131     checked = TextLine(title="Checked shortcut class",
       
   132                        required=False)
       
   133 
       
   134     def get_url(self):
       
   135         """Return shortcut absolute URL"""
       
   136 
       
   137 
       
   138 #
       
   139 # Menus viewlet manager
       
   140 #
       
   141 
       
   142 class IMainMenusViewletManager(IViewletManager):
       
   143     """Main menu viewlet manager"""
       
   144 
       
   145 
       
   146 class IMenu(IViewlet):
       
   147     """Menu interface"""
       
   148 
       
   149     header = TextLine(title="Menu header",
       
   150                       required=False)
       
   151 
       
   152 
       
   153 class IMenuItem(IViewlet):
       
   154     """Menu item interface
       
   155 
       
   156     A menu is a viewlet as well as a viewlets manager,
       
   157     containing sub-menus
       
   158     """
       
   159 
       
   160     css_class = TextLine(title="CSS class",
       
   161                          required=False)
       
   162 
       
   163     icon_class = TextLine(title="Icon CSS class",
       
   164                           required=False)
       
   165 
       
   166     label = TextLine(title="Menu title",
       
   167                      required=False)
       
   168 
       
   169     badge = TextLine(title="Badge text",
       
   170                      required=False)
       
   171 
       
   172     badge_class = TextLine(title="Badge CSS class",
       
   173                            required=False)
       
   174 
       
   175     notice = TextLine(title="Notice text",
       
   176                       required=False)
       
   177 
       
   178     notice_class = TextLine(title="Notice CSS class",
       
   179                             required=False)
       
   180 
       
   181     click_handler = TextLine(title="Menu click handler",
       
   182                              required=False)
       
   183 
       
   184     url = TextLine(title="Menu link location",
       
   185                    required=False,
       
   186                    default=u'#')
       
   187 
       
   188     modal_target = Bool(title="Modal target",
       
   189                         required=False,
       
   190                         default=False)
       
   191 
       
   192     data = Dict(title="Menu data attributes",
       
   193                 key_type=TextLine(),
       
   194                 value_type=TextLine(),
       
   195                 required=False)
       
   196 
       
   197     def get_url(self):
       
   198         """Get menu target URL"""
       
   199 
       
   200     def get_data_attributes(self):
       
   201         """Get data attributes"""
       
   202 
       
   203 
       
   204 #
       
   205 # Extensions viewlet manager
       
   206 #
       
   207 
       
   208 class IJSExtensionsViewletManager(IViewletManager):
       
   209     """Javascript extensions viewlet manager
       
   210 
       
   211     These extensions (like Google Analytics tracking code for example)
       
   212     can be included into layouts footer
       
   213     """
       
   214 
       
   215 
       
   216 #
       
   217 # Activity viewlet manager
       
   218 #
       
   219 
       
   220 class IActivityViewletManager(IViewletManager):
       
   221     """User activity viewlet manager"""
       
   222 
       
   223     header = TextLine(title="Initial header message")
       
   224 
       
   225     message = Text(title="Initial message")
       
   226 
       
   227     loading_text = TextLine(title="Tab loading text",
       
   228                             default=_("&lt;i class=&#39;fa fa-refresh fa-spin&#39;&gt;&lt;/i&gt; Loading..."))
       
   229 
       
   230     def get_last_update(self):
       
   231         """Get last update time"""
       
   232 
       
   233 
       
   234 class IActivityViewlet(IViewlet):
       
   235     """User activity panel viewlet"""
       
   236 
       
   237     label = TextLine(title="Tab label")
       
   238 
       
   239     click_handler = TextLine(title="Tab click handler",
       
   240                              required=False)
       
   241 
       
   242     url = TextLine(title="Tab content loading URL",
       
   243                    required=False)
       
   244 
       
   245     def get_url(self):
       
   246         """Get menu target URL"""
       
   247 
       
   248 
       
   249 #
       
   250 # Toolbar viewlet manager
       
   251 #
       
   252 
       
   253 class IToolbarViewletManager(IViewletManager):
       
   254     """Toolbar viewlet manager"""
       
   255 
       
   256 
       
   257 class IToolbarViewlet(IViewlet):
       
   258     """Base interface for all toolbar viewlet"""
       
   259 
       
   260 
       
   261 class IToolbarAction(IToolbarViewlet):
       
   262     """Toolbar action viewlet"""
       
   263 
       
   264     label = TextLine(title="Button label")
       
   265 
       
   266     label_css_class = TextLine(title="Label icon CSS class",
       
   267                                default='fa fa-plus')
       
   268 
       
   269     css_class = TextLine(title="Button CSS class",
       
   270                          default='btn btn-xs btn-success')
       
   271 
       
   272     click_handler = TextLine(title="Button click handler",
       
   273                              required=False)
       
   274 
       
   275     url = TextLine(title="Button target URL")
       
   276 
       
   277     modal_target = Bool(title="Modal target?",
       
   278                         required=False,
       
   279                         default=False)
       
   280 
       
   281     def get_url(self):
       
   282         """Get menu target URL"""
       
   283 
       
   284 
       
   285 class IToolbarMenu(IToolbarAction):
       
   286     """Toolbar actions menu"""
       
   287 
       
   288     label_css_class = TextLine(title="Label icon CSS class",
       
   289                                default='fa fa-fw fa-caret-down')
       
   290 
       
   291     css_class = TextLine(title="Button CSS class",
       
   292                          default='btn btn-xs btn-primary dropdown-toggle')
       
   293 
       
   294 
       
   295 class IToolbarMenuItem(IToolbarAction):
       
   296     """Toolbar actions menu item"""
       
   297 
       
   298     css_class = TextLine(title="Menu CSS class",
       
   299                          default='')
       
   300 
       
   301 
       
   302 class IContextActions(IViewletManager, IToolbarMenu):
       
   303     """Context actions viewlet manager"""
       
   304 
       
   305     css_class = TextLine(title="Button CSS class",
       
   306                          default='btn btn-xs btn-primary dropdown-toggle')