* 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
instanceLabel : {\r
init:"Xml Editor",\r
event : "changeInstanceLabel"\r
- },\r
- dataModel : {\r
- \r
}\r
},\r
\r
* @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
* 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<xml_tagname_begin$1xml_tagname_end$2>');\r
+ xmlString = xmlString.replace(TAG_END_PATTERN, '</xml_tagname_begin$1xml_tagname_end>xml_div_end');\r
+ xmlString = xmlString.replace(TAG_CLOSE_PATTERN, '>');\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<xml_tagname_begin$1xml_tagname_end$2>');\r
- xmlString = xmlString.replace(TAG_END_PATTERN, '</xml_tagname_begin$1xml_tagname_end>xml_div_end');\r
- xmlString = xmlString.replace(TAG_CLOSE_PATTERN, '>');\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
- /*\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
- */\r
}, this);\r
- dataModel.requireContextChange(); \r
+ call.schedule(); \r
},\r
\r
_setAttributesSpanEditable : function(span){\r
var width = qx.bom.element.Dimension.getWidth(span);\r
var value = span.innerHTML;\r
qx.bom.element.Style.set(span, "display", "none");\r
- var input = qx.bom.Element.create("input", {value:value, style:'width:'+width+'px;'});\r
- qx.dom.Element.insertAfter(input, span); \r
+ var input = qx.bom.Element.create("input", {value:value, style:'width:'+width+'px;height:14px;border-width:1px;padding:0px;font-size:11px;'});\r
+ //var input = new qx.html.Input("text");\r
+ //input.setStyles({width:width+'px', height:'14px', borderWidth:'1px', padding:'0px', fontSize:'11px'}); \r
+ qx.dom.Element.insertAfter(input, span);\r
+ //input.setTextSelection(0);\r
},\r
\r
/**\r