[Checkins] SVN: z3c.reference/branches/flash/src/z3c/reference/ Make progress on view reference widget implementation

Roger Ineichen roger at projekt01.ch
Thu Sep 6 22:06:41 EDT 2007


Log message for revision 79509:
  Make progress on view reference widget implementation
  
  TODO:
  Fix missing location setup for absouteURL in widget,
  see broken test. I gues this is only a test setup issue.

Changed:
  U   z3c.reference/branches/flash/src/z3c/reference/browser/README.txt
  U   z3c.reference/branches/flash/src/z3c/reference/browser/editor.pt
  U   z3c.reference/branches/flash/src/z3c/reference/browser/resources/reference.editor.js
  U   z3c.reference/branches/flash/src/z3c/reference/browser/tests.py
  U   z3c.reference/branches/flash/src/z3c/reference/browser/widget.py
  U   z3c.reference/branches/flash/src/z3c/reference/interfaces.py
  U   z3c.reference/branches/flash/src/z3c/reference/reference.py

-=-
Modified: z3c.reference/branches/flash/src/z3c/reference/browser/README.txt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/README.txt	2007-09-06 22:54:10 UTC (rev 79508)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/README.txt	2007-09-07 02:06:40 UTC (rev 79509)
@@ -27,6 +27,7 @@
 Let's create a page:
 
   >>> page = Page('Intro')
+  >>> page.__parent__ = site
 
 Now let's setup a enviroment for use the widget like in a real application::
 
@@ -43,13 +44,14 @@
 let's initialize a ViewReferenceWidget with the right attributes::
 
   >>> field = IPage['intro']
-  >>> widget = ViewReferenceWidget(field, request)
+  >>> boundField = field.bind(page)
+  >>> widget = ViewReferenceWidget(boundField, request)
 
 Now let's see how such a widget looks like if we render them::
 
   >>> print widget() # doctest: +NORMALIZE_WHITESPACE
   <a class="popupwindow"
-  href="http://127.0.0.1/viewReferenceEditor.html?target=&amp;settingName=&amp;view="
+  href="http://127.0.0.1/viewReferenceEditor.html?name=field.intro&amp;target=&amp;settingName=&amp;view="
   id="field.intro.tag" name="field.intro" onclick="" title="Undefined"
   rel="window">Undefined</a><input class="hiddenType" id="field.intro.view"
   name="field.intro.view" type="hidden" value="" rel="window" /><input
@@ -86,11 +88,54 @@
   >>> oid = intids.register(text)
 
 Now we can setup a test request and set the values for the widget:
+  >>> form={'field.intro.target': oid,
+  ...       'field.intro.view': 'ratio=16x9',
+  ...       'field.intro.title': 'My reference',
+  ...       'field.intro.description': 'This is a reference'}
+  >>> request = TestRequest(HTTP_ACCEPT_LANGUAGE='pl', form=form)
+  >>> widget = ViewReferenceWidget(boundField, request)
+  >>> reference = widget._toFieldValue(form)
+  >>> reference
+  <z3c.reference.reference.ViewReference object at ...>
 
-  >>> request = TestRequest(HTTP_ACCEPT_LANGUAGE='pl',
-  ...    form={'field.intro.target': oid,
-  ...          'field.intro.view': 'ratio=16x9',
-  ...          'field.intro.title': 'My reference',
-  ...          'field.intro.description': 'This is a reference'})
-  >>> widget = ViewReferenceWidget(field, request)
-  >>> widget._toFieldValue()
+  >>> reference.target is text
+  True
+
+  >>> reference.view
+  u'ratio=16x9'
+
+  >>> reference.title
+  u'My reference'
+
+  >>> reference.description
+  u'This is a reference'
+
+Let's save the new reference:
+
+  >>> page.intro = reference
+
+
+Let's register the reference in the intid util so we can compare after
+update and check if we will get the same object wich is omportant.
+
+  >>> refid = intids.register(reference)
+
+Now do a update within the edit form:
+
+  >>> form={'field.intro.target': oid,
+  ...       'field.intro.view': 'w=16,h=9',
+  ...       'field.intro.title': 'My same reference',
+  ...       'field.intro.description': 'This is the same reference'}
+  >>> request = TestRequest(HTTP_ACCEPT_LANGUAGE='pl', form=form)
+  >>> widget = ViewReferenceWidget(boundField, request)
+  >>> same = widget._toFieldValue(form)
+  >>> same
+  <z3c.reference.reference.ViewReference object at ...>
+
+And compare the reference within the same object we got:
+
+  >>> reference is same
+  True
+
+  >>> refid == intids.getId(same)
+  True

