--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_skin/interfaces/viewlet.py Thu Feb 19 10:59:00 2015 +0100
@@ -0,0 +1,306 @@
+#
+# Copyright (c) 2008-2015 Thierry Florac <tflorac AT ulthar.net>
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+
+__docformat__ = 'restructuredtext'
+
+# import standard library
+
+# import interfaces
+from pyams_viewlet.interfaces import IViewlet, IViewletManager
+
+# import packages
+from zope.interface import Attribute
+from zope.schema import Text, TextLine, List, Object, Dict, Bool
+
+from pyams_skin import _
+
+
+#
+# Top links viewlet manager
+#
+
+class ITopLinksViewletManager(IViewletManager):
+ """Topo links viewlet manager interface"""
+
+
+#
+# Top drop-down menus viewlet
+#
+
+class ITopLinksMenu(IViewlet):
+ """Top link menu"""
+
+ css_class = TextLine(title="Menu CSS class",
+ required=False)
+
+ label = TextLine(title="Menu label")
+
+ click_handler = TextLine(title="Menu click handler",
+ description="Name of a Javascript function handling menu click",
+ required=False)
+
+ url = TextLine(title="Menu link target")
+
+ data = Dict(title="Menu data attributes",
+ key_type=TextLine(),
+ value_type=TextLine())
+
+
+class ITopLinksViewlet(IViewlet):
+ """Top links viewlet"""
+
+ label = TextLine(title="Main label")
+
+ dropdown_label = TextLine(title="Drop-down menu label")
+
+ css_class = TextLine(title="Main CSS class")
+
+ viewlets = List(title="Top links menu",
+ value_type=Object(schema=ITopLinksMenu))
+
+
+#
+# Top tabs viewlet
+#
+
+class ITopTabsTab(IViewlet):
+ """Top tabs tab"""
+
+ css_class = TextLine(title="Tab CSS class",
+ required=False)
+
+ label = TextLine(title="Tab label")
+
+ click_handler = TextLine(title="Tab click handler",
+ description="Name of a Javascript function handling tab click",
+ required=False)
+
+ url = TextLine(title="Tab link target")
+
+ data = Dict(title="Tab data attribrutes",
+ key_type=TextLine(),
+ value_type=TextLine())
+
+
+class ITopTabsViewlet(IViewlet):
+ """Top tabs viewlet"""
+
+ label = TextLine(title="Main label")
+
+ css_class = TextLine(title="Main CSS class")
+
+ viewlets = List(title="Top tabs items",
+ value_type=Object(schema=ITopTabsTab))
+
+
+#
+# Shortcuts viewlet manager
+#
+
+class IShortcutsViewletManager(IViewletManager):
+ """Shortcuts viewlet manager"""
+
+
+class IShortcut(IViewlet):
+ """Shortcut viewlet interface"""
+
+ bg_color_class = TextLine(title="Shortcut CSS class")
+
+ icon_class = TextLine(title="Shortcut icon class")
+
+ label = Attribute("Shortcut title")
+
+ url = TextLine(title="Shortcut target URL")
+
+ target = TextLine(title="Window target",
+ required=False)
+
+ modal_target = Bool(title="Modal target",
+ required=True,
+ default=True)
+
+ checked = TextLine(title="Checked shortcut class",
+ required=False)
+
+ def get_url(self):
+ """Return shortcut absolute URL"""
+
+
+#
+# Menus viewlet manager
+#
+
+class IMainMenusViewletManager(IViewletManager):
+ """Main menu viewlet manager"""
+
+
+class IMenu(IViewlet):
+ """Menu interface"""
+
+ header = TextLine(title="Menu header",
+ required=False)
+
+
+class IMenuItem(IViewlet):
+ """Menu item interface
+
+ A menu is a viewlet as well as a viewlets manager,
+ containing sub-menus
+ """
+
+ css_class = TextLine(title="CSS class",
+ required=False)
+
+ icon_class = TextLine(title="Icon CSS class",
+ required=False)
+
+ label = TextLine(title="Menu title",
+ required=False)
+
+ badge = TextLine(title="Badge text",
+ required=False)
+
+ badge_class = TextLine(title="Badge CSS class",
+ required=False)
+
+ notice = TextLine(title="Notice text",
+ required=False)
+
+ notice_class = TextLine(title="Notice CSS class",
+ required=False)
+
+ click_handler = TextLine(title="Menu click handler",
+ required=False)
+
+ url = TextLine(title="Menu link location",
+ required=False,
+ default=u'#')
+
+ modal_target = Bool(title="Modal target",
+ required=False,
+ default=False)
+
+ data = Dict(title="Menu data attributes",
+ key_type=TextLine(),
+ value_type=TextLine(),
+ required=False)
+
+ def get_url(self):
+ """Get menu target URL"""
+
+ def get_data_attributes(self):
+ """Get data attributes"""
+
+
+#
+# Extensions viewlet manager
+#
+
+class IJSExtensionsViewletManager(IViewletManager):
+ """Javascript extensions viewlet manager
+
+ These extensions (like Google Analytics tracking code for example)
+ can be included into layouts footer
+ """
+
+
+#
+# Activity viewlet manager
+#
+
+class IActivityViewletManager(IViewletManager):
+ """User activity viewlet manager"""
+
+ header = TextLine(title="Initial header message")
+
+ message = Text(title="Initial message")
+
+ loading_text = TextLine(title="Tab loading text",
+ default=_("<i class='fa fa-refresh fa-spin'></i> Loading..."))
+
+ def get_last_update(self):
+ """Get last update time"""
+
+
+class IActivityViewlet(IViewlet):
+ """User activity panel viewlet"""
+
+ label = TextLine(title="Tab label")
+
+ click_handler = TextLine(title="Tab click handler",
+ required=False)
+
+ url = TextLine(title="Tab content loading URL",
+ required=False)
+
+ def get_url(self):
+ """Get menu target URL"""
+
+
+#
+# Toolbar viewlet manager
+#
+
+class IToolbarViewletManager(IViewletManager):
+ """Toolbar viewlet manager"""
+
+
+class IToolbarViewlet(IViewlet):
+ """Base interface for all toolbar viewlet"""
+
+
+class IToolbarAction(IToolbarViewlet):
+ """Toolbar action viewlet"""
+
+ label = TextLine(title="Button label")
+
+ label_css_class = TextLine(title="Label icon CSS class",
+ default='fa fa-plus')
+
+ css_class = TextLine(title="Button CSS class",
+ default='btn btn-xs btn-success')
+
+ click_handler = TextLine(title="Button click handler",
+ required=False)
+
+ url = TextLine(title="Button target URL")
+
+ modal_target = Bool(title="Modal target?",
+ required=False,
+ default=False)
+
+ def get_url(self):
+ """Get menu target URL"""
+
+
+class IToolbarMenu(IToolbarAction):
+ """Toolbar actions menu"""
+
+ label_css_class = TextLine(title="Label icon CSS class",
+ default='fa fa-fw fa-caret-down')
+
+ css_class = TextLine(title="Button CSS class",
+ default='btn btn-xs btn-primary dropdown-toggle')
+
+
+class IToolbarMenuItem(IToolbarAction):
+ """Toolbar actions menu item"""
+
+ css_class = TextLine(title="Menu CSS class",
+ default='')
+
+
+class IContextActions(IViewletManager, IToolbarMenu):
+ """Context actions viewlet manager"""
+
+ css_class = TextLine(title="Button CSS class",
+ default='btn btn-xs btn-primary dropdown-toggle')