1 //<Script type="text/javascript">
3 console = imports.console;
4 XObject = imports.XObject.XObject;
6 Lang = imports.Builder.Provider.File.Lang.Lang;
8 File = imports.File.File;
11 Base = XObject.define(
15 XObject.extend(this, cfg);
21 name : false, // is the JS name of the file.
22 path : '', // is the full path to the file.
23 parent : false, // JS parent.
25 title : false, // a title.. ?? nickname.. ??? -
26 project: false, // name...
27 Project : false, // link to container project!
29 items : false, // the tree of nodes.
31 cn : false, // array used by project tree.
38 var write = this.toJsonArray()
39 print("WRITE: " + this.path);// + "\n" + JSON.stringify(write));
40 File.write(this.path, JSON.stringify(write));
45 * { success : , failure : , scope : }
51 getTree : function( o ) {
52 console.log("File.getTree tree called on base object?!?!");
54 toJsonArray : function()
58 ['id', 'name', 'parent', 'title', 'path', 'items'].forEach( function(k) {
68 return this.path.split('/').pop();
71 getTitleTip: function()
74 return '<b>' + this.title + '</b> ' + this.path;
80 this.cn.sort(function(a,b) {
81 return a.path > b.path;// ? 1 : -1;
84 // should be in palete provider really..
86 guessName : function(ar) // turns the object into full name.
88 // eg. xns: Roo, xtype: XXX -> Roo.xxx
89 if (typeof( ar['|xns'] ) == 'undefined' || typeof( ar['xtype'] ) == 'undefined') {
93 return ar['|xns'] +'.' + ar['xtype'];
100 toSourceStdClass: function()
102 var cfg = this.items[0]
103 var fcfg = XObject.extend({ }, this.items[0]);
104 delete fcfg['*class'];
105 delete fcfg['*extends'];
106 delete fcfg['*static'];
107 delete fcfg['|constructor'];
109 var hasExtends = (typeof(cfg['*extends']) != 'undefined') && cfg['*extends'].length;
110 var hasConstructor = (typeof(cfg['|constructor']) != 'undefined');
111 var isStatic = (typeof(cfg['*static']) == '*static');
116 newline = hasConstructor ?
119 cfg['//constructor'] + "\n" +
120 cfg['*class'] + " = " + cfg['|constructor'] + "\n\n"+
121 "Roo.extend(" + cfg['*class'] + ":, " + cfg['*extends'] + ", " :
123 cfg['//*class'] + "\n" +
124 cfg['*class'] + " = new " + cfg['*extends'] + "(" ;
131 newline = hasConstructor ?
133 cfg['//constructor'] + "\n" +
134 cfg['*class'] + " = " + cfg['|constructor'] + "\n\n"+
135 'Roo.apply( ' + cfg['*class'] + ".prototype , " :
137 cfg['//*class'] + "\n" +
138 cfg['*class'] + " = ";
141 endline = hasConstructor ? ');' : ';';
144 return this.outputHeader() +
146 this.objectToJsString(fcfg,1) +
155 copyTo: function(path, cb)
158 this.loadItems(function() {
168 * munge JSON tree into Javascript code.
170 * FIXME: + or / prefixes to properties hide it from renderer.
171 * FIXME: '*props' - not supported by this.. ?? - upto rendering code..
176 mungeToString: function(obj, isListener, pad)
181 isListener = isListener || false;
183 // am I munging a object or array...
184 if (obj.constructor.toString() === Array.toString()) {
185 for (var i= 0; i < obj.length; i++) {
199 typeof(obj['|xns']) != 'undefined' &&
200 typeof(obj['xtype']) != 'undefined'
202 els.push('xtype: '+ obj['|xns'] + '.' + obj['xtype']);
203 skip.push('|xns','xtype');
210 keys.forEach(function(i) {
212 if (!isArray && skip.indexOf(i) > -1) { // things we do not write..
217 if (!_this.withDebug) {
218 // do not write listeners unless we are debug mode.
221 //if (obj[i].match(new RegExp("Gtk.main" + "_quit"))) { // we can not handle this very well..
224 var str= ('' + obj[i]).replace(/^\s+|\s+$/g,"");
225 var lines = str.split("\n");
226 if (lines.length > 1) {
227 str = lines.join("\n" + pad);
229 els.push(JSON.stringify(i) + ":" + str);
235 var left = isArray ? '' : (JSON.stringify(i) + " : " )
238 // does not hapepnd with arrays..
239 if (typeof(el) == 'string' && !obj[i].length) { //skip empty.
242 // this needs to go...
243 //if (typeof(el) == 'string' && obj[i].match(new RegExp("Gtk.main" + "_quit"))) { // we can not handle this very well..
247 var str= ('' + obj[i]).replace(/^\s+|\s+$/g,"");;
248 var lines = str.split("\n");
249 if (lines.length > 1) {
250 str = lines.join("\n" + pad);
253 els.push(left + str);
260 if (typeof(el) == 'object') {
261 els.push(left + _this.mungeToString(el, i == 'listeners', pad + ' '));
266 els.push(left + JSON.stringify(obj[i]));
270 var spad = pad.substring(0, pad.length-4);
271 return (isArray ? '[' : '{') + "\n" +
272 pad + els.join(",\n" + pad ) +
273 "\n" + spad + (isArray ? ']' : '}');
282 objectToJsString : function (o, ind)
288 var ix = new Array(ind+1).join(" ");
289 var ix1 = new Array(ind).join(" ");
292 if (k[0] == '+') { // + means hide from renderer.. we do not save this.
295 if (k[0] == '/') { // means hide from renderer.. we prefix the col with it..
300 if (typeof(v) == 'object') {
302 if ((v.constructor != Array) && !this.objectKeys(v).length) {
305 if ((v.constructor == Array) && !v.length && k == 'items') {
309 ret += ret.length ? ",\n" : '';
311 var kk = k[0] == '|' ? k.substring(1) : k;
312 if (typeof(o['//' + kk]) != 'undefined') {
313 ret += ix + o['//' + kk].split("\n").join( "\n" + ix) + "\n";
318 if (v.constructor == Array) {
319 ret += ix + this.toJsProp(k) + ' : ' + this.arrayToJsString(v, ind+1);
324 ret += ix + this.toJsProp(k) + ' : ' + this.objectToJsString(v, ind+1);
328 ret += ix + this.toJsProp(k) + ' : ' + (v ? 'true' : 'false');
332 ret += ix + this.toJsProp(k) + ' : ' + v;
338 ret += ix + this.toJsProp(k) + ' : ' + v.split("\n").join( "\n" + ix);
344 // we should use special stuff here to determine if it's a singly or dobuley
346 ret += ix + this.toJsProp(k) + ' : ' + this.stringToJsString(v, k, o);
352 return "{\n" + ret + "\n" + ix1 + '}';
355 arrayToJsString : function (ar, ind)
358 ar.forEach( function(o) {
359 if (typeof(o) == 'object' && (o.constructor != Array)) {
368 ix = new Array(ind+1).join(" ");
369 ix1 = new Array(ind).join(" ");
377 ar.forEach( function(v, n) {
378 // skip blank last element in an array
379 if ((n == (ar.length -1)) && typeof(v) == 'undefined') {
383 // empty objects in array?
384 if (typeof(v) == 'object' && v.constructor != Array) {
385 if (!_this.objectKeys(v).length) {
391 ret += ret.length ? cr : '';
396 if (v.constructor == Array) {
398 ret += ix + _this.arrayToJsString(v, ind+1);
402 ret += ix + _this.objectToJsString(v, ind+1);
406 ret += ix + (v ? 'true' : 'false');
416 ret += ix + v.split("\n").join( "\n" + ix);
422 // we should use special stuff here to determine if it's a singly or dobuley
424 ret += ix + JSON.stringify(v);
431 return "[" + lb + ret + lb + ix1 + "]";
434 stringToJsString : function(v, k , o) {
435 // since most properties can use single quotes (non-translatable)
436 // we try to fix this here..
437 var val = JSON.stringify(v);
438 if (['xns', 'xtype' ].indexOf(k) > -1) {
439 return "'" + val.substring(1, val.length-1).replace(/'/, "\\'") + "'";
447 toJsProp: function(v) {
448 var vv = v[0] == '|' ? v.substring(1) : v;
449 if (Lang.isKeyword(vv) || Lang.isBuiltin(vv)) {
450 return "'" + vv + "'";
452 if (vv.match(/[^A-Z_]+/i)) {
453 var val = JSON.stringify(vv);
454 return "'" + val.substring(1, val.length-1).replace(/'/, "\\'") + "'";