Author: jmorliaguet
Date: Wed Jun  7 20:25:51 2006
New Revision: 3349

Modified:
   cpsskins/branches/paris-sprint-2006/ui/screens/definitions.py
   cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/configure.zcml
   cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/views.py
   cpsskins/branches/paris-sprint-2006/utils.py

Log:

- element editor: using a client storage (cookies) to store current information.
  this is the only storage that's directly available both from the client 
  and from the server without having to transfer data.



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 
 7 20:25:51 2006
@@ -22,6 +22,9 @@
     # the element editor
     'element-editor': {
         'id': 'element-editor',
+        'storage': {
+           'type': 'local'
+        },
         'data': {
             'url': '@@element-editor.html',
             'css': '++resource++element-editor.css',

Modified: 
cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/configure.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/configure.zcml 
(original)
+++ cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/configure.zcml 
Wed Jun  7 20:25:51 2006
@@ -68,6 +68,7 @@
 
   <pages
       for="*"
+      class=".views.ElementEditor"
       layer="cpsskins.browser.skin.cpsskins"
       permission="zope.ManageContent">
 

Modified: cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/views.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/views.py       
(original)
+++ cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/views.py       
Wed Jun  7 20:25:51 2006
@@ -17,12 +17,14 @@
 """
 __docformat__ = "reStructuredText"
 
+from urllib import quote, unquote
 from zope.formlib import form
 from zope.component import getMultiAdapter, getUtility
 from zope.location.pickling import locationCopy
 from zope.security.proxy import removeSecurityProxy
 from zope.traversing.api import getParent
 
+from cpsskins import minjson as json
 from cpsskins.browser.negotiation.interfaces import INegotiation
 from cpsskins.browser.rendering.interfaces import IViewer
 from cpsskins.elements.interfaces import IDisplay, IFormat
@@ -32,7 +34,30 @@
 from cpsskins.setup.io import importSite, exportSite
 from cpsskins.setup.snapshot import Snapshot
 from cpsskins.storage.interfaces import IStorage
-from cpsskins.utils import getThemeManager
+from cpsskins.utils import getThemeManager, getClientStorageId
+
+class ElementEditor(object):
+
+    def __init__(self, context, request):
+        self.context = context
+        self.request = request
+        self.storage_id = getClientStorageId(u'element-editor')
+
+    def getData(self):
+        """Get data from a local storage.
+        """
+        value = self.request.cookies.get(self.storage_id)
+        if value is not None:
+            return json.read(unquote(value))
+        return None
+
+    def setData(self, data):
+        """Set data in the local storage.
+        """
+        value = quote(json.write(data))
+        self.request.cookies.set(self.storage_id, value, path='/')
+
+    data = property(getData, setData)
 
 class Form(object):
     """An edit form for elements.
@@ -146,6 +171,7 @@
             'preview': preview,
             }
 
+
 class Presets(object):
 
     def __init__(self, context, request):

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  7 20:25:51 2006
@@ -54,6 +54,9 @@
 def getRelationStorage(context=None, name=u''):
     return getThemeManager(context, name).getRelationStorage()
 
+def getClientStorageId(id):
+    return u'cpsskins_local_storage_%s' % id
+
 def addThemeSkeleton(context):
     # for testing purposes
     from cpsskins.elements.interfaces import IDisplayable, IFormattable
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to