[Checkins] SVN: z3c.relationfieldui/branches/faassen-relationlist/src/z3c/relationfieldui/ Some hackery to integrate wforms into relation list. doesn't really work yet.
Martijn Faassen
faassen at infrae.com
Sun Dec 14 13:32:45 EST 2008
Log message for revision 94063:
Some hackery to integrate wforms into relation list. doesn't really work yet.
Changed:
U z3c.relationfieldui/branches/faassen-relationlist/src/z3c/relationfieldui/__init__.py
U z3c.relationfieldui/branches/faassen-relationlist/src/z3c/relationfieldui/widget.py
-=-
Modified: z3c.relationfieldui/branches/faassen-relationlist/src/z3c/relationfieldui/__init__.py
===================================================================
--- z3c.relationfieldui/branches/faassen-relationlist/src/z3c/relationfieldui/__init__.py 2008-12-14 18:17:06 UTC (rev 94062)
+++ z3c.relationfieldui/branches/faassen-relationlist/src/z3c/relationfieldui/__init__.py 2008-12-14 18:32:45 UTC (rev 94063)
@@ -1 +1 @@
-from z3c.relationfieldui.widget import RelationWidget, RelationDisplayWidget
+from z3c.relationfieldui.widget import RelationWidget, RelationListWidget, RelationDisplayWidget
Modified: z3c.relationfieldui/branches/faassen-relationlist/src/z3c/relationfieldui/widget.py
===================================================================
--- z3c.relationfieldui/branches/faassen-relationlist/src/z3c/relationfieldui/widget.py 2008-12-14 18:17:06 UTC (rev 94062)
+++ z3c.relationfieldui/branches/faassen-relationlist/src/z3c/relationfieldui/widget.py 2008-12-14 18:32:45 UTC (rev 94063)
@@ -3,7 +3,7 @@
from zope.app.form.interfaces import IInputWidget, IDisplayWidget
from zope.publisher.interfaces.browser import IBrowserRequest
-from zope.app.form.browser import TextWidget, DisplayWidget
+from zope.app.form.browser import TextWidget, DisplayWidget, SimpleInputWidget
from zope import component
from zope.component.interfaces import ComponentLookupError
from zope.app.form.browser.widget import renderElement
@@ -11,8 +11,9 @@
from z3c.objpath.interfaces import IObjectPath
from hurry.resource import Library, ResourceInclusion
+from hurry.js.wforms import wforms
-from z3c.relationfield.schema import IRelation
+from z3c.relationfield.schema import IRelation, IRelationList
from z3c.relationfield.interfaces import IRelationInfo
relation_lib = Library('z3c.relationfieldui')
@@ -73,3 +74,64 @@
to_url,
escape(value.to_path))
+class RelationListWidget(grok.MultiAdapter, TextWidget):
+ grok.adapts(IRelationList, IBrowserRequest)
+ grok.provides(IInputWidget)
+
+ def __call__(self):
+ result = '<fieldset class="repeat" id="%s">' % self.name
+# result += '<div class="oneField">'
+ result += TextWidget.__call__(self)
+ explorer_url = component.getMultiAdapter((self.context.context,
+ self.request),
+ name="explorerurl")()
+ result += renderElement(
+ 'input', type='button', value='get relation',
+ onclick="Z3C.relation.popup(this.previousSibling, '%s')" %
+ (explorer_url))
+ # result += '</div>'
+ result += '</fieldset>'
+ wforms.need()
+ relation_resource.need()
+ return result
+
+ def hasInput(self):
+ # in case of a single response
+ if self.name in self.request.form:
+ return True
+ # if multiple responses are there
+ return self.name + '[0]-RC' in self.request.form
+
+ def repeatCount(self):
+ count = self.request.form.get(self.name + '[0]-RC', None)
+ if count is None:
+ return None
+ return int(count)
+
+ def _toFieldValue(self, input):
+ c = self.repeatCount()
+ if c is None:
+ # regular single value input
+ if not input:
+ return []
+ paths = [input]
+ else:
+ # multi-value input
+ paths = []
+ for i in range(c):
+ v = self.request.form.get(self.name + '[%s]' % i, None)
+ if v is None:
+ continue
+ paths.append(v)
+ result = []
+ object_path = component.getUtility(IObjectPath)
+ resolve = object_path.resolve
+ for path in paths:
+ obj = resolve(path)
+ result.append(IRelationInfo(obj).createRelation())
+ return result
+
+ def _toFormValue(self, value):
+ if value is None:
+ return ''
+ return value.to_path
More information about the Checkins
mailing list