Author: gchapelle Date: Fri Feb 3 14:21:24 2006 New Revision: 2278 Added: azax/branches/snowsprint/demos/azaxdemo/browser/header_macros.pt Modified: azax/branches/snowsprint/azaxview.py azax/branches/snowsprint/browser/kukitresponse.pt azax/branches/snowsprint/configure.zcml azax/branches/snowsprint/demos/azaxdemo/azaxview.py azax/branches/snowsprint/demos/azaxdemo/browser/azax_demo.pt azax/branches/snowsprint/demos/azaxdemo/browser/azax_instant_edit.azax azax/branches/snowsprint/demos/azaxdemo/browser/azax_instant_edit.pt azax/branches/snowsprint/demos/azaxdemo/browser/azax_three_autoupdate.pt azax/branches/snowsprint/demos/azaxdemo/browser/azax_tree.pt azax/branches/snowsprint/demos/azaxdemo/browser/azax_two_select.pt azax/branches/snowsprint/demos/azaxdemo/browser/cancel_submit.pt azax/branches/snowsprint/demos/azaxdemo/configure.zcml azax/branches/snowsprint/tests/test_azaxview.py Log: add xpath support in the command subengine
add macro to generate ajaxslt js Modified: azax/branches/snowsprint/azaxview.py ============================================================================== --- azax/branches/snowsprint/azaxview.py (original) +++ azax/branches/snowsprint/azaxview.py Fri Feb 3 14:21:24 2006 @@ -86,8 +86,13 @@ class AzaxCommand: def __init__(self, name, selector): + if isinstance(selector, basestring): + self.selector = selector + self.selectorType = '' + else: + self.selector = selector.value + self.selectorType = selector.type self.name = name - self.selector = selector self.params = [] def addParam(self, name, content=''): @@ -101,9 +106,36 @@ def getSelector(self): return self.selector + def getSelectorType(self): + return self.selectorType + def getParams(self): return self.params +XPATH_SELECTOR = 'xpath' +CSS_SELECTOR = 'css' +HTMLID_SELECTOR = 'htmlid' + +class XpathSelector: + + type = XPATH_SELECTOR + + def __init__(self, selector): + self.value = selector + +class CssSelector: + + type = CSS_SELECTOR + + def __init__(self, selector): + self.value = selector + +class HtmlIdSelector: + + type = HTMLID_SELECTOR + + def __init__(self, selector): + self.value = selector # -- # Base view class # @@ -141,7 +173,17 @@ def getCommands(self): return self.commands - + + + def getXpathSelector(self, selector): + return XpathSelector(selector) + + def getCssSelector(self, selector): + return CssSelector(selector) + + def getHtmlIdSelector(self, selector): + return HtmlIdSelector(selector) + # -- # commands # -- @@ -152,6 +194,12 @@ command = self.addCommand('setHtmlAsChild', selector) data = command.addParam('html', new_value) + def setAttribute(self, selector, name, value): + """ see interfaces.py """ + command = self.addCommand('setAttribute', selector) + data = command.addParam('name', name) + data = command.addParam('value', value) + def addAfter(self, selector, new_value): """ see interfaces.py """ new_value = HtmlParser(new_value)() @@ -168,6 +216,11 @@ command = self.addCommand('removeNode', selector) data = command.addParam('none') + def removeNode(self, selector): + """ see interfaces.py """ + command = self.addCommand('removeNode', selector) + data = command.addParam('none') + def removeNextSibling(self, selector): """ see interfaces.py """ command = self.addCommand('removeNextSibling', selector) @@ -183,6 +236,11 @@ command = self.addCommand('copyChildrenFrom', selector) data = command.addParam('html_id', id) + def moveNodeAfter(self, selector, id): + """ see interfaces.py """ + command = self.addCommand('moveNodeAfter', selector) + data = command.addParam('html_id', id) + def copyChildrenTo(self, selector, id): """ see interfaces.py """ command = self.addCommand('copyChildrenTo', selector) Modified: azax/branches/snowsprint/browser/kukitresponse.pt ============================================================================== --- azax/branches/snowsprint/browser/kukitresponse.pt (original) +++ azax/branches/snowsprint/browser/kukitresponse.pt Fri Feb 3 14:21:24 2006 @@ -5,9 +5,11 @@ xmlns:metal="http://xml.zope.org/namespaces/metal" xmlns:i18n="http://xml.zope.org/namespaces/i18n"><body> <kukit:command tal:repeat="command view/getCommands" - selector="div#demo" name="setHtmlAsChild" + selector="div#demo" name="setHtmlAsChild" + selectorType="" tal:attributes="selector command/getSelector; - name command/getName"> + name command/getName; + selectorType command/getSelectorType | default"> <kukit:param tal:repeat="param command/params" name="html" tal:attributes="name param/name" tal:content="structure param/content"> Modified: azax/branches/snowsprint/configure.zcml ============================================================================== --- azax/branches/snowsprint/configure.zcml (original) +++ azax/branches/snowsprint/configure.zcml Fri Feb 3 14:21:24 2006 @@ -23,6 +23,26 @@ /> <browser:resource + file="kukit/3rd_party/ajaxslt/misc.js" + name="ajaxslt_misc.js" + /> + + <browser:resource + file="kukit/3rd_party/ajaxslt/dom.js" + name="ajaxslt_dom.js" + /> + + <browser:resource + file="kukit/3rd_party/ajaxslt/xpath.js" + name="ajaxslt_xpath.js" + /> + + <browser:resource + file="kukit/3rd_party/ajaxslt/xslt.js" + name="ajaxslt_xslt.js" + /> + + <browser:resource file="tests/js/runner.html" name="azaxtestrunner.html" /> Modified: azax/branches/snowsprint/demos/azaxdemo/azaxview.py ============================================================================== --- azax/branches/snowsprint/demos/azaxdemo/azaxview.py (original) +++ azax/branches/snowsprint/demos/azaxdemo/azaxview.py Fri Feb 3 14:21:24 2006 @@ -22,8 +22,12 @@ from Products.azax import AzaxBaseView from datetime import datetime +from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile + class AzaxView(AzaxBaseView): + #header_macros = ViewPageTemplateFile('browser/header_macros.pt') + def clearDivContent(self): """ clear div content """ self.clearChildren('div#demo') @@ -92,3 +96,8 @@ def cancelSubmitSave(self, text_save): self.setHtmlAsChild('div#async', 'Async saved %s' % text_save) return self.render() + + def removeNodeXpath(self): + sel = self.getXpathSelector("//[EMAIL PROTECTED]'xpath']/following-sibling::*[position()=1]") + self.removeNode(sel) + return self.render() Modified: azax/branches/snowsprint/demos/azaxdemo/browser/azax_demo.pt ============================================================================== --- azax/branches/snowsprint/demos/azaxdemo/browser/azax_demo.pt (original) +++ azax/branches/snowsprint/demos/azaxdemo/browser/azax_demo.pt Fri Feb 3 14:21:24 2006 @@ -1,23 +1,6 @@ <html> <head> - <link rel="kukit" - tal:attributes="href string:${context/absolute_url}/++resource++azax_demo.azax"/> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++sarissa.js;" - src="++resource++sarissa.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++cssQuery.js;" - src="++resource++cssQuery.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++MochiKit.js;" - src="++resource++MochiKit.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++kukit.js;" - src="++resource++kukit.js"> - </script> + <metal:header use-macro="context/header_macros/macros/header_resources" /> </head> <body> <!--a href="javascript:void(createLoggingPane(true));">logging</a--> Modified: azax/branches/snowsprint/demos/azaxdemo/browser/azax_instant_edit.azax ============================================================================== --- azax/branches/snowsprint/demos/azaxdemo/browser/azax_instant_edit.azax (original) +++ azax/branches/snowsprint/demos/azaxdemo/browser/azax_instant_edit.azax Fri Feb 3 14:21:24 2006 @@ -6,4 +6,7 @@ <rule selector="input#save"> <event name="click">saveText</event> </rule> + <rule selector="#remove_xpath"> + <event name="click">removeNodeXpath</event> + </rule> </rules> Modified: azax/branches/snowsprint/demos/azaxdemo/browser/azax_instant_edit.pt ============================================================================== --- azax/branches/snowsprint/demos/azaxdemo/browser/azax_instant_edit.pt (original) +++ azax/branches/snowsprint/demos/azaxdemo/browser/azax_instant_edit.pt Fri Feb 3 14:21:24 2006 @@ -1,24 +1,7 @@ <html> <head> - <link rel="kukit" - tal:attributes="href string:${context/absolute_url}/++resource++azax_instant_edit.azax"/> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++sarissa.js;" - src="++resource++sarissa.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++cssQuery.js;" - src="++resource++cssQuery.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++MochiKit.js;" - src="++resource++MochiKit.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++kukit.js;" - src="++resource++kukit.js"> - </script> -</head> + <metal:header use-macro="context/header_macros/macros/header_resources" /> + </head> <body> <p><a href=".">All demos</a></p> @@ -32,5 +15,35 @@ </form> </div> + +<p>ab</p> +<input onclick="test();" type="submit" /> +<script>function test() { + var + res=xpathDomEval("//[EMAIL PROTECTED]'xpath']/following-sibling::*[position()=1]", document); + if (res.nodeSetValue() == null) {alert('null');} + else { + Log.write(''+res.stringValue()); + Log.show(); + Log.write(''+res.nodeSetValue().length); + Log.show(); + } + /*res=xpathDomEval("following-sibling::P", res.nodeSetValue()[0]); + if (res.nodeSetValue() == null) {alert('null');} + else { + Log.write(''+res.stringValue()); + Log.show(); + Log.write(''+res.nodeSetValue().length); + Log.show(); + }*/ + } +</script> + +<p><a id="remove_xpath">Remove Node with XPath</a><p> +<p id="xpath">XPath</p> +<p>next 1</p> +<p>next 2</p> +<p>next 3</p> + </body> </html> Modified: azax/branches/snowsprint/demos/azaxdemo/browser/azax_three_autoupdate.pt ============================================================================== --- azax/branches/snowsprint/demos/azaxdemo/browser/azax_three_autoupdate.pt (original) +++ azax/branches/snowsprint/demos/azaxdemo/browser/azax_three_autoupdate.pt Fri Feb 3 14:21:24 2006 @@ -1,5 +1,6 @@ <html> <head> + <metal:header use-macro="context/header_macros/macros/header_resources" /> <link rel="kukit" tal:attributes="href string:${context/absolute_url}/++resource++azax_three_autoupdate.azax"/> <script type="text/javascript" Modified: azax/branches/snowsprint/demos/azaxdemo/browser/azax_tree.pt ============================================================================== --- azax/branches/snowsprint/demos/azaxdemo/browser/azax_tree.pt (original) +++ azax/branches/snowsprint/demos/azaxdemo/browser/azax_tree.pt Fri Feb 3 14:21:24 2006 @@ -1,33 +1,16 @@ <html> <head> - <link rel="kukit" - tal:attributes="href string:${context/absolute_url}/++resource++azax_tree.azax"/> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++sarissa.js;" - src="++resource++sarissa.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++cssQuery.js;" - src="++resource++cssQuery.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++MochiKit.js;" - src="++resource++MochiKit.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++kukit.js;" - src="++resource++kukit.js"> - </script> -<style> - ul, li{ - list-style: square; - } + <metal:header use-macro="context/header_macros/macros/header_resources" /> + <style> + ul, li{ + list-style: square; + } - input{ - border: 0px; - background-color: transparent; - } -</style> + input{ + border: 0px; + background-color: transparent; + } + </style> </head> <body> <p><a href=".">All demos</a></p> Modified: azax/branches/snowsprint/demos/azaxdemo/browser/azax_two_select.pt ============================================================================== --- azax/branches/snowsprint/demos/azaxdemo/browser/azax_two_select.pt (original) +++ azax/branches/snowsprint/demos/azaxdemo/browser/azax_two_select.pt Fri Feb 3 14:21:24 2006 @@ -1,53 +1,10 @@ <html> <head> - <link rel="kukit" - tal:attributes="href string:${context/absolute_url}/++resource++azax_two_selects.azax"/> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++sarissa.js;" - src="++resource++sarissa.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++cssQuery.js;" - src="++resource++cssQuery.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++MochiKit.js;" - src="++resource++MochiKit.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++kukit.js;" - src="++resource++kukit.js"> - </script> + <metal:header use-macro="context/header_macros/macros/header_resources" /> </head> <body> <p><a href=".">All demos</a></p> <h2>Two Selects</h2> - <!--h3>Preprocessing</h3> - <p>This page has a button with a "button" classname. - - It also defines a link in the header which "rel" attribute points - to a .azax server file : - - <a tal:attributes="href string:${context/absolute_url}/++resource++azax_demo.azax"> - see the kukit file here</a>.</p> - <p> - This kukit file says that whenever the user click on the button - the getDivContent URL is called asynchronously. - - </p> - <p>A javascript preprocessor translate this content in javascript - events insertions in the DOM</p> - <h3>Asynced server call</h3> - <p>This page also has a div with "clickable" for its classname.</p> - <p>getDivContent is a method of a view class that returns xml content - - </p> - <a tal:attributes="href string:${context/absolute_url}/getDivContent"> - see what the view returns here</a> - <p> - The xml is retrieved and the DOM updated with commands passed into the XML. - The command actually says that the div content gets updated. - </p--> <h3>Demo</h3> <form name="two"> Modified: azax/branches/snowsprint/demos/azaxdemo/browser/cancel_submit.pt ============================================================================== --- azax/branches/snowsprint/demos/azaxdemo/browser/cancel_submit.pt (original) +++ azax/branches/snowsprint/demos/azaxdemo/browser/cancel_submit.pt Fri Feb 3 14:21:24 2006 @@ -1,25 +1,7 @@ <html> <head> - <link rel="kukit" - tal:attributes="href - string:${context/absolute_url}/++resource++cancel_submit.azax"/> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++sarissa.js;" - src="++resource++sarissa.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++cssQuery.js;" - src="++resource++cssQuery.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++MochiKit.js;" - src="++resource++MochiKit.js"> - </script> - <script type="text/javascript" - tal:attributes="src string:${context/absolute_url}/++resource++kukit.js;" - src="++resource++kukit.js"> - </script> -</head> + <metal:header use-macro="context/header_macros/macros/header_resources" /> + </head> <body> <p><a href=".">All demos</a></p> Added: azax/branches/snowsprint/demos/azaxdemo/browser/header_macros.pt ============================================================================== --- (empty file) +++ azax/branches/snowsprint/demos/azaxdemo/browser/header_macros.pt Fri Feb 3 14:21:24 2006 @@ -0,0 +1,43 @@ +<html> + <metal:header define-macro="header_resources"> + <link rel="kukit" + tal:attributes="href string:${context/absolute_url}/++resource++azax_instant_edit.azax"/> + <script type="text/javascript" + tal:attributes="src string:${context/absolute_url}/++resource++sarissa.js;" + src="++resource++sarissa.js"> + </script> + <script type="text/javascript" + tal:attributes="src string:${context/absolute_url}/++resource++cssQuery.js;" + src="++resource++cssQuery.js"> + </script> + <script type="text/javascript" + tal:attributes="src string:${context/absolute_url}/++resource++MochiKit.js;" + src="++resource++MochiKit.js"> + </script> + <!-- ajaxslt--> + <script type="text/javascript" + tal:attributes="src + string:${context/absolute_url}/++resource++ajaxslt_misc.js;" + src="++resource++ajaxslt_misc.js"> + </script> + <script type="text/javascript" + tal:attributes="src + string:${context/absolute_url}/++resource++ajaxslt_dom.js;" + src="++resource++ajaxslt_dom.js"> + </script> + <script type="text/javascript" + tal:attributes="src + string:${context/absolute_url}/++resource++ajaxslt_xpath.js;" + src="++resource++ajaxslt_xpath.js"> + </script> + <!--script type="text/javascript" + tal:attributes="src + string:${context/absolute_url}/++resource++ajaxslt_xslt.js;" + src="++resource++ajaxslt_xslt.js"> + </script--> + <script type="text/javascript" + tal:attributes="src string:${context/absolute_url}/++resource++kukit.js;" + src="++resource++kukit.js"> + </script> + </metal:header> +</html> Modified: azax/branches/snowsprint/demos/azaxdemo/configure.zcml ============================================================================== --- azax/branches/snowsprint/demos/azaxdemo/configure.zcml (original) +++ azax/branches/snowsprint/demos/azaxdemo/configure.zcml Fri Feb 3 14:21:24 2006 @@ -42,10 +42,17 @@ permission="zope2.View" /> + <browser:page + for=".interfaces.ISimpleContent" + template="browser/header_macros.pt" + name="header_macros" + permission="zope2.View" + /> + <browser:resource file="browser/azax_demo.azax" name="azax_demo.azax" - /> + /> <browser:page for=".interfaces.ISimpleContent" @@ -210,4 +217,12 @@ permission="zope2.View" /> + <browser:page + for=".interfaces.ISimpleContent" + class=".azaxview.AzaxView" + attribute="removeNodeXpath" + name="removeNodeXpath" + permission="zope2.View" + /> + </configure> Modified: azax/branches/snowsprint/tests/test_azaxview.py ============================================================================== --- azax/branches/snowsprint/tests/test_azaxview.py (original) +++ azax/branches/snowsprint/tests/test_azaxview.py Fri Feb 3 14:21:24 2006 @@ -153,7 +153,8 @@ view.setHtmlAsChild('div.class', 'new content') result = view.render() self.assertCommandsEqual(result, '''\ -<kukit:command selector="div.class" name="setHtmlAsChild"> +<kukit:command selector="div.class" name="setHtmlAsChild" + selectorType=""> \t<kukit:param name="html">new content</kukit:param> </kukit:command> ''') -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins