From: Charles du Jeu Date: Wed, 28 Apr 2010 08:17:23 +0000 (+0000) Subject: Simple XML Highlighter X-Git-Tag: argeo-slc-2.1.7~1343 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=8aecefe809f016bae788bc009a3f0ae45fb2016b;p=gpl%2Fargeo-slc.git Simple XML Highlighter git-svn-id: https://svn.argeo.org/slc/trunk@3505 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/views/XmlNodeEditor.js b/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/views/XmlNodeEditor.js index 2493edda8..2c1b25955 100644 --- a/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/views/XmlNodeEditor.js +++ b/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/views/XmlNodeEditor.js @@ -1,5 +1,5 @@ qx.Class.define("org.argeo.jcr.ria.views.XmlNodeEditor", { - extend : qx.ui.embed.Html, + extend : qx.ui.container.Composite, implement : [org.argeo.ria.components.IView], properties : { @@ -26,6 +26,10 @@ qx.Class.define("org.argeo.jcr.ria.views.XmlNodeEditor", { construct : function(){ this.base(arguments); + this.setLayout(new qx.ui.layout.VBox()); + this.htmlPane = new qx.ui.embed.Html(); + this.htmlPane.setOverflow("auto", "auto"); + this.add(this.htmlPane, {flex:1}); }, members : { @@ -38,8 +42,7 @@ qx.Class.define("org.argeo.jcr.ria.views.XmlNodeEditor", { * @return {Boolean} */ init : function(viewPane, data){ - this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId())); - this.setHtml("Hello!"); + this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId())); }, /** * The implementation should contain the real data loading (i.o. query...) @@ -49,7 +52,32 @@ qx.Class.define("org.argeo.jcr.ria.views.XmlNodeEditor", { rootNode.load(); rootNode.addListener("changeLoadState", function(){ var xmlString = rootNode.toXmlString(true); - this.setHtml(qx.xml.String.escape(xmlString)); + var TAG_START_PATTERN = new RegExp("<([0-9a-zA-Z\.]+)([^>]*)>", "gi"); + var TAG_END_PATTERN = new RegExp("", "gi"); + var TAG_CLOSE_PATTERN = new RegExp("(/?>)", "gi"); + var TAG_ATTRIBUTE = new RegExp("\\s([0-9a-zA-Z:]+)\\=\"([^\"]*)\"", "gi"); + // Not implemented yet + var TAG_COMMENT = new RegExp("()", "gi"); + var TAG_CDATA_START = new RegExp("(\\)", "gi"); + + xmlString = xmlString.replace(TAG_START_PATTERN, 'xml_div_begin<xml_tagname_begin$1xml_tagname_end$2>'); + xmlString = xmlString.replace(TAG_END_PATTERN, '</xml_tagname_begin$1xml_tagname_end>xml_div_end'); + xmlString = xmlString.replace(TAG_CLOSE_PATTERN, '>'); + + 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_end)", "g"), '
'); + xmlString = xmlString.replace(new RegExp("(xml_tagname_begin)", "g"), ''); + xmlString = xmlString.replace(new RegExp("(xml_tagname_end)", "g"), ''); + xmlString = xmlString.replace(new RegExp("(xml_attname_begin)", "g"), ''); + xmlString = xmlString.replace(new RegExp("(xml_attname_end)", "g"), ''); + xmlString = xmlString.replace(new RegExp("(xml_attvalue_begin)", "g"), ''); + xmlString = xmlString.replace(new RegExp("(xml_attvalue_end)", "g"), ''); + xmlString = '
' + xmlString + '
'; + this.htmlPane.setHtml(xmlString); }, this); }, /** @@ -57,7 +85,7 @@ qx.Class.define("org.argeo.jcr.ria.views.XmlNodeEditor", { * @return {Boolean} */ addScroll : function(){ - return true; + return false; }, /** * Called at destruction time