[Checkins] SVN: z3c.reference/branches/flash/src/z3c/reference/ add opener view

Bernd Dorn bernd.dorn at lovelysystems.com
Sun Sep 9 09:49:46 EDT 2007


Log message for revision 79537:
  add opener view

Changed:
  U   z3c.reference/branches/flash/src/z3c/reference/browser/README.txt
  U   z3c.reference/branches/flash/src/z3c/reference/browser/configure.zcml
  A   z3c.reference/branches/flash/src/z3c/reference/browser/opener.pt
  U   z3c.reference/branches/flash/src/z3c/reference/browser/views.py
  U   z3c.reference/branches/flash/src/z3c/reference/browser/widget.pt
  U   z3c.reference/branches/flash/src/z3c/reference/browser/widget.py
  U   z3c.reference/branches/flash/src/z3c/reference/interfaces.py

-=-
Modified: z3c.reference/branches/flash/src/z3c/reference/browser/README.txt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/README.txt	2007-09-09 12:51:37 UTC (rev 79536)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/README.txt	2007-09-09 13:49:45 UTC (rev 79537)
@@ -7,6 +7,8 @@
   >>> import zope.interface
   >>> from z3c.reference.browser.widget import ViewReferenceWidget
   >>> from z3c.reference.schema import ViewReferenceField
+  >>> from zope.publisher.interfaces.browser import IBrowserRequest
+  >>> from z3c.reference.interfaces import IViewReference
 
 At first we need an interface for the context our widget used for. The
 `ìntro`` filed defines a settingName which is used by the widget to
@@ -52,19 +54,25 @@
   >>> boundField = field.bind(page)
   >>> widget = ViewReferenceWidget(boundField, request)
 
-Now let's see how such a widget looks like if we render it with no value.
+Now let's see how such a widget looks like if we render it with no
+value. But first we need to define an opener view, there is a default
+opener view.
 
+  >>> from z3c.reference.interfaces import IViewReferenceOpener
+  >>> from z3c.reference.browser.views import DefaultViewReferenceOpener
+  >>> zope.component.provideAdapter(DefaultViewReferenceOpener,
+  ...     (IViewReference, IBrowserRequest),
+  ...     IViewReferenceOpener)
+
   >>> print widget()
-  <a class="popupwindow" href="http://127.0.0.1/Intro/viewReferenceEditor.html?target=&amp;settingName=introRefs&amp;name=field.intro"
-  id="field.intro.tag" name="field.intro" onclick="" title="Undefined"
-  rel="window">Undefined</a>
-  <BLANKLINE>
-  <input class="hiddenType" id="field.intro.target" name="field.intro.target"
-         type="hidden" value="" rel="window" />
-  <input class="hiddenType" id="field.intro.formData"
-         name="field.intro.formData" type="hidden" value="" rel="window" />
-  <BLANKLINE>
+  <a class="popupwindow" href="http://127.0.0.1/Intro/viewReferenceEditor.html?target=&amp;settingName=introRefs&amp;name=field.intro" id="field.intro.tag" name="field.intro" onclick="" title="&#10;&lt;span&gt;Undefined&lt;/span&gt;&#10;" rel="window">
+  <span>Undefined</span>
+  </a>
+  <input class="hiddenType" id="field.intro.target" name="field.intro.target" type="hidden" value="" rel="window" />
+  <input class="hiddenType" id="field.intro.formData" name="field.intro.formData" type="hidden" value="" rel="window" />
 
+
+
 If we store a empty request/form we will get the following error::
 
   >>> widget.applyChanges(page)
@@ -118,7 +126,6 @@
 
   >>> from zope.formlib import form
   >>> from zope.dublincore.interfaces import IZopeDublinCore
-  >>> from z3c.reference.interfaces import IViewReference
   >>> class IntroRefsEditForm(form.EditForm):
   ...     form_fields = form.Fields(IZopeDublinCore,
   ...     IViewReference).select('title', 'description', 'view')
@@ -126,7 +133,6 @@
 And register it ...
 
   >>> from z3c.reference.interfaces import IViewReferenceEditor
-  >>> from zope.publisher.interfaces.browser import IBrowserRequest
   >>> zope.component.provideAdapter(IntroRefsEditForm,
   ...     (zope.interface.Interface, IBrowserRequest),
   ...     IViewReferenceEditor,

Modified: z3c.reference/branches/flash/src/z3c/reference/browser/configure.zcml
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/configure.zcml	2007-09-09 12:51:37 UTC (rev 79536)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/configure.zcml	2007-09-09 13:49:45 UTC (rev 79537)
@@ -34,6 +34,12 @@
       permission="zope.Public"
       allowed_interface="zope.traversing.browser.interfaces.IAbsoluteURL"
       />
+  <view
+      for="..interfaces.IViewReference"
+      factory=".views.DefaultViewReferenceOpener"
+      type="zope.publisher.interfaces.http.IHTTPRequest"
+      permission="zope.Public"
+      provides="..interfaces.IViewReferenceOpener"/>
 
   <view
       for="..interfaces.IViewReference"

Added: z3c.reference/branches/flash/src/z3c/reference/browser/opener.pt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/opener.pt	                        (rev 0)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/opener.pt	2007-09-09 13:49:45 UTC (rev 79537)
@@ -0,0 +1,5 @@
+<span tal:condition="view/target | nothing">
+  <span tal:condition="view/target/@@zmi_icon | nothing"
+        tal:content="structure view/target/@@zmi_icon"/>
+</span>
+<span tal:content="view/title"/>


Property changes on: z3c.reference/branches/flash/src/z3c/reference/browser/opener.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: z3c.reference/branches/flash/src/z3c/reference/browser/views.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/views.py	2007-09-09 12:51:37 UTC (rev 79536)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/views.py	2007-09-09 13:49:45 UTC (rev 79537)
@@ -19,15 +19,20 @@
 import urllib
 
 from zope import component
+from zope import interface
 from zope.traversing.browser import absoluteURL
 from zope.traversing.interfaces import IContainmentRoot
 from zope.traversing.browser.interfaces import IAbsoluteURL
 from zope.traversing.browser.absoluteurl import AbsoluteURL
 from zope.app.intid.interfaces import IIntIds
-
+from zope.app.form.browser.widget import renderElement
+from zope.app.pagetemplate import ViewPageTemplateFile
+from zope.dublincore.interfaces import IZopeDublinCore
+from zope.app.keyreference.interfaces import NotYet
 from zc import resourcelibrary
 
 from z3c.reference import interfaces
+from z3c.reference.reference import ViewReference
 
 noImage = '/@@/z3c.reference.resources/noimage.jpg'
 
@@ -149,6 +154,54 @@
         (target, request),
         interfaces.IViewReferenceEditor, name=settingName)
 
+def getOpenerView(ref, request, settingName):
+
+    def _adapter(o, name=u''):
+        return component.queryMultiAdapter(
+            (o, request),
+            interfaces.IViewReferenceOpener, name=name)
+    view = None
+    if ref is None:
+        ref = ViewReference()
+        target = None
+    else:
+        target = ref.target
+
+    if target is not None:
+        view = _adapter(target, settingName)
+        if view is None:
+            view = _adapter(target)
+    if view is None:
+        view = _adapter(ref, settingName)
+        if view is None:
+            view = _adapter(ref)
+    return view
+
+class DefaultViewReferenceOpener(object):
+
+
+    interface.implements(interfaces.IViewReferenceOpener)
+    __call__ = ViewPageTemplateFile('opener.pt')
+
+    def __init__(self, context, request):
+        self.context = context
+        self.request = request
+
+    @property
+    def target(self):
+        try:
+            target = self.context.target
+        except NotYet:
+            return None
+
+    @property
+    def title(self):
+        if self.target is not None:
+            return IZopeDublinCore(self.context).title
+        return u'Undefined'
+
+
+
 class ViewReferenceEditorDispatcher(object):
 
     """Return the edit IViewReferenceEditor for the target context

Modified: z3c.reference/branches/flash/src/z3c/reference/browser/widget.pt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/widget.pt	2007-09-09 12:51:37 UTC (rev 79536)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/widget.pt	2007-09-09 13:49:45 UTC (rev 79537)
@@ -1,11 +1,5 @@
 <a href=""
    tal:replace="structure options/linkTag">editor link</a>
-<a href=""
-   tal:condition="options/imgLink"
-   tal:attributes="href options/imgLink">
-<img src=""
-     tal:attributes="src options/imgSrc" />
-</a>
 <input type="hidden"
        tal:replace="structure options/intidInput" />
 <input type="hidden"

Modified: z3c.reference/branches/flash/src/z3c/reference/browser/widget.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/widget.py	2007-09-09 12:51:37 UTC (rev 79536)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/widget.py	2007-09-09 13:49:45 UTC (rev 79537)
@@ -35,7 +35,7 @@
 from zc import resourcelibrary
 from z3c.reference import interfaces
 from z3c.reference.reference import ViewReference,ImageReference
-from views import getEditorView
+from views import getEditorView, getOpenerView
 from serialize import serializeForm
 from zope.formlib import form
 
@@ -137,17 +137,20 @@
                 ref = self.context.get(self.context.context)
             except:
                 ref = None
+        # add img src if available
+#         if interfaces.IViewReference.providedBy(self._data) and \
+#             self._data.target is not None:
+#             imgLink = 'Preview image'
+#             imgSrc = absoluteURL(self._data.target, self.request)
+#         else:
+#             imgLink = None
+#             imgSrc = None
+        openerView = getOpenerView(ref, self.request,
+                                   self.context.settingName)
+        contents = openerView()
         if ref is None:
-            ref = self._emptyReference
-        # add img src if available
-        if interfaces.IViewReference.providedBy(self._data) and \
-            self._data.target is not None:
-            imgLink = 'Preview image'
-            imgSrc = absoluteURL(self._data.target, self.request)
-        else:
-            imgLink = None
-            imgSrc = None
-        contents = undefined
+            ref = ViewReference()
+
         targetName = self.name + '.target'
         formDataName = self.name + '.formData'
         intidInput = renderElement(u'input',
@@ -174,7 +177,7 @@
                             extra=self.extra)
         link = linkTag + intidInput + formDataInput
         return self.template(linkTag=linkTag, intidInput=intidInput, 
-            formDataInput=formDataInput, imgSrc=imgSrc, imgLink=imgLink)
+            formDataInput=formDataInput)
 
     def _getFormValue(self):
         res = super(ViewReferenceWidget,self)._getFormValue()

Modified: z3c.reference/branches/flash/src/z3c/reference/interfaces.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/interfaces.py	2007-09-09 12:51:37 UTC (rev 79536)
+++ z3c.reference/branches/flash/src/z3c/reference/interfaces.py	2007-09-09 13:49:45 UTC (rev 79537)
@@ -101,3 +101,9 @@
 
 class IViewReferenceEditor(zope.interface.Interface):
     """Marker interface for view reference editor edit forms."""
+
+class IViewReferenceOpener(zope.interface.Interface):
+    """Marker interface for view reference opener views. The one that
+    are displayed in the parent window"""
+
+



More information about the Checkins mailing list