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

Reply via email to