]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/views/PlainXmlViewer.js
New layout, new views...
[gpl/argeo-slc.git] / server / org.argeo.slc.ria / src / argeo-ria-lib / jcr / class / org / argeo / jcr / ria / views / PlainXmlViewer.js
index a164315a51a3e32631732734c5c4ff1e741226d4..92b6755e89d59cbf399ffaddf090b56332e9a03b 100644 (file)
@@ -8,7 +8,21 @@ qx.Class.define("org.argeo.jcr.ria.views.PlainXmlViewer", {
                 * See {@link org.argeo.ria.event.CommandsManager#definitions} for the keys to use for defining commands.\r
                 */\r
                commands : {\r
-                       init : {}\r
+                       init : {\r
+                               "close" : {\r
+                                       label           : "Close",\r
+                                       shared          : true,\r
+                                       icon            : "org.argeo.slc.ria/window-close.png",\r
+                                       shortcut        : "Control+w",\r
+                                       enabled         : true,\r
+                                       menu            : "Test",\r
+                                       toolbar         : "result",\r
+                                       callback        : function(e){\r
+                                               this._viewPane.closeCurrent();\r
+                                       },\r
+                                       command         : null\r
+                               }                               \r
+                       }\r
                },\r
                viewSelection : {\r
                        nullable:false, \r
@@ -21,9 +35,6 @@ qx.Class.define("org.argeo.jcr.ria.views.PlainXmlViewer", {
                instanceLabel : {\r
                        init:"Xml Editor",\r
                        event : "changeInstanceLabel"\r
-               },\r
-               dataModel : {\r
-                       \r
                }\r
        },\r
        \r
@@ -40,11 +51,14 @@ qx.Class.define("org.argeo.jcr.ria.views.PlainXmlViewer", {
                 * @param data {Mixed} Any object or data passed by the initiator of the view\r
                 * @return {Boolean}\r
                 */\r
-               init : function(viewPane, dataModel){\r
+               init : function(viewPane, jcrNode){\r
+                       this._viewPane = viewPane;\r
                        this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId()));                                \r
                        this.setLayout(new qx.ui.layout.VBox());\r
-                       this.setDataModel(dataModel);\r
-                                               \r
+                       \r
+                       this.setInstanceId("edit:" + jcrNode.getPath());\r
+                       this.setInstanceLabel("Node '" + jcrNode.getName()+"'");\r
+                       \r
                        this.htmlPane = new qx.ui.embed.Html();\r
                        this.htmlPane.setOverflow("auto", "auto");\r
                        this.htmlPane.setDecorator("input");\r
@@ -55,52 +69,56 @@ qx.Class.define("org.argeo.jcr.ria.views.PlainXmlViewer", {
                 * The implementation should contain the real data loading (i.o. query...)\r
                 * @return {Boolean}\r
                 */\r
-               load : function(){\r
-                       var dataModel = this.getDataModel();\r
-                       dataModel.addListener("changeSelection", function(event){\r
-                               var selection = event.getData();\r
-                               if(!selection.length) {\r
-                                       this.htmlPane.setHtml("");\r
-                                       return;\r
+               load : function(jcrNode){\r
+                       // Load full XML (deep)                 \r
+                       //jcrNode.load(-1);\r
+                       var fakeNode = new org.argeo.jcr.ria.model.Node(jcrNode.getName(), jcrNode.getNodeProvider(), true);\r
+                       fakeNode.setPath(jcrNode.getPath());\r
+                       fakeNode.addListener("changeLoadState", function(event){\r
+                               if(event.getData() == "loaded"){\r
+                                       var xmlString = fakeNode.toXmlString(true);\r
+                                       this._loadXmlString(xmlString);\r
+                               }\r
+                       }, this);\r
+                       fakeNode.load(-1);\r
+               },\r
+               \r
+               _loadXmlString : function(xmlString){\r
+                   var TAG_START_PATTERN = new RegExp("<([0-9a-zA-Z\.:]+)([^>]*)>", "gi");\r
+                   var TAG_END_PATTERN = new RegExp("</([0-9a-zA-Z\.:]+)>", "gi");\r
+                   var TAG_CLOSE_PATTERN = new RegExp("(/?>)", "gi");\r
+                   var TAG_ATTRIBUTE = new RegExp("\\s([0-9a-zA-Z:_]+)\\=\"([^\"]*)\"", "gi");\r
+                   // Not implemented yet\r
+                   var TAG_COMMENT = new RegExp("(<!--.*-->)", "gi");\r
+                   var TAG_CDATA_START = new RegExp("(\\<!\\[CDATA\\[).*", "gi");\r
+                   var TAG_CDATA_END = new RegExp(".*(]]>)", "gi");\r
+                       \r
+                   xmlString = xmlString.replace(TAG_START_PATTERN, 'xml_div_begin&lt;xml_tagname_begin$1xml_tagname_end$2&gt;');\r
+                   xmlString = xmlString.replace(TAG_END_PATTERN, '&lt;/xml_tagname_begin$1xml_tagname_end&gt;xml_div_end');\r
+                   xmlString = xmlString.replace(TAG_CLOSE_PATTERN, '&gt;');\r
+                   \r
+                   xmlString = xmlString.replace(TAG_ATTRIBUTE, ' xml_attname_begin$1xml_attname_end="xml_attvalue_begin$2xml_attvalue_end"');\r
+                       \r
+                       //xmlString = qx.xml.String.escape(xmlString);\r
+                       xmlString = xmlString.replace(new RegExp("(xml_div_begin)", "g"), '<div style="padding:1px;line-height:17px;padding-left:15px;">');\r
+                       xmlString = xmlString.replace(new RegExp("(xml_div_end)", "g"), '</div>');\r
+                       xmlString = xmlString.replace(new RegExp("(xml_tagname_begin)", "g"), '<b style="color:rgb(63,127,127);">');\r
+                       xmlString = xmlString.replace(new RegExp("(xml_tagname_end)", "g"), '</b>');\r
+                       xmlString = xmlString.replace(new RegExp("(xml_attname_begin)", "g"), '<b>');\r
+                       xmlString = xmlString.replace(new RegExp("(xml_attname_end)", "g"), '</b>');\r
+                       xmlString = xmlString.replace(new RegExp("(xml_attvalue_begin)", "g"), '<span style="color:rgb(0,0,255)">');\r
+                       xmlString = xmlString.replace(new RegExp("(xml_attvalue_end)", "g"), '</span>');\r
+                       xmlString = '<div style="margin-left:-10px;">' + xmlString + '</div>';\r
+                       this.htmlPane.setHtml(xmlString);\r
+                       var call = new qx.util.DeferredCall(function(){\r
+                               var htmlDom = this.htmlPane.getContentElement().getDomElement();\r
+                               var spans = qx.bom.Selector.query("span", htmlDom);\r
+                               for(var i=0;i<spans.length;i++){\r
+                                       var oThis = this;\r
+                                       spans[i].onclick = function(){oThis._setAttributesSpanEditable(this)};\r
                                }\r
-                               var xmlString = selection[0].toXmlString(true);\r
-                           var TAG_START_PATTERN = new RegExp("<([0-9a-zA-Z\.:]+)([^>]*)>", "gi");\r
-                           var TAG_END_PATTERN = new RegExp("</([0-9a-zA-Z\.:]+)>", "gi");\r
-                           var TAG_CLOSE_PATTERN = new RegExp("(/?>)", "gi");\r
-                           var TAG_ATTRIBUTE = new RegExp("\\s([0-9a-zA-Z:_]+)\\=\"([^\"]*)\"", "gi");\r
-                           // Not implemented yet\r
-                           var TAG_COMMENT = new RegExp("(<!--.*-->)", "gi");\r
-                           var TAG_CDATA_START = new RegExp("(\\<!\\[CDATA\\[).*", "gi");\r
-                           var TAG_CDATA_END = new RegExp(".*(]]>)", "gi");\r
-                               \r
-                           xmlString = xmlString.replace(TAG_START_PATTERN, 'xml_div_begin&lt;xml_tagname_begin$1xml_tagname_end$2&gt;');\r
-                           xmlString = xmlString.replace(TAG_END_PATTERN, '&lt;/xml_tagname_begin$1xml_tagname_end&gt;xml_div_end');\r
-                           xmlString = xmlString.replace(TAG_CLOSE_PATTERN, '&gt;');\r
-                           \r
-                           xmlString = xmlString.replace(TAG_ATTRIBUTE, ' xml_attname_begin$1xml_attname_end="xml_attvalue_begin$2xml_attvalue_end"');\r
-                               \r
-                               //xmlString = qx.xml.String.escape(xmlString);\r
-                               xmlString = xmlString.replace(new RegExp("(xml_div_begin)", "g"), '<div style="padding:1px;line-height:17px;padding-left:15px;">');\r
-                               xmlString = xmlString.replace(new RegExp("(xml_div_end)", "g"), '</div>');\r
-                               xmlString = xmlString.replace(new RegExp("(xml_tagname_begin)", "g"), '<b style="color:rgb(63,127,127);">');\r
-                               xmlString = xmlString.replace(new RegExp("(xml_tagname_end)", "g"), '</b>');\r
-                               xmlString = xmlString.replace(new RegExp("(xml_attname_begin)", "g"), '<b>');\r
-                               xmlString = xmlString.replace(new RegExp("(xml_attname_end)", "g"), '</b>');\r
-                               xmlString = xmlString.replace(new RegExp("(xml_attvalue_begin)", "g"), '<span style="color:rgb(0,0,255)">');\r
-                               xmlString = xmlString.replace(new RegExp("(xml_attvalue_end)", "g"), '</span>');\r
-                               xmlString = '<div style="margin-left:-10px;">' + xmlString + '</div>';\r
-                               this.htmlPane.setHtml(xmlString);\r
-                               var call = new qx.util.DeferredCall(function(){\r
-                                       var htmlDom = this.htmlPane.getContentElement().getDomElement();\r
-                                       var spans = qx.bom.Selector.query("span", htmlDom);\r
-                                       for(var i=0;i<spans.length;i++){\r
-                                               var oThis = this;\r
-                                               spans[i].onclick = function(){oThis._setAttributesSpanEditable(this)};\r
-                                       }\r
-                               }, this);\r
-                               call.schedule();\r
                        }, this);\r
-                       dataModel.requireContextChange();                       \r
+                       call.schedule();                        \r
                },\r
                \r
                _setAttributesSpanEditable : function(span){\r