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