Modified: z3c.reference/branches/flash/src/z3c/reference/browser/editor.pt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/editor.pt	2007-09-06 22:54:10 UTC (rev 79508)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/editor.pt	2007-09-07 02:06:40 UTC (rev 79509)
@@ -87,13 +87,11 @@
   var titleStr = '${titleStr}';
   var descriptionStr = '${descriptionStr}';">
 </script>
-<script src="jquery"
-            type="text/javascript"
-            tal:attributes="src context/++resource++jquery.js">
+<script src="jquery" type="text/javascript"
+        tal:attributes="src context/++resource++jquery.js">
 </script>
-<script src="jquery"
-            type="text/javascript"
-            tal:attributes="src context/++resource++z3c.reference.resources/reference.editor.js">
+<script src="jquery" type="text/javascript"
+        tal:attributes="src context/++resource++z3c.reference.resources/reference.editor.js">
 </script>
 </head>
 <body>

Modified: z3c.reference/branches/flash/src/z3c/reference/browser/resources/reference.editor.js
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/resources/reference.editor.js	2007-09-06 22:54:10 UTC (rev 79508)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/resources/reference.editor.js	2007-09-07 02:06:40 UTC (rev 79509)
@@ -1,15 +1,3 @@
-// user selects an item
-//function setIntId(uid) {
-//    // reset values
-//    $("textarea").val("");
-//    $("input[@type=text]").val("");
-//    // set initid of selected item
-//    $("input[@name=intid]").val(uid);
-//    // highlight selected item
-//    $("a").attr("style", "");
-//    $("a[@href*=" + uid + "]").attr("style","background-color: #888");
-//}
-
 function loadEditorSearch() {
     settings = {'settingName': settingNameStr,
                 'target': targetStr,
@@ -17,7 +5,7 @@
                 'title': titleStr,
                 'description': descriptionStr}
     $.get("viewReferenceEditorSearch", settings, function () {
-        $("#editorSearch").append($(data));
+        $("#editorSearch").empty().append($(data));
     });
 }
 
@@ -28,7 +16,7 @@
                 'title': titleStr,
                 'description': descriptionStr}
     $.get("viewReferenceEditorEdit", settings, function () {
-        $("#editorEdit").append($(data));
+        $("#editorEdit").empty().append($(data));
     });
 }
 

Modified: z3c.reference/branches/flash/src/z3c/reference/browser/tests.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/tests.py	2007-09-06 22:54:10 UTC (rev 79508)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/tests.py	2007-09-07 02:06:40 UTC (rev 79509)
@@ -25,6 +25,7 @@
 from zope import component
 from zope.dublincore.annotatableadapter import ZDCAnnotatableAdapter
 from zope.dublincore.interfaces import IWriteZopeDublinCore
+from zope.dublincore.testing import setUpDublinCore
 from zope.app.keyreference.testing import SimpleKeyReference
 from zope.traversing.testing import browserView
 from zope.traversing.browser.interfaces import IAbsoluteURL
@@ -55,6 +56,7 @@
                 providing=IAbsoluteURL)
     browserView(None,'index.html',TestPage)
 
+
 def tearDown(test):
     setup.placefulTearDown()
 

Modified: z3c.reference/branches/flash/src/z3c/reference/browser/widget.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/widget.py	2007-09-06 22:54:10 UTC (rev 79508)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/widget.py	2007-09-07 02:06:40 UTC (rev 79509)
@@ -18,7 +18,8 @@
 
 import urlparse, cgi, urllib
 from xml.dom.minidom import parse, parseString
-from zope import traversing
+
+import zope.component
 from zope.traversing.browser import absoluteURL
 from zope.traversing.interfaces import TraversalError
 from zope.cachedescriptors.property import Lazy
@@ -30,6 +31,7 @@
 from zope.app.form.browser.widget import renderElement
 
 from zc import resourcelibrary
+from z3c.reference import interfaces
 from z3c.reference.reference import ViewReference,ImageReference
 
 untitled = u'No Link defined'
@@ -47,35 +49,6 @@
     return rc
 
 
-#def referenceFromURL(url,request,factory):
-#
-#    site=hooks.getSite()
-#    siteURL = absoluteURL(site,request)
-#    if not url.startswith(siteURL):
-#        return ViewReference(view=url)
-#    url = url[len(siteURL)+1:]
-#    scheme,location,path,query,fragment = urlparse.urlsplit(url)
-#    tPath = map(lambda x: urllib.unquote(x.encode('utf-8')).decode('utf-8'),
-#        path.split('/'))
-#    # get the nearest traversable
-#    views = []
-#    while tPath:
-#        try:
-#            target = traversing.api.traverse(site,tPath)
-#            break
-#        except TraversalError:
-#            views.append(tPath.pop())
-#
-#    query = query and u'?' + query or u''
-#    if views:
-#        views.reverse()
-#        views = u'/'.join(views)
-#        view = views + query
-#    else:
-#        view = query or None
-#    return factory(target=target,view=view)
-
-
 class ViewReferenceWidget(TextWidget):
     """renders an "a" tag with the title and href attributes."""
 
