c03df755b1cc681430340ee9386fd4df7c6f8436
[roojs1] / docs / Roo.docs.init.js
1
2
3 Roo.docs.init = {
4     
5     classes : false, // flat version of list of classes 
6     currentClass : '--none--', // currently viewed class name
7     
8     prefix : '',
9     hash : '',
10     
11     onReady : function()
12     {
13        
14         
15         Roo.XComponent.hideProgress = true;
16         Roo.XComponent.build();
17          
18         
19         Roo.XComponent.on('buildcomplete', function() {
20             
21             //Roo.XComponent.modules[0].el.fireEvent('render');
22             this.loadTree();
23         }, this);
24         if (window.location.search.length > 0) {
25             this.prefix = "/flutter/";
26             Roo.docs.roo_title.el.dom.innerHTML = "Flutter Documentation";
27         }
28         
29         window.onhashchange = function() { Roo.docs.init.onHashChange(); }
30          
31         
32     },
33     
34     loadTree: function()
35     {
36         Roo.docs.doc_body_content.hide();
37         
38         Roo.Ajax.request({
39             url : this.prefix + 'tree.json',
40             method : 'GET',
41             success : function(res, o)
42             {
43                 var d = Roo.decode(res.responseText);
44                 //Roo.log(d);
45                 this.classes = {};
46                 // our classes witch children first..
47                 d.forEach(function(e) {
48                     if (e.cn.length) {
49                         this.addTreeItem(Roo.docs.navGroup, e, 'NavSidebarItem', true );
50                         
51                     }
52                 }, this);
53                 
54                 d.forEach(function(e) {
55                     if (!e.cn.length) {
56                         this.addTreeItem(Roo.docs.navGroup, e, 'NavSidebarItem' ,true);
57                     }
58                 }, this);
59                 
60                 // mobile....
61                 
62                 d.forEach(function(e) {
63                     if (e.cn.length) {
64                         this.addTreeItem(Roo.docs.mobileNavGroup, e, 'NavSidebarItem', false);
65                         
66                     }
67                 }, this);
68                 
69                 d.forEach(function(e) {
70                     if (!e.cn.length) {
71                         this.addTreeItem(Roo.docs.mobileNavGroup, e, 'NavSidebarItem', false);
72                     }
73                 }, this);
74                 
75                 var roo = Roo.docs.navGroup.items[1].menu;
76                 if (!Roo.docs.init.prefix.length) {
77                     roo.show(roo.triggerEl, '?', false);
78                 }
79                 
80                 if (location.hash.length) {
81                     this.loadHash();
82                     return;
83                 }
84                 
85                 this.loadIntro();
86                 
87                 
88             },
89             scope : this
90         });
91         
92         
93     },
94     
95     hideChildren : function(c)
96     {
97         if (c.node.menu) {
98             c.node.menu.hide();
99         }
100         for (var i =0; i < c.cn.length; i++) {
101             this.hideChildren(c.cn[i]);
102         }
103         
104     },
105     
106     
107     addTreeItem : function(parent, e, type , parent_e) {
108         
109         this.classes[e.name] = e; 
110         // add a node..
111         var node = parent.addxtypeChild(Roo.factory({
112             html: e.name.split('.').pop(),
113            // id : e.name,
114             xns : Roo.bootstrap,
115             showArrow: false,
116             xtype : type,
117             preventDefault : true,
118           //  cls : type == 'NavSidebarItem' ? 'open' : '',
119             listeners : {
120                 click : (function(mi,ev,c)
121                 {
122                     
123                     ev.stopEvent();
124                      
125                     if (c.cn.length && mi.xtype == 'MenuItem') {
126                         //Roo.log(ev);
127                         if (mi.menu.el.hasClass('show')) {
128                             this.hideChildren(c); //mi.menu.hide();
129                             // collapse children..
130                             
131                             
132                             
133                         } else {
134                             mi.menu.show(mi.menu.triggerEl,'?', false);
135                         }
136                         
137                     }
138                     location.hash = '#' + c.name;
139                     //Roo.docs.init.loadDoc(c);
140                     
141                 }).createDelegate(this,[e], true)
142                 
143             },
144             fa :  e.cn.length  ? 'chevron-right' : '',
145             menu : !e.cn.length ? false  : Roo.factory({
146                 type : 'treeview',
147                 xns: Roo.bootstrap,
148                 xtype : 'Menu',
149                 listeners : {
150                     beforehide : (function(mi,c)
151                     {
152                         if (Roo.docs.init.prefix.length) {
153                             return;
154                         }
155                         
156                         if (c.name.split('.').length < 2)  {
157                             return false;
158                         }
159                         return true;
160                         
161                     }).createDelegate(this,[e], true)
162                     
163                 }
164                 
165             })
166         }));
167         
168         // mobile nodes..?
169         
170        
171         
172         
173         
174         
175         if (parent_e !== false) {
176             e.node = node;
177             e.parent_menu = parent;
178             e.parent = parent_e == true ? null : parent_e;
179         }
180         
181         parent.items.push(node);
182         if (e.cn.length  && type == 'NavSidebarItem') {
183             this.topm = node.menu;
184         }
185         
186         
187         if (!e.cn.length) {
188             return;
189         }
190         e.cn.forEach(function(ec) {
191             var cn = ec.name.split('.').pop();
192             //Roo.log(cn);
193             if (cn == cn.toLowerCase()) {
194                 this.addTreeItem(node.menu, ec,'MenuItem', parent_e !== false ? e : false);
195             }
196             
197         }, this);
198         e.cn.forEach(function(ec) {
199             var cn = ec.name.split('.').pop();
200             if (cn != cn.toLowerCase()) {
201                 this.addTreeItem(node.menu, ec,'MenuItem', parent_e !== false ? e : false);
202             }
203         }, this);
204         
205     },
206     
207     loadClass : function(name)
208     {
209         if(typeof(this.classes[name]) != 'undefined' && this.classes[name].is_class ) {
210             this.loadDoc(this.classes[name]);
211         }
212         
213         
214         
215     },
216     
217     loadSource : function( )
218     {
219         
220        
221         Roo.Ajax.request({
222             url : 'src/' +this.currentClass.replace(/\./g,'_') + '.js.html',
223             method : 'GET',
224             success : function(res, o)
225             {
226                 Roo.docs.ViewSource.show({
227                         source : res.responseText,
228                         fname : this.currentClass.replace(/\./g,'/') + ".js"
229                 });
230                 
231             },
232             scope : this
233         });
234         
235         
236     },
237     
238     loadDoc : function(cls)
239     {
240         if (this.currentClass == cls.name) {
241             return;
242         }
243         //Roo.docs.mobileNavGroup.hide();
244         Roo.log("loadDoc?");
245         Roo.docs.doc_body_content.hide();
246         Roo.docs.navHeaderBar.collapse();
247         this.currentClass = cls.name;
248         if (!cls ) {
249             Roo.docs.introBody.show();
250             return;
251         }
252         
253         // expand parents..
254         
255         var m = cls.parent_menu;
256         m.show(m.triggerEl,'?', false);
257         var mp = cls;
258         while ((mp = mp.parent)) {
259             m = mp.parent_menu;
260             m.show(m.triggerEl,'?', false);
261         }
262         cls.node.el.scrollIntoView(Roo.docs.sidebar.el,false);
263         Roo.docs.sidebar.el.select('.active').removeClass('active');
264         cls.node.el.addClass('active');
265         
266         Roo.docs.introBody.hide();
267         Roo.docs.doc_body_content.show();
268         Roo.Ajax.request({
269             url : this.prefix + 'symbols/' + cls.name + '.json',
270             method : 'GET',
271             success : function(res, o)
272             {
273                 
274                 var d = Roo.decode(res.responseText);
275                 
276                 if (typeof(d.augments) == 'undefined') {
277                     d.augments = [];
278                     d.config = []; // props for ctor?
279                     d.isFlutter  = true;
280                     d.config= d.props; // hack..
281                     Roo.docs.init.n = 0;
282                     this.fillAugments(d, d.extends, Roo.docs.init.fillDoc);
283                     return;
284                 }
285                 this.fillDoc(d);
286                 
287                 
288                 
289             },
290             scope : this
291         });
292         
293     },
294     n : 0,
295     fillAugments : function(d, ext, cb )
296     {
297         Roo.docs.init.n++;
298         if (Roo.docs.init.n > 20) {
299             return;
300         }
301         if (!ext.length) {
302             cb(d);
303             return;
304         }
305         var next = ext.shift();
306         d.augments.push(next);
307         var ax =   new Roo.data.Connection({});
308         ax.request({
309             url : this.prefix + 'symbols/' + next + '.json',
310             method : 'GET',
311             success : function(res, o)
312             {
313                 
314                 var r = Roo.decode(res.responseText);
315                 
316                 
317                     // copy methods that are not constructors..
318                 
319                 r.methods.forEach(function(m) {
320                     
321                     if (d.methods.find(function(e) {
322                         return e.name == m.name;
323                     })) {
324                         return;
325                     }
326                     if (m.isConstructor || m.static) {
327                         return;
328                     }
329                     d.methods.push(m);  
330                 });
331                 
332                 r.props.forEach(function(m) {
333                     if (m.isConstant) {
334                         return;
335                     }
336                     if (d.props.find(function(e) {
337                         return e.name == m.name;
338                     })) {
339                         return;
340                     }
341                     
342                     d.props.push(m);  
343                 });
344                 
345                 r.events.forEach(function(m) {
346                     if (d.events.find(function(e) {
347                         return e.name == m.name;
348                     })) {
349                         return;
350                     }
351                     d.events.push(m);  
352                 });
353             
354                 this.fillAugments(d,ext, cb)
355                 
356             },
357             scope : this
358         });
359         
360     },
361     
362     
363     
364     fillDoc : function(d)
365     {
366         /*{
367             "name" : "Roo.bootstrap.Progress",
368             "augments" : [
369               "Roo.bootstrap.Component",
370               "Roo.Component",
371               "Roo.util.Observable"
372             ],
373             "desc" : "Bootstrap Progress class",
374             "config" : [
375               {
376         */
377         document.body.scrollTop  = 0;
378         Roo.docs.doc_name.el.dom.innerHTML = Roo.docs.template.resolveLinks(d.name);
379         Roo.docs.doc_desc.el.dom.innerHTML = Roo.docs.template.summary(d);
380         Roo.docs.doc_extends.hide();
381         Roo.docs.doc_extends_sep.hide();
382         if (d.augments.length) {
383             Roo.docs.doc_extends.show();
384             Roo.docs.doc_extends_sep.show();
385             Roo.docs.doc_extends.el.dom.innerHTML = d.augments[0];
386             Roo.docs.doc_extends.el.dom.href= '#' + d.augments[0];
387         }
388         Roo.docs.doc_source.el.dom.innerHTML = d.name.replace(/\./g,"/") + ".js";
389         if (Roo.docs.init.prefix.length) {
390             Roo.docs.doc_source_row.hide();
391         }
392         
393         
394         if (d.augments.length) {
395             Roo.docs.augments.show();
396             Roo.docs.augments.bodyEl().dom.innerHTML = Roo.docs.template.augments(d);
397         } else {
398             Roo.docs.augments.hide();
399         }
400         
401         
402         
403         Roo.docs.configTableContainer.hide();
404         Roo.docs.methodsTableContainer.hide();
405         Roo.docs.eventsTableContainer.hide();
406         if (d.config.length) {
407             Roo.docs.configTableContainer.show();
408             Roo.docs.configTable.store.load( { params : { data : d.config.sort(Roo.docs.template.makeSortby("name")) }});
409         } 
410         
411         if (d.methods.length) {
412             Roo.docs.methodsTable.store.load( { params : { data : Roo.docs.template.methodsSort(d) }});
413             Roo.docs.methodsTableContainer.show();
414         }
415         if (d.events.length) {
416             Roo.docs.eventsTable.store.load( { params : { data : d.events.sort(Roo.docs.template.makeSortby("name")) }});
417             Roo.docs.eventsTableContainer.show();
418         }
419         
420         
421     },
422     onClick : function(e)
423     {
424         if (e.target.nodeName != 'A') {
425             return;
426         }
427         if (!e.target.href.match(/#/)) {
428             return;
429         }
430         e.stopPropagation();
431         var link = e.target.href.split('#')[1];
432         this.loadClass(link);
433         
434     },
435     
436     onHashChange : function()
437     {
438         if (this.hash == location.hash) {
439             return;
440         }
441         this.loadHash();
442         
443     },
444     loadHash : function()
445     {
446         if (location.hash.length < 2) {
447             this.loadDoc(false);
448         }
449         this.loadClass(location.hash.substring(1));
450         this.hash = location.hash;
451     },
452     
453       
454     loadIntro : function()
455     {
456       
457         
458         Roo.Ajax.request({
459             url : 'summary.txt',
460             method : 'GET',
461             success : function(res)
462             {
463                 this.renderIntro(res.responseText);
464                
465                 
466             },
467             scope : this
468         });
469         
470         
471     },
472     // render the really simple markdown data
473     renderIntro : function(intro)
474     {
475         
476         Roo.docs.doc_body_content.hide();
477
478         
479         var lines = intro.split("\n");
480         var tree = { 'name' : 'root', cn : []};
481         var state = [ tree ];
482         for (var i=0;i< lines.length;i++) {
483             var line = lines[i];
484             if (!line.length || line.match(/^\s+$/)) {
485                 continue;
486             }
487             var sm = line.match(/^(\s+)(.*)/);
488             
489             var sml = sm ? sm[1].length: 0;
490             //Roo.log(sml);
491             sml = sml / 4; // 4 spaces indent?
492             var add = { name : sm ?  sm[2] : line, cn : [] };
493             state[sml].cn.push(add);
494             state[sml+1] = add;
495             
496         }
497         //Roo.log(tree);
498         
499         for(var i = 0; i < tree.cn.length; i++) {
500             // make a container..
501             var treei = tree.cn[i];
502             var ctree = {
503                 
504                 xtype : 'Column',
505                 xns : Roo.bootstrap,
506                 md:4,
507                 sm : 6,
508                 items : [ {
509                     header : treei.name,
510                     xtype : 'Container',
511                     panel : 'info',
512                     xns : Roo.bootstrap,
513                     items : []
514                 }]
515             };
516             for(var ii = 0; ii < treei.cn.length; ii++) {
517                 var treeii = treei.cn[ii];
518                 // another container..
519                var ctreei = {
520                     header : treeii.name,
521                     xtype : 'Container',
522                     panel : 'primary',
523                     xns : Roo.bootstrap,
524                   
525                     items : [
526                          {
527                             xtype : 'Element',
528                             tag :'ul',
529                            
530                             xns : Roo.bootstrap,
531                             items : []
532                          }
533                     ]
534                 };
535                 ctree.items[0].items.push(ctreei);
536                 var footer = '';
537                 for(var iii = 0; iii < treeii.cn.length; iii++) {
538                     var treeiii = treeii.cn[iii];
539                     var ll = treeiii.name.match(/^(\S+)\s*(.*)$/);
540                     //Roo.log(treeiii.name);
541                     if (treeiii.name == 'Examples') {
542                         for (var j =0;j< treeiii.cn.length; j++) {
543                             var exs = treeiii.cn[j].name.match(/^\[([^\]]+)\](.*)$/);
544                             footer += '<li><a target="_blank" href="../' + exs[1] + '">'+exs[2] + '</a></li>';
545                         }
546                         continue;
547                         
548                         
549                     }
550         
551         
552
553                     ctreeii = {
554                             xtype : 'Element',
555                             tag :'li',
556                             xns : Roo.bootstrap,
557                             items : [
558                                 {
559                                    xtype : 'Link',
560                                     href : '#' + ( ll ? ll[1] : treeiii.name ) ,
561                                     html : ll ? ll[1] : treeiii.name,
562                                     
563                                     xns : Roo.bootstrap 
564                                 },
565                                 {
566                                    xtype : 'Element',
567                                     tag : 'span',
568                                     html : ll && ll[2].length ? ' - ' + ll[2] : '',
569                                     xns : Roo.bootstrap 
570                                 }
571                             ]
572                             
573                             
574                             
575                     };
576                     ctreei.items.push(ctreeii);
577                     
578                 }
579                 if (footer.length) {
580                     //Roo.log("footer:"+  footer);
581                     ctreei.footer = '<h5>Examples:</h5><ul>'+footer +'</ul>';
582                 }
583         
584             }
585             
586             
587             
588             
589             
590             Roo.docs.introBody.addxtypeChild(ctree);
591         }
592         
593         
594         
595     }
596     
597     
598     
599 };
600
601
602 Roo.onReady(Roo.docs.init.onReady, Roo.docs.init);
603     
604