[Checkins] SVN: z3c.formjsdemo/trunk/src/z3c/formjsdemo/tree/ added
automagical way for tree state to persist between page loads
via session storage.
Paul Carduner
paulcarduner at gmail.com
Wed Aug 22 19:34:52 EDT 2007
Log message for revision 79151:
added automagical way for tree state to persist between page loads via session storage.
Changed:
U z3c.formjsdemo/trunk/src/z3c/formjsdemo/tree/browser.py
U z3c.formjsdemo/trunk/src/z3c/formjsdemo/tree/inline.pt
-=-
Modified: z3c.formjsdemo/trunk/src/z3c/formjsdemo/tree/browser.py
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/tree/browser.py 2007-08-22 21:50:49 UTC (rev 79150)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/tree/browser.py 2007-08-22 23:34:52 UTC (rev 79151)
@@ -24,18 +24,22 @@
from zope.lifecycleevent.interfaces import IObjectModifiedEvent
from zope.component.interfaces import IObjectEvent
from zope.app.container.interfaces import IObjectAddedEvent
+from zope.app.session.interfaces import ISession
from z3c.form import form, field, button
from z3c.formui import layout
from z3c.form.interfaces import IWidgets, DISPLAY_MODE
-from z3c.formjs import jsaction, jsfunction, jsclientevent
+from z3c.formjs import jsaction, jsfunction, jsclientevent, ajax
from z3c.formjs.interfaces import IJSButton
import tree, interfaces
TreeCSSViewlet = CSSViewlet('tree.css')
JQueryFormPluginViewlet = JavaScriptViewlet('jquery.form.js')
+SESSION_KEY = 'z3c.formjsdemo.tree'
+
+
class PrefixForm(object):
postfix = ''
@@ -134,7 +138,8 @@
contract = jsaction.JSButton(title=u'-')
-class TreeNodeInlineForm(PrefixForm, EventsForm, form.Form):
+class TreeNodeInlineForm(PrefixForm, ajax.AJAXRequestHandler,
+ EventsForm, form.Form):
fields = field.Fields(interfaces.ITreeNode).select('title')
buttons = button.Buttons(IButtons)
@@ -143,20 +148,48 @@
@jsaction.handler(buttons['expand'])
def handleExpand(self, event, selector):
url = absoluteURL(self.context, self.request) + '/@@contents'
- return TreeNodeForm.expandNode.call(url,
+ call = TreeNodeForm.expandNode.call(url,
self.actions['expand'].id,
self.actions['contract'].id,
self.prefix+'-inlinecontent')
+ path = absoluteURL(self.context, self.request)
+ store = '$.get("%s/@@inline/@@ajax/storeExpand", function(data){});' % path
+ return '\n'.join((call, store))
@jsaction.handler(buttons['contract'])
- def handleExpand(self, event, selector):
- return TreeNodeForm.contractNode.call(self.actions['expand'].id,
+ def handleContract(self, event, selector):
+ call = TreeNodeForm.contractNode.call(self.actions['expand'].id,
self.actions['contract'].id,
self.prefix+'-inlinecontent')
+ path = absoluteURL(self.context, self.request)
+ store = '$.get("%s/@@inline/@@ajax/storeContract", function(data){});' % path
+ return '\n'.join((call, store))
+ @ajax.handler
+ def storeExpand(self):
+ self._setExpanded(True)
+ return "success"
+
+ @ajax.handler
+ def storeContract(self):
+ self._setExpanded(False)
+ return "success"
+
+ def _setExpanded(self, value):
+ session = ISession(self.request)[SESSION_KEY]
+ session[self.prefix + '-expanded'] = value
+
+ @property
+ def expanded(self):
+ session = ISession(self.request)[SESSION_KEY]
+ return session.get(self.prefix+'-expanded', False)
+
def updateActions(self):
super(TreeNodeInlineForm, self).updateActions()
- self.actions['contract'].addClass('hidden')
+ if self.expanded:
+ self.actions['expand'].addClass('hidden')
+ else:
+ self.actions['contract'].addClass('hidden')
def updateWidgets(self):
self.widgets = getMultiAdapter(
Modified: z3c.formjsdemo/trunk/src/z3c/formjsdemo/tree/inline.pt
===================================================================
--- z3c.formjsdemo/trunk/src/z3c/formjsdemo/tree/inline.pt 2007-08-22 21:50:49 UTC (rev 79150)
+++ z3c.formjsdemo/trunk/src/z3c/formjsdemo/tree/inline.pt 2007-08-22 23:34:52 UTC (rev 79151)
@@ -7,5 +7,7 @@
<span tal:replace="structure view/widgets/title/render" />
</div>
<div tal:attributes="id string:${view/prefix}-inlinecontent"
- class="inline-content"></div>
+ class="inline-content">
+ <div tal:condition="view/expanded" tal:replace="structure context/@@contents" />
+ </div>
</div>
More information about the Checkins
mailing list