@@ -103,8 +76,8 @@
                              'name': self.name}))
 
     @property
-    def targetValue(self):
-        """Returns the target intid."""
+    def viewValue(self):
+        """Returns the reference view string."""
         current = self._getCurrentValue()
         if current and current.view:
             return current.view or u''
@@ -112,8 +85,8 @@
             return u''
 
     @property
-    def viewValue(self):
-        """Returns the reference view string."""
+    def targetValue(self):
+        """Returns the target intid."""
         target = u''
         current = self._getCurrentValue()
         if current and current.target:
@@ -210,9 +183,11 @@
         if input == self._missing:
             return self.context.missing_value
 
-        if self.context.context is not None:
-            ref = self.context.context
-        elif self._data is not None:
+        # get the existing reference
+        if hasattr(self.context.context, self.context.__name__):
+            ref = getattr(self.context.context, self.context.__name__)
+        # get a allready set reference
+        elif interfaces.IViewReference.providedBy(self._data):
             ref = self._data
         else:
             ref = ViewReference()
@@ -226,8 +201,9 @@
         intid = self.request.get(targetName)
         if intid is None:
             return self.context.missing_value
-        obj = intids.queryObject(int(intid))
-        if oj is None:
+        intIds = zope.component.getUtility(IIntIds)
+        obj = intIds.queryObject(int(intid))
+        if obj is None:
             return self.context.missing_value
         ref.target = obj
 
@@ -235,28 +211,23 @@
         viewStr = self.request.get(viewName)
         if viewStr is None:
             return self.context.missing_value
-        ref.view = viewStr
+        ref.view = unicode(viewStr)
 
         # write title str
         titleStr = self.request.get(titleName)
         if titleStr is None:
             return self.context.missing_value
-        ref.title = titleStr
+        ref.title = unicode(titleStr)
 
         # write description str
         descriptionStr = self.request.get(descriptionName)
         if descriptionStr is None:
             return self.context.missing_value
-        ref.description = descriptionStr
+        ref.description = unicode(descriptionStr)
 
-        # return the existing or new reference
+        return ref
 
 
-        #return referenceFromURL(input,self.request,
-        #                        self._emptyReference.__class__)
-        
-
-
 class ObjectReferenceWidget(ViewReferenceWidget):
     
     @Lazy

Modified: z3c.reference/branches/flash/src/z3c/reference/interfaces.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/interfaces.py	2007-09-06 22:54:10 UTC (rev 79508)
+++ z3c.reference/branches/flash/src/z3c/reference/interfaces.py	2007-09-07 02:06:40 UTC (rev 79509)
@@ -28,6 +28,16 @@
     view. If the target is None, the view name is supposed to be an
     absolute url to an external target"""
 
+    title = zope.schema.Text(
+            title = u'Title',
+            description = u'The title of the reference',
+            )
+
+    description = zope.schema.Text(
+            title = u'Description',
+            description = u'The description of the reference',
+            )
+
     target = zope.schema.Object(
         schema=ILocation,
         title=u'Target Object',

Modified: z3c.reference/branches/flash/src/z3c/reference/reference.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/reference.py	2007-09-06 22:54:10 UTC (rev 79508)
+++ z3c.reference/branches/flash/src/z3c/reference/reference.py	2007-09-07 02:06:40 UTC (rev 79509)
@@ -20,8 +20,10 @@
 
 import zope.interface
 import zope.component
+from zope.dublincore.property import DCProperty
 from zope.location.interfaces import ILocation
 from zope.schema.fieldproperty import FieldProperty
+from zope.annotation.interfaces import IAttributeAnnotatable
 from lovely.relation.property import (FieldRelationManager,
                                       RelationPropertyOut)
 from z3c.reference import interfaces
@@ -34,10 +36,13 @@
 
 class ViewReference(persistent.Persistent):
 
-    zope.interface.implements(interfaces.IViewReference)
+    zope.interface.implements(interfaces.IViewReference, IAttributeAnnotatable)
 
     view = FieldProperty(interfaces.IViewReference['view'])
     target = RelationPropertyOut(viewReferenceRelated)
+
+    title = DCProperty('title')
+    description = DCProperty('description')
     
     def __init__(self,target=None,view=None):
         if target is not None:



More information about the Checkins mailing list