Author: jmorliaguet Date: Sat Jun 10 00:11:47 2006 New Revision: 3384 Modified: cpsskins/branches/paris-sprint-2006/configuration/portlets/__init__.py cpsskins/branches/paris-sprint-2006/configuration/portlets/factory.py cpsskins/branches/paris-sprint-2006/configuration/portlets/metaconfigure.py cpsskins/branches/paris-sprint-2006/ui/screens/common/authoring.css cpsskins/branches/paris-sprint-2006/ui/screens/common/configure.zcml cpsskins/branches/paris-sprint-2006/ui/screens/common/content_factory.pt cpsskins/branches/paris-sprint-2006/ui/screens/common/views.py
Log: - simplification: portlets are no longer registered via browser:addMenuItem we use the portlet factory information instead. Modified: cpsskins/branches/paris-sprint-2006/configuration/portlets/__init__.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/configuration/portlets/__init__.py (original) +++ cpsskins/branches/paris-sprint-2006/configuration/portlets/__init__.py Sat Jun 10 00:11:47 2006 @@ -16,3 +16,5 @@ $Id$ """ __docformat__ = "reStructuredText" + +DEFAULT_PROVIDER = u'standard' Modified: cpsskins/branches/paris-sprint-2006/configuration/portlets/factory.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/configuration/portlets/factory.py (original) +++ cpsskins/branches/paris-sprint-2006/configuration/portlets/factory.py Sat Jun 10 00:11:47 2006 @@ -29,11 +29,15 @@ """ implements(IPortletFactory) - def __init__(self, callable, provider=u'', title='', description=''): + def __init__(self, callable, name=u'', provider=u'', title='', + description='', icon=u''): self._callable = callable + self.name = name self.provider = provider - self.title = title + self.title = title self.description = description + self.icon = icon + self.type_name = u'cpsskins.portlet.%s.%s' % (provider, name) def getInterfaces(self): return implementedBy(self._callable) Modified: cpsskins/branches/paris-sprint-2006/configuration/portlets/metaconfigure.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/configuration/portlets/metaconfigure.py (original) +++ cpsskins/branches/paris-sprint-2006/configuration/portlets/metaconfigure.py Sat Jun 10 00:11:47 2006 @@ -22,24 +22,23 @@ from zope.annotation.interfaces import IAttributeAnnotatable from zope.app.component.contentdirective import ClassDirective from zope.app.publisher.browser.icon import IconDirective -from zope.app.publisher.browser.menumeta import addMenuItem from zope.app.publisher.browser.resourcemeta import resource from zope.app.content.interfaces import IContentType -from zope.component.factory import Factory from zope.component.interface import provideInterface from zope.component.zcml import utility from zope.configuration.exceptions import ConfigurationError -from zope.interface import Interface, alsoProvides +from zope.interface import alsoProvides from cpsskins import ui from cpsskins.browser.rendering.interfaces import IUpdateData +from cpsskins.configuration.portlets import DEFAULT_PROVIDER from cpsskins.configuration.portlets.factory import PortletFactory from cpsskins.configuration.portlets.factory import IPortletFactory from cpsskins.setup.interfaces import INameType ui_path = os.path.dirname(ui.__file__) -def portlet(_context, name=None, provider=u'standard', title=None, +def portlet(_context, name=None, provider=DEFAULT_PROVIDER, title=None, description=None, class_=None, schema=None, icon=None): if not name: @@ -69,12 +68,6 @@ # Register the zmi icon IconDirective(_context=_context, name="zmi_icon", for_=schema, file=icon) - # browser:addMenuItem - from zope.app.menus import cpsskins_add_portlet - addMenuItem(_context=_context, menu=cpsskins_add_portlet, for_=Interface, - title=title, description=description, class_=class_, - permission="zope.ManageContent", icon=icon_name) - # zope:content c = ClassDirective(_context=_context, class_=class_) c.implements(_context=_context,interface=(schema, IAttributeAnnotatable)) @@ -84,8 +77,9 @@ set_schema=(schema, IUpdateData)) # register the portlet factory - factory = PortletFactory(callable=class_, provider=provider, title=title, - description=description) + factory = PortletFactory(callable=class_, provider=provider, name=name, + title=title, description=description, + icon=icon_name) utility(_context=_context, provides=IPortletFactory, component=factory, name=u'cpsskins.portlet.%s' % dotted_name) utility(_context=_context, provides=IPortletFactory, component=factory, Modified: cpsskins/branches/paris-sprint-2006/ui/screens/common/authoring.css ============================================================================== --- cpsskins/branches/paris-sprint-2006/ui/screens/common/authoring.css (original) +++ cpsskins/branches/paris-sprint-2006/ui/screens/common/authoring.css Sat Jun 10 00:11:47 2006 @@ -53,9 +53,16 @@ .toolbox .header { border-bottom: 1px solid #000; - padding-left: 30px; - background-color: #ccc; + background-color: #999; font-size: 1.1em; + color: white; + padding: 2px 0px 2px 30px; +} + +.toolbox .section { + border-bottom: 1px solid #999; + background-color: #ccc; + padding: 0px 0px 1px 30px; } .toolbox div.item { Modified: cpsskins/branches/paris-sprint-2006/ui/screens/common/configure.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/ui/screens/common/configure.zcml (original) +++ cpsskins/branches/paris-sprint-2006/ui/screens/common/configure.zcml Sat Jun 10 00:11:47 2006 @@ -6,11 +6,6 @@ <include package=".images" /> - <menu - id="cpsskins_add_portlet" - title="Add a portlet" - /> - <resource name="authoring.css" file="authoring.css" layer="cpsskins.browser.skin.cpsskins" /> @@ -21,6 +16,7 @@ <pages for="*" + class=".views.Panels" layer="cpsskins.browser.skin.cpsskins" permission="zope.ManageContent"> Modified: cpsskins/branches/paris-sprint-2006/ui/screens/common/content_factory.pt ============================================================================== --- cpsskins/branches/paris-sprint-2006/ui/screens/common/content_factory.pt (original) +++ cpsskins/branches/paris-sprint-2006/ui/screens/common/content_factory.pt Sat Jun 10 00:11:47 2006 @@ -1,17 +1,17 @@ -<tal:block define="portlets context/@@view_get_menu/cpsskins_add_portlet" - condition="portlets"> +<tal:block i18n:domain="cpsskins"> <div class="header">Portlets</div> - <div class="factory" tal:repeat="portlet portlets" - tal:attributes="type_name portlet/action"> - <div tal:define="title portlet/title; - odd repeat/portlet/odd;" - tal:attributes="type_name portlet/action; - class python: odd and 'item odd' or 'item'"> - <img class="icon" i18n:attributes="title" - tal:attributes="title title; - src string:++resource++${portlet/icon}" /> - <span class="title" tal:content="title" /> — - <span class="description" tal:content="portlet/description" /> + <tal:block repeat="info view/listPortlets"> + <div class="section" i18n:translate="" + tal:content="string:provider.${info/provider}" /> + <div class="factory" tal:repeat="factory info/factories" + tal:attributes="type_name factory/type_name"> + <div tal:define="title factory/title; odd repeat/factory/odd;" + tal:attributes="class python: odd and 'item odd' or 'item'"> + <img class="icon" i18n:attributes="title" + tal:attributes="title title; src string:++resource++${factory/icon}" /> + <span class="title" tal:content="factory/title" /> — + <span class="description" tal:content="factory/description" /> + </div> </div> - </div> + </tal:block> </tal:block> Modified: cpsskins/branches/paris-sprint-2006/ui/screens/common/views.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/ui/screens/common/views.py (original) +++ cpsskins/branches/paris-sprint-2006/ui/screens/common/views.py Sat Jun 10 00:11:47 2006 @@ -19,8 +19,8 @@ from zope.app.container.browser.contents import Contents from zope.app.session.interfaces import ISession -from zope.component import getUtility, createObject, getMultiAdapter -from zope.component import queryMultiAdapter +from zope.component import getUtility, getAllUtilitiesRegisteredFor +from zope.component import queryMultiAdapter, getMultiAdapter, createObject from zope.event import notify from zope.i18nmessageid import MessageFactory from zope.interface import implements, Interface @@ -35,6 +35,8 @@ from cpsskins.browser.tree.interfaces import INodeMoving, INodeOrdering from cpsskins.browser.tree.interfaces import INodeDuplicating from cpsskins.browser.rendering.interfaces import IViewer +from cpsskins.configuration.portlets.factory import IPortletFactory +from cpsskins.configuration.portlets import DEFAULT_PROVIDER from cpsskins.elements.theme import Theme from cpsskins.elements.themepage import ThemePage from cpsskins.elements.interfaces import IPresentable, IDisplayable @@ -116,7 +118,6 @@ class Rendering(object): """Rendering of page elements """ - def __init__(self, context, request): self.context = context self.request = request @@ -131,6 +132,30 @@ viewer = getMultiAdapter((page, self.request), IViewer) return viewer(engine=engine) +class Panels(object): + """Panels view + """ + def __init__(self, context, request): + self.context = context + self.request = request + + def listPortlets(self): + """Return the factories of all registered portlets by provider name. + """ + factories = getAllUtilitiesRegisteredFor(IPortletFactory) + providers = {} + for factory in factories: + providers.setdefault(factory.provider, []).append(factory) + + # return a sorted list, with the default provider first + names = providers.keys() + names.remove(DEFAULT_PROVIDER) + names.sort() + names.insert(0, DEFAULT_PROVIDER) + + return [{'provider': name, 'factories': providers[name]} + for name in names] + class IAuthoring(Interface): """ """ @@ -142,7 +167,6 @@ def __init__(self, context, request): self.context = context self.request = request - self.tmutil = getThemeManager(context) def getSessionInfo(self): -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins