src/pyams_skin/interfaces/viewlet.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_viewlet.interfaces import IViewlet, IViewletManager
       
    19 
       
    20 # import packages
       
    21 from zope.interface import Interface, 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 = TextLine(title="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 menus viewlet manager"""
       
   144 
       
   145 
       
   146 class IUserMenusViewletManager(IViewletManager):
       
   147     """User menus viewlet manager"""
       
   148 
       
   149 
       
   150 class IMenu(IViewlet):
       
   151     """Menu interface"""
       
   152 
       
   153     header = TextLine(title="Menu header",
       
   154                       required=False)
       
   155 
       
   156 
       
   157 class IMenuHeader(Interface):
       
   158     """Menu header interface"""
       
   159 
       
   160     header = TextLine(title="Menu header",
       
   161                       required=False)
       
   162 
       
   163 
       
   164 class IMenuItem(IViewlet):
       
   165     """Menu item interface
       
   166 
       
   167     A menu is a viewlet as well as a viewlets manager,
       
   168     containing sub-menus
       
   169     """
       
   170 
       
   171     css_class = TextLine(title="CSS class",
       
   172                          required=False)
       
   173 
       
   174     icon_class = TextLine(title="Icon CSS class",
       
   175                           required=False)
       
   176 
       
   177     label = TextLine(title="Menu title",
       
   178                      required=False)
       
   179 
       
   180     badge = TextLine(title="Badge text",
       
   181                      required=False)
       
   182 
       
   183     badge_class = TextLine(title="Badge CSS class",
       
   184                            required=False)
       
   185 
       
   186     notice = TextLine(title="Notice text",
       
   187                       required=False)
       
   188 
       
   189     notice_class = TextLine(title="Notice CSS class",
       
   190                             required=False)
       
   191 
       
   192     click_handler = TextLine(title="Menu click handler",
       
   193                              required=False)
       
   194 
       
   195     url = TextLine(title="Menu link location",
       
   196                    required=False,
       
   197                    default=u'#')
       
   198 
       
   199     target = TextLine(title="Menu link window target",
       
   200                       required=False)
       
   201 
       
   202     modal_target = Bool(title="Modal target",
       
   203                         required=False,
       
   204                         default=False)
       
   205 
       
   206     data = Dict(title="Menu data attributes",
       
   207                 key_type=TextLine(),
       
   208                 value_type=TextLine(),
       
   209                 required=False)
       
   210 
       
   211     def get_url(self):
       
   212         """Get menu target URL"""
       
   213 
       
   214     def get_data_attributes(self):
       
   215         """Get data attributes"""
       
   216 
       
   217 
       
   218 #
       
   219 # Breadcrumbs interfaces
       
   220 #
       
   221 
       
   222 class IBreadcrumbs(Interface):
       
   223     """Main breadcrumbs interface"""
       
   224 
       
   225     items = Attribute("Breadcrumbs items iterator attribute")
       
   226 
       
   227 
       
   228 class IBreadcrumbItem(Interface):
       
   229     """Breadcrumb item interface"""
       
   230 
       
   231     label = TextLine(title="Item label")
       
   232 
       
   233     view_name = TextLine(title="Link view name")
       
   234 
       
   235     css_class = TextLine(title="CSS class")
       
   236 
       
   237     url = Attribute("Link absolute target URL")
       
   238 
       
   239 
       
   240 #
       
   241 # Extensions viewlet manager
       
   242 #
       
   243 
       
   244 class IJSExtensionsViewletManager(IViewletManager):
       
   245     """Javascript extensions viewlet manager
       
   246 
       
   247     These extensions (like Google Analytics tracking code for example)
       
   248     can be included into layouts footer
       
   249     """
       
   250 
       
   251 
       
   252 #
       
   253 # Activity viewlet manager
       
   254 #
       
   255 
       
   256 class IActivityViewletManager(IViewletManager):
       
   257     """User activity viewlet manager"""
       
   258 
       
   259     header = TextLine(title="Initial header message")
       
   260 
       
   261     message = Text(title="Initial message")
       
   262 
       
   263     loading_text = TextLine(title="Tab loading text",
       
   264                             default=_("&lt;i class=&#39;fa fa-refresh fa-spin&#39;&gt;&lt;/i&gt;"))
       
   265 
       
   266     refresh_handler = TextLine(title="Refresh button click handler",
       
   267                                default="MyAMS.skin.refreshNotificationsPanel")
       
   268 
       
   269     def get_last_update(self):
       
   270         """Get last update time"""
       
   271 
       
   272 
       
   273 class IActivityViewlet(IViewlet):
       
   274     """User activity panel viewlet"""
       
   275 
       
   276     name = TextLine(title="Tab input value")
       
   277 
       
   278     label = TextLine(title="Tab label")
       
   279 
       
   280     click_handler = TextLine(title="Tab click handler",
       
   281                              required=False)
       
   282 
       
   283     url = TextLine(title="Tab content loading URL",
       
   284                    required=False)
       
   285 
       
   286     def get_url(self):
       
   287         """Get menu target URL"""
       
   288 
       
   289 
       
   290 #
       
   291 # Widget title extensions viewlet manager
       
   292 #
       
   293 
       
   294 class IWidgetTitleViewletManager(IViewletManager):
       
   295     """Widget title viewlet manager"""
       
   296 
       
   297 
       
   298 #
       
   299 # Toolbar viewlet manager
       
   300 #
       
   301 
       
   302 class IToolbarViewletManager(IViewletManager):
       
   303     """Toolbar viewlet manager"""
       
   304 
       
   305 
       
   306 class IToolbarViewlet(IViewlet):
       
   307     """Base interface for all toolbar viewlet"""
       
   308 
       
   309 
       
   310 class IToolbarAction(IToolbarViewlet):
       
   311     """Toolbar action viewlet"""
       
   312 
       
   313     label = TextLine(title="Button label")
       
   314 
       
   315     label_css_class = TextLine(title="Label icon CSS class",
       
   316                                default='fa fa-fw fa-plus')
       
   317 
       
   318     css_class = TextLine(title="Button CSS class",
       
   319                          default='btn btn-xs btn-success')
       
   320 
       
   321     click_handler = TextLine(title="Button click handler",
       
   322                              required=False)
       
   323 
       
   324     url = TextLine(title="Button target URL")
       
   325 
       
   326     modal_target = Bool(title="Modal target?",
       
   327                         required=False,
       
   328                         default=False)
       
   329 
       
   330     def get_url(self):
       
   331         """Get menu target URL"""
       
   332 
       
   333 
       
   334 class IToolbarMenu(IToolbarAction):
       
   335     """Toolbar actions menu"""
       
   336 
       
   337     label_css_class = TextLine(title="Label icon CSS class",
       
   338                                default='fa fa-fw fa-plus')
       
   339 
       
   340     css_class = TextLine(title="Button CSS class",
       
   341                          default='btn btn-xs btn-primary dropdown-toggle')
       
   342 
       
   343     menu_css_class = TextLine(title="Menu CSS class",
       
   344                               default='dropdown-menu pull-right')
       
   345 
       
   346 
       
   347 class IToolbarAddingMenu(IToolbarMenu):
       
   348     """Toolbar adding actions menu"""
       
   349 
       
   350 
       
   351 class ITableItemColumnActionsMenu(IViewletManager, IToolbarMenu):
       
   352     """Table item actions viewlet manager"""
       
   353 
       
   354 
       
   355 class IToolbarActionItem(IToolbarAction):
       
   356     """Toolbar action menu item"""
       
   357 
       
   358     css_class = TextLine(title="Menu CSS class",
       
   359                          default='')
       
   360 
       
   361     hint_gravity = TextLine(title="Hint gravity",
       
   362                             default='sw')
       
   363 
       
   364     stop_propagation = Bool(title="Stop click event propagation",
       
   365                             required=True,
       
   366                             default=True)
       
   367 
       
   368 
       
   369 class IToolbarMenuItem(IToolbarActionItem):
       
   370     """Toolbar menu item"""
       
   371 
       
   372 
       
   373 class IContextActions(IViewletManager, IToolbarMenu):
       
   374     """Context actions viewlet manager"""
       
   375 
       
   376     css_class = TextLine(title="Button CSS class",
       
   377                          default='btn btn-xs btn-default dropdown-toggle')