From d44228348e3af173e5fa2ad33853e64acb0b59ca Mon Sep 17 00:00:00 2001 From: Charles du Jeu Date: Wed, 28 Apr 2010 10:09:02 +0000 Subject: [PATCH] Tweak nodes, provider and data model objects. git-svn-id: https://svn.argeo.org/slc/trunk@3511 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../jcr/class/org/argeo/jcr/ria/JcrBrowser.js | 15 +++-- .../org/argeo/jcr/ria/model/DataModel.js | 44 ++++++++++++- .../jcr/class/org/argeo/jcr/ria/model/Node.js | 3 +- .../argeo/jcr/ria/provider/XmlNodeProvider.js | 23 ++++++- .../org/argeo/jcr/ria/views/XmlNodeEditor.js | 66 ++++++++++++++++--- 5 files changed, 130 insertions(+), 21 deletions(-) diff --git a/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/JcrBrowser.js b/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/JcrBrowser.js index 4e36ba1a0..fd8d933f7 100644 --- a/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/JcrBrowser.js +++ b/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/JcrBrowser.js @@ -41,12 +41,17 @@ qx.Class.define("org.argeo.jcr.ria.JcrBrowser", initViews : function(viewsManager){ var nodeProvider = new org.argeo.jcr.ria.provider.XmlNodeProvider(); - nodeProvider.initProvider({xmlSrc : "/org.argeo.slc.webapp/getJcrItem.jcr?path=/slc/testresults"}) - var rootNode = new org.argeo.jcr.ria.model.Node("Root", true); + nodeProvider.initProvider({ + xmlSrc : "/org.argeo.slc.webapp/getJcrItem.jcr?", + dynamic : true, + pathParameter:"path" + }); + var rootNode = new org.argeo.jcr.ria.model.Node("Root", true); + rootNode.setPath('/slc'); rootNode.setNodeProvider(nodeProvider); - //rootNode.load(); - var testView = viewsManager.initIViewClass(org.argeo.jcr.ria.views.XmlNodeEditor, "fulltree"); - testView.load(rootNode); + var dataModel = new org.argeo.jcr.ria.model.DataModel(rootNode); + var testView = viewsManager.initIViewClass(org.argeo.jcr.ria.views.XmlNodeEditor, "fulltree", dataModel); + testView.load(); }, remove : function(viewsManager){ diff --git a/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/DataModel.js b/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/DataModel.js index 5cb49bab6..9ed620539 100644 --- a/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/DataModel.js +++ b/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/DataModel.js @@ -1,14 +1,17 @@ qx.Class.define("org.argeo.jcr.ria.model.DataModel", { extend : qx.core.Object, + events : { + "changeContextNode" : "qx.event.type.Data" + }, + properties : { rootNode : { check : "org.argeo.jcr.ria.model.Node", event : "changeRootNode" }, contextNode : { - check : "org.argeo.jcr.ria.model.Node", - event : "changeContextNode" + check : "org.argeo.jcr.ria.model.Node" }, selection : { check : "org.argeo.jcr.ria.model.Node[]", @@ -19,6 +22,43 @@ qx.Class.define("org.argeo.jcr.ria.model.DataModel", { construct : function(rootNode){ this.base(arguments); this.setRootNode(rootNode); + }, + + members : { + requireContextChange : function(path){ + var targetNode; + var rootNode = this.getRootNode(); + if(!path){ + targetNode = rootNode; + }else{ + // Create a fake node + if(path[path.length-1] == '/'){ + path = path.substring(0, path.length-1); + } + var base = path.substring(path.lastIndexOf("/")+1); + targetNode = new org.argeo.jcr.ria.model.Node(base); + rootNode.addChild(targetNode); + targetNode.setNodeProvider(rootNode.getNodeProvider()); + targetNode.setPath(path); + } + var observer = function(event){ + var state = event.getData(); + if(state == "loading"){ + targetNode.loadingNode = new org.argeo.jcr.ria.model.Node("loading"); + targetNode.addChild(targetNode.loadingNode); + }else if(state == "loaded"){ + if(targetNode.loadingNode) { + targetNode.loadingNode.remove(); + targetNode.loadingNode = null; + } + targetNode.removeListener("changeLoadState", observer, this); + } + this.setContextNode(targetNode); + this.fireDataEvent("changeContextNode", targetNode); + }; + targetNode.addListener("changeLoadState", observer, this); + targetNode.load(); + } } }); \ No newline at end of file diff --git a/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/Node.js b/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/Node.js index c5e45f7f2..fcd5e6d22 100644 --- a/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/Node.js +++ b/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/Node.js @@ -66,7 +66,8 @@ qx.Class.define("org.argeo.jcr.ria.model.Node", { var jcrChild = new org.argeo.jcr.ria.model.Node(child.nodeName); this.addChild(jcrChild); jcrChild.fromDomElement(child); - } + } + this.setLoadState("loaded"); }, toXmlString : function(recurse, childrenWriter){ diff --git a/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/provider/XmlNodeProvider.js b/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/provider/XmlNodeProvider.js index a7f7d1b31..0f7057a37 100644 --- a/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/provider/XmlNodeProvider.js +++ b/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/provider/XmlNodeProvider.js @@ -33,22 +33,39 @@ qx.Class.define("org.argeo.jcr.ria.provider.XmlNodeProvider", { if(this.getXmlDocLoaded()){ // Parse document and load node.setName(this._xmlDoc.documentElement.nodeName); + var properties = this.getSettings(); + // STUB : prune sub children, load only level 1 + /* + var children = this._xmlDoc.documentElement.childNodes; + for(var i=0;i]*)>", "gi"); var TAG_END_PATTERN = new RegExp("", "gi"); var TAG_CLOSE_PATTERN = new RegExp("(/?>)", "gi"); @@ -68,7 +79,7 @@ qx.Class.define("org.argeo.jcr.ria.views.XmlNodeEditor", { xmlString = xmlString.replace(TAG_ATTRIBUTE, ' xml_attname_begin$1xml_attname_end="xml_attvalue_begin$2xml_attvalue_end"'); //xmlString = qx.xml.String.escape(xmlString); - xmlString = xmlString.replace(new RegExp("(xml_div_begin)", "g"), '
'); + xmlString = xmlString.replace(new RegExp("(xml_div_begin)", "g"), '
'); xmlString = xmlString.replace(new RegExp("(xml_div_end)", "g"), '
'); xmlString = xmlString.replace(new RegExp("(xml_tagname_begin)", "g"), ''); xmlString = xmlString.replace(new RegExp("(xml_tagname_end)", "g"), ''); @@ -78,8 +89,43 @@ qx.Class.define("org.argeo.jcr.ria.views.XmlNodeEditor", { xmlString = xmlString.replace(new RegExp("(xml_attvalue_end)", "g"), ''); xmlString = '
' + xmlString + '
'; this.htmlPane.setHtml(xmlString); + /* + var call = new qx.util.DeferredCall(function(){ + var htmlDom = this.htmlPane.getContentElement().getDomElement(); + var spans = qx.bom.Selector.query("span", htmlDom); + for(var i=0;i