1 //<script type="text/javascript">
4 // IPC: - via alert("IPC:{method}:{data}
7 Roo.XComponent.on("buildcomplete", function() {
9 Builder.saveHTML.defer(100);
12 var MODULE = { isBuilder : true };
25 saveHTML : function( )
27 //print("TRAVERSE DOM?");
29 var dom = document.body;
32 //Roo.select('body > div',true).each(function(el) {
33 // if the tree is not ready yet?
36 this.traverseDOMTree(function(s) { ret+=s; }, dom, 1);
37 alert("IPC:SAVEHTML:" + ret);
42 traverseDOMTree : function(cb, currentElement, depth) {
43 if (!currentElement) {
47 console.log(currentElement);
48 if (currentElement.className.match(/roo-dynamic/)) {
52 //Roo.log(currentElement);
54 var nodeName = currentElement.nodeName;
55 var tagName = currentElement.tagName;
57 if (nodeName == '#text') {
58 cb(currentElement.nodeValue);
69 if (nodeName != 'BODY') {
74 // Prints the node tagName, such as <A>, <IMG>, etc
77 for(i = 0; i < currentElement.attributes.length;i++) {
78 var aname = currentElement.attributes.item(i).name;
83 if (currentElement.attributes.item(i).value == 'builderel') {
86 attr.push(aname + '="' + currentElement.attributes.item(i).value + '"' );
90 cb("<"+currentElement.tagName+ ( attr.length ? (' ' + attr.join(' ') ) : '') + ">");
98 if (currentElement.hasAttribute('flexy:include')) {
99 cb( tagName ? "</"+tagName+">" : '');
104 var currentElementChild = currentElement.childNodes.item(i);
106 while (currentElementChild) {
107 // Formatting code (indent the tree so it looks nice on the screen)
109 if (currentElementChild.nodeName == '#text') {
110 cb(currentElementChild.nodeValue);
112 currentElementChild=currentElement.childNodes.item(i);
117 for (j = 0; j < depth; j++) {
118 // ¦ is just a vertical line
123 // Recursively traverse the tree structure of the child node
124 this.traverseDOMTree(cb, currentElementChild, depth+1);
126 currentElementChild=currentElement.childNodes.item(i);
129 // The remaining code is mostly for formatting the tree
131 for (j = 0; j < depth - 1; j++) {
136 cb("</"+tagName+">");
142 // this lot is to deal with draging // selecting? - not used at present
146 findNode : function(ftg , method) {
150 // console.log(ftg.id);
151 if (ftg.id && typeof(ftg.id) == 'string' && ftg.id.match(/builder-/)) {
152 var nid = ftg.id.replace('builder-', '').replace('x-form-el-', '');
157 if (ftg.dom.className.match(/[0-9]+/)) {
158 //console.log(ftg.dom.className);
159 var cmat = ftg.dom.className.match(/x-grid-hd-builder-(form-gen-[0-9:]+)/);
161 this[method]( cmat[1] );
172 overPos: function(x,y)
175 var el = document.elementFromPoint(x,y);
176 // //console.log(el.id);
177 // console.log(document.body.innerHTML);
179 getTarget : function () {
182 stopEvent : function() {
189 onclick: function(e) {
190 var tg = Roo.get(e.getTarget());
192 //console.log('no target');
196 if (this.findNode(tg,'logClick')) {
199 var dp = Roo.get(tg.up(''));
200 if (dp && this.findNode(dp,'logClick')) {
204 var ns = Roo.get(tg.getNextSibling());
205 if (ns && this.findNode(ns,'logClick')) {
209 if (ns && ns.down('') && this.findNode(Roo.get(ns.down('')) ,'logClick') ) {
213 for(var i =0; i < 5; i++) {
214 tg = Roo.get(tg.up(''));
216 //console.log('no parent' + i);
219 if (tg && this.findNode(tg,'logClick')) {
223 //console.log('no target in parents');
226 logClick : function(id)
228 var bid = id.length ? 'builder-' + id : '';
229 console.log('{ "id" : "' + bid + '"}');
233 hover : function(e) {
236 var tg = Roo.get(e.getTarget());
238 //console.log('no target');
243 if (this.findNode(tg,'logMove')) {
247 var dp = Roo.get(tg.up(''));
248 if (dp && this.findNode(dp,'logMove')) {
253 var ns = Roo.get(tg.getNextSibling());
254 if (ns && this.findNode(ns,'logMove')) {
258 if (ns && ns.down('') && this.findNode(Roo.get(ns.down('')) ,'logMove' )) {
263 for(var i =0; i < 5; i++) {
264 tg = Roo.get(tg.up(''));
266 //console.log('no parent' + i);
270 if (tg && this.findNode(tg,'logMove')) {
275 //console.log('no target in parents');
278 logMove : function (id) {
279 //console.log("LOGMOVE: " + id);
281 if (this.lastID === id) {
285 var bid = id.length ? 'builder-' + id : '';
286 console.log('{ "hover-node" : "' + bid + '"}');
289 clearBootstrap : function()
291 // if the page is not bootstrap
293 if ( typeof(BuilderUseBootstrap) != 'undefined' ) {
294 Roo.log("it's boostrap - BuilderUseBootstrap is defined ");
295 // it's bootstrap - probably remove roo's css..
298 Roo.log("remove css = BuilderUseBootstrap is not defined");
300 var ar = document.getElementsByTagName('link');
301 for (var i = 0; i < ar.length;i++) {
303 Roo.log(l.getAttribute('href'));
304 if (l.getAttribute('href').match(/bootstrap/)) {
311 Roo.each(rem, function(l) { l.parentNode.removeChild(l);});
314 applyFlexy: function(tree)
316 if (typeof(tree['flexy:foreach']) != 'undefined') {
317 //Roo.log("add flexy:foreach");
318 tree.el.attr('flexy:foreach', tree['flexy:foreach']);
320 if (typeof(tree['flexy:if']) != 'undefined') {
321 //Roo.log("add flexy:if");
322 tree.el.attr('flexy:if', tree['flexy:if']);
324 if (typeof(tree['xtype-bootstrap']) != 'undefined') {
325 //Roo.log("add flexy:if");
326 tree.el.attr('xtype', tree['xtype-bootstrap']);
329 if (typeof(tree['flexy:include']) != 'undefined') {
330 //Roo.log("add flexy:if");
331 tree.el.attr('flexy:include', tree['flexy:include']);
334 if (!tree.items || !tree.items.length) { return; }
336 for (var i = 0; i < tree.items.length; i++){
337 this.applyFlexy(tree.items[i]);
344 Roo.onReady(function() { Builder.clearBootstrap(); });
345 Roo.XComponent.on('buildcomplete', function() {
346 Roo.log("xcomponent built!");
347 var m = Roo.XComponent.modules;
348 Builder.applyFlexy(m[m.length-1].el);