Author: jmorliaguet Date: Wed Jun 21 13:49:34 2006 New Revision: 3481 Added: cpsskins/branches/paris-sprint-2006/locations/configure.zcml (contents, props changed) cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/negotiation_section.pt (contents, props changed) Modified: cpsskins/branches/paris-sprint-2006/browser/negotiation/views.py cpsskins/branches/paris-sprint-2006/configure.zcml cpsskins/branches/paris-sprint-2006/locations/README.txt cpsskins/branches/paris-sprint-2006/standard/negotiation/page.py cpsskins/branches/paris-sprint-2006/standard/negotiation/perspective.py cpsskins/branches/paris-sprint-2006/storage/locations.py cpsskins/branches/paris-sprint-2006/ui/screens/definitions.py cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/configure.zcml cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/negotiation.pt cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py cpsskins/branches/paris-sprint-2006/utils.py
Log: - site manager: added the negotiation 'sections'. This is where local themes, perspectives, engines are set. Modified: cpsskins/branches/paris-sprint-2006/browser/negotiation/views.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/browser/negotiation/views.py (original) +++ cpsskins/branches/paris-sprint-2006/browser/negotiation/views.py Wed Jun 21 13:49:34 2006 @@ -52,7 +52,7 @@ self.request.annotations['cpsskins.strategy'] = name def getStrategy(self): - return self.request.annotations.get('cpsskins.strategy', u'default') + return self.request.annotations.get('cpsskins.strategy', u'editor') strategy = property(getStrategy, setStrategy) Modified: cpsskins/branches/paris-sprint-2006/configure.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/configure.zcml (original) +++ cpsskins/branches/paris-sprint-2006/configure.zcml Wed Jun 21 13:49:34 2006 @@ -85,6 +85,8 @@ <include package=".browser" /> + <include package=".locations" /> + <include package=".ui" /> <include package=".standard" /> Modified: cpsskins/branches/paris-sprint-2006/locations/README.txt ============================================================================== --- cpsskins/branches/paris-sprint-2006/locations/README.txt (original) +++ cpsskins/branches/paris-sprint-2006/locations/README.txt Wed Jun 21 13:49:34 2006 @@ -298,6 +298,11 @@ >>> locations.find(u'/f1', root=u'engines') <Location 'H' at /f1 for 'engines'> +we get the list of roots with: + + >>> locations.getRoots() + [u'', u'pages', u'engines'] + we get the list of location paths with: >>> locations.getPaths(u'pages') Added: cpsskins/branches/paris-sprint-2006/locations/configure.zcml ============================================================================== --- (empty file) +++ cpsskins/branches/paris-sprint-2006/locations/configure.zcml Wed Jun 21 13:49:34 2006 @@ -0,0 +1,14 @@ +<configure + xmlns="http://namespaces.zope.org/zope" + > + + <class class=".location.Location"> + + <require + permission="zope.Public" + interface=".interfaces.ILocation" + /> + + </class> + +</configure> Modified: cpsskins/branches/paris-sprint-2006/standard/negotiation/page.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/negotiation/page.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/negotiation/page.py Wed Jun 21 13:49:34 2006 @@ -20,6 +20,7 @@ from zope.component import queryUtility from zope.interface import implements from zope.traversing.api import getPath +from zope.traversing.interfaces import IPhysicallyLocatable from cpsskins.browser.negotiation.scheme import NegotiationScheme from cpsskins.elements.interfaces import IThemePage @@ -30,7 +31,6 @@ from cpsskins.standard.negotiation import IContextNegotiationScheme from cpsskins.standard.negotiation import ILocationNegotiationScheme from cpsskins.standard.negotiation import ICookieLocationNegotiationScheme -from cpsskins.utils import getThemeManager class QueryParameter(NegotiationScheme): """Look for a page whose name is passed as a URL query parameter: @@ -89,11 +89,13 @@ def __call__(self): context = self.context - tmutil = getThemeManager(context) - path = getPath(context) - location = tmutil.getLocation(path, root=u'pages') + nearest_site = IPhysicallyLocatable(context).getNearestSite() + path = getPath(context)[len(getPath(nearest_site)):] + location = self.manager.getLocation(path, root=u'pages') if location is not None: - return location() + page_name = location() + return self.manager.getPageByName(page_name) + return None class CookieLocation(NegotiationScheme): """Look for a page among locations. The path is obtained from @@ -103,12 +105,16 @@ def __call__(self): context = self.context - tmutil = getThemeManager(context) path = self.request.cookies.get('cpsskins_location') if path is None: return None - location = tmutil.getLocation(path, root=u'pages') + location = self.manager.getLocation(path, root=u'pages') + location = self.manager.getLocationStorage().find(path, u'pages') if location is not None: - return location() + page_name = location() + print page_name + print self.manager.getPageByName(page_name) + return self.manager.getPageByName(page_name) + return None Modified: cpsskins/branches/paris-sprint-2006/standard/negotiation/perspective.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/standard/negotiation/perspective.py (original) +++ cpsskins/branches/paris-sprint-2006/standard/negotiation/perspective.py Wed Jun 21 13:49:34 2006 @@ -26,7 +26,6 @@ from cpsskins.standard.negotiation import ISessionNegotiationScheme from cpsskins.standard.negotiation import ILocationNegotiationScheme from cpsskins.standard.negotiation import ICookieLocationNegotiationScheme -from cpsskins.utils import getThemeManager class Location(NegotiationScheme): """Look for a perspective among locations. The path is obtained from @@ -36,10 +35,9 @@ def __call__(self): context = self.context - tmutil = getThemeManager(context) nearest_site = IPhysicallyLocatable(context).getNearestSite() path = getPath(context)[len(getPath(nearest_site)):] - location = tmutil.getLocation(path, root=u'perspectives') + location = self.manager.getLocation(path, root=u'perspectives') if location is not None: return location() @@ -51,11 +49,10 @@ def __call__(self): context = self.context - tmutil = getThemeManager(context) path = self.request.cookies.get('cpsskins_location') if path is None: return None - location = tmutil.getLocation(path, root=u'perspectives') + location = self.manager.getLocation(path, root=u'perspectives') if location is not None: return location() Modified: cpsskins/branches/paris-sprint-2006/storage/locations.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/storage/locations.py (original) +++ cpsskins/branches/paris-sprint-2006/storage/locations.py Wed Jun 21 13:49:34 2006 @@ -32,12 +32,18 @@ def find(path): """Find a location by its path""" + def getRoots(): + """Get the list of roots""" + def getPaths(root): """Get a list of paths by root.""" def getAllPaths(): """Get a list of paths independently of roots.""" + def getLocations(root): + """Return the list of locations by root.""" + class LocationStorage(Storage): """A BTree-based location storage @@ -79,6 +85,12 @@ return l return None + def getRoots(self): + roots = Set() + for key in self: + roots.add(key[0]) + return list(roots) + def getPaths(self, root=u''): paths = Set() for key in self: @@ -93,3 +105,11 @@ paths.add(key[1:]) return list(paths) + def getLocations(self, root=u''): + locations = [] + for key, value in self.items(): + if key[0] != root: + continue + locations.append(value) + return locations + Modified: cpsskins/branches/paris-sprint-2006/ui/screens/definitions.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/ui/screens/definitions.py (original) +++ cpsskins/branches/paris-sprint-2006/ui/screens/definitions.py Wed Jun 21 13:49:34 2006 @@ -147,6 +147,15 @@ } }, + # the negotiation section panel + 'negotiation-section': { + 'id': 'negotiation-section', + 'data': { + 'url': '@@negotiation-section.html', + 'form': {}, + } + }, + # the I/O panel 'io': { 'id': 'io', @@ -447,6 +456,16 @@ 'controllers': ['site-manager-perspectives'], }, + 'negotiation-section': { + 'id': 'negotiation-section', + 'widget': { + 'type': 'panel' + }, + 'model': 'negotiation-section', + 'perspectives': ['negotiation'], + 'controllers': ['site-manager-perspectives', 'site-manager-actions'], + }, + 'io': { 'id': 'io', 'widget': { Modified: cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/configure.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/configure.zcml (original) +++ cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/configure.zcml Wed Jun 21 13:49:34 2006 @@ -82,6 +82,11 @@ attribute="uploadSnapshot" /> + <page + name="getLocationInfo" + attribute="getLocationInfo" + /> + </pages> <!-- Panels --> @@ -111,6 +116,11 @@ /> <page + name="negotiation-section.html" + template="negotiation_section.pt" + /> + + <page name="io.html" template="io.pt" /> Modified: cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/negotiation.pt ============================================================================== --- cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/negotiation.pt (original) +++ cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/negotiation.pt Wed Jun 21 13:49:34 2006 @@ -1,17 +1,31 @@ <table class="panel" cellpadding="0" cellspacing="0" - tal:define="info context/@@getPresetsInfo"> + tal:define="model nocall:context/@@getModel; + view nocall:context/@@getView;"> + <tr class="header"> + <th style="width: 50px"></th> + <th style="width: 150px">Category</th> + <th>Available locations</th> + </tr> <tr> <td class="icon"> <img src="++resource++negotiation-48.png" width="48" height="48" /> </td> <td class="section"> <div class="sections"> - <span class="description">local themes, perspectives ...</span> - + <ul class="items"> + <li tal:repeat="section python: ['pages', 'perspectives', 'engines']"> + <a i18n:translate="" + tal:attributes="href string:javascript:CPSSkins.getModelById('negotiation-section').setData({'form': {'section': '$section'}})" + tal:content="section">SECTION</a></li> + </ul> + <br style="clear:both"/> </div> </td> + <td class="subsection"> + <ins class="model" tal:content="python: model('negotiation-section')" /> + <ins class="view" tal:content="python: view('negotiation-section')" /> </td> - </tr> + </tr> </table> Added: cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/negotiation_section.pt ============================================================================== --- (empty file) +++ cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/negotiation_section.pt Wed Jun 21 13:49:34 2006 @@ -0,0 +1,15 @@ +<div class="sections" i18n:domain="cpsskins" + tal:define="section request/form/section|nothing; + location_info context/@@getLocationInfo; + infos location_info/?section|nothing"> + + <ul style="height: 120px; overflow: auto;" class="items"> + <li tal:repeat="path infos"> + <tal:block define="location python:infos[path]"> + <span tal:content="location/path" /> + <span tal:content="location/data" /> + <span tal:content="location/scope" /> + </tal:block> + </li> + </ul> +</div> Modified: cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py (original) +++ cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py Wed Jun 21 13:49:34 2006 @@ -129,3 +129,23 @@ snapshots = self.getSnapshotStorage() snapshots.add(Snapshot(data), file.filename) + ################################################################### + # Locations + ################################################################### + + def getLocationInfo(self): + tmutil = getThemeManager(self.context) + locations = tmutil.getLocationStorage() + + info = {} + for root in locations.getRoots(): + info[root] = {} + for location in locations.getLocations(root): + info[root][location.path] = { + 'path': location.path, + 'data': location.data, + 'scope': location.scope, + } + return info + + Modified: cpsskins/branches/paris-sprint-2006/utils.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/utils.py (original) +++ cpsskins/branches/paris-sprint-2006/utils.py Wed Jun 21 13:49:34 2006 @@ -84,9 +84,9 @@ # XXX testing from cpsskins.locations import Location - l1 = Location(title=u'Sections', path=u'/sections') - l2 = Location(title=u'Section 1', path=u'/sections/section1') - l3 = Location(title=u'Workspaces', path=u'/workspaces') + l1 = Location(title=u'Sections', path=u'/sections', root=u'pages', data=u'Theme:ThemePage') + l2 = Location(title=u'Section 1', path=u'/sections/section1', root=u'pages', data=u'Theme-2:ThemePage') + l3 = Location(title=u'Workspaces', path=u'/workspaces', root=u'pages', data=u'Theme-3:ThemePage') locations = context.getLocationStorage() locations.add(l1) locations.add(l2) -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins