[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=&settingName=&view="
+ href="http://127.0.0.1/viewReferenceEditor.html?name=field.intro&target=&settingName=&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