Fix #5657 - Summary page for documentation
[roojs1] / docs / Roo.docs.init.js
1
2
3 Roo.docs.init = {
4     
5     classes : false, // flat version of list of classes 
6     currentClass : '', // currently viewed class name
7     
8     
9     onReady : function()
10     {
11        
12         //if (typeof(pagedata) == 'undefined') {
13         //    Site.onReady.defer(100, Roo.docs.init);
14         //    return;
15         //}
16         //Roo.debug = 1;
17         
18         Roo.XComponent.hideProgress = true;
19         Roo.XComponent.build();
20         
21         
22         
23         
24         Roo.XComponent.on('buildcomplete', function() {
25             
26             //Roo.XComponent.modules[0].el.fireEvent('render');
27              this.loadTree();
28         }, this);
29         Roo.get(document.body).on('click', this.onClick, this);
30       
31         
32     },
33     
34     loadTree: function()
35     {
36         Roo.docs.doc_body_content.hide();
37         
38         Roo.Ajax.request({
39             url : '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');
50                         
51                     }
52                 }, this);
53                 
54                 d.forEach(function(e) {
55                     if (!e.cn.length) {
56                         this.addTreeItem(Roo.docs.navGroup, e, 'NavSidebarItem');
57                     }
58                 }, this);
59                 var roo = Roo.docs.navGroup.items[1].menu;
60                 roo.show(roo.triggerEl, '?', false);
61                 this.loadIntro();
62                 
63                 
64             },
65             scope : this
66         });
67         
68         
69     },
70     addTreeItem : function(parent, e, type) {
71         
72         this.classes[e.name] = e; 
73         // add a node..
74         var node = parent.addxtypeChild(Roo.factory({
75             html: e.name.split('.').pop(),
76             id : e.name,
77             xns : Roo.bootstrap,
78             showArrow: false,
79             xtype : type,
80             preventDefault : true,
81           //  cls : type == 'NavSidebarItem' ? 'open' : '',
82             listeners : {
83                 click : (function(mi,ev,c)
84                 {
85                     
86                     ev.stopPropagation();
87                      
88                     if (c.cn.length) {
89                         Roo.log(ev);
90                         if (mi.menu.el.hasClass('show')) {
91                             mi.menu.hide();
92                         } else {
93                             mi.menu.show(mi.menu.triggerEl,'?', false);
94                         }
95                         
96                     }
97                     
98                     Roo.docs.init.loadDoc(c);
99                     
100                 }).createDelegate(this,[e], true)
101                 
102             },
103             fa :  e.cn.length  ? 'chevron-right' : '',
104             menu : !e.cn.length ? false  : Roo.factory({
105                 type : 'treeview',
106                 xns: Roo.bootstrap,
107                 xtype : 'Menu',
108                 listeners : {
109                     beforehide : (function(mi,c)
110                     {
111                         if (c.name.split('.').length < 2) {
112                             return false;
113                         }
114                         return true;
115                         
116                     }).createDelegate(this,[e], true)
117                     
118                 }
119                 
120             })
121         }));
122         parent.items.push(node);
123         if (e.cn.length  && type == 'NavSidebarItem') {
124             this.topm = node.menu;
125         }
126         
127         
128         if (!e.cn.length) {
129             return;
130         }
131         e.cn.forEach(function(ec) {
132             var cn = ec.name.split('.').pop();
133             Roo.log(cn);
134             if (cn == cn.toLowerCase()) {
135                 this.addTreeItem(node.menu, ec,'MenuItem');
136             }
137             
138         }, this);
139         e.cn.forEach(function(ec) {
140             var cn = ec.name.split('.').pop();
141             if (cn != cn.toLowerCase()) {
142                 this.addTreeItem(node.menu, ec,'MenuItem');
143             }
144         }, this);
145         
146     },
147     
148     loadClass : function(name)
149     {
150         if(typeof(this.classes[name]) != 'undefined') {
151             this.loadDoc(this.classes[name]);
152         }
153         
154         
155         
156     },
157     
158     loadSource : function( )
159     {
160         
161        
162         Roo.Ajax.request({
163             url : 'src/' +this.currentClass.replace(/\./g,'_') + '.js.html',
164             method : 'GET',
165             success : function(res, o)
166             {
167                 Roo.docs.ViewSource.show({
168                         source : res.responseText,
169                         fname : this.currentClass.replace(/\./g,'/') + ".js"
170                 });
171                 
172             },
173             scope : this
174         });
175         
176         
177     },
178     
179     loadDoc : function(cls)
180     {
181         Roo.docs.doc_body_content.hide();
182         this.currentClass = cls.name;
183         if (!cls.is_class) {
184             Roo.docs.introBody.show();
185             return;
186         }
187         Roo.docs.introBody.hide();
188         Roo.docs.doc_body_content.show();
189         Roo.Ajax.request({
190             url : 'symbols/' + cls.name + '.json',
191             method : 'GET',
192             success : function(res, o)
193             {
194                 var d = Roo.decode(res.responseText);
195                 this.fillDoc(d);
196                 
197             },
198             scope : this
199         });
200         
201         
202     },
203     
204     fillDoc : function(d)
205     {
206         /*{
207             "name" : "Roo.bootstrap.Progress",
208             "augments" : [
209               "Roo.bootstrap.Component",
210               "Roo.Component",
211               "Roo.util.Observable"
212             ],
213             "desc" : "Bootstrap Progress class",
214             "config" : [
215               {
216         */
217         document.body.scrollTop  = 0;
218         for (var k in d) {
219             if (typeof(Roo.docs['doc_' + k])  !=  'undefined') {
220                 Roo.docs['doc_' + k].el.dom.innerHTML = Roo.docs.template.resolveLinks(d[k]);;
221             }
222         }
223         Roo.docs.doc_extends.hide();
224         Roo.docs.doc_extends_sep.hide();
225         if (d.augments.length) {
226             Roo.docs.doc_extends.show();
227             Roo.docs.doc_extends_sep.show();
228             Roo.docs.doc_extends.el.dom.innerHTML = d.augments[0];
229         }
230         Roo.docs.doc_source.el.dom.innerHTML = d.name.replace(/\./g,"/") + ".js";
231         
232         if (d.augments.length) {
233             Roo.docs.augments.show();
234             Roo.docs.augments.bodyEl().dom.innerHTML = Roo.docs.template.augments(d);
235         } else {
236             Roo.docs.augments.hide();
237         }
238         
239         
240         
241         Roo.docs.configTableContainer.hide();
242         Roo.docs.methodsTableContainer.hide();
243         Roo.docs.eventsTableContainer.hide();
244         if (d.config.length) {
245             Roo.docs.configTableContainer.show();
246             Roo.docs.configTable.store.load( { params : { data : d.config.sort(Roo.docs.template.makeSortby("name")) }});
247         } 
248         
249         if (d.methods.length) {
250             Roo.docs.methodsTable.store.load( { params : { data : Roo.docs.template.methodsSort(d) }});
251             Roo.docs.methodsTableContainer.show();
252         }
253         if (d.events.length) {
254             Roo.docs.eventsTable.store.load( { params : { data : d.events.sort(Roo.docs.template.makeSortby("name")) }});
255             Roo.docs.eventsTableContainer.show();
256         }
257         
258         
259     },
260     onClick : function(e)
261     {
262         if (e.target.nodeName != 'A') {
263             return;
264         }
265         if (!e.target.href.match(/#/)) {
266             return;
267         }
268         e.stopPropagation();
269         var link = e.target.href.split('#')[1];
270         this.loadClass(link);
271         
272     },
273       
274     loadIntro : function()
275     {
276       
277         
278         Roo.Ajax.request({
279             url : 'summary.txt',
280             method : 'GET',
281             success : function(res)
282             {
283                 this.renderIntro(res.responseText);
284                
285                 
286             },
287             scope : this
288         });
289         
290         
291     },
292     // render the really simple markdown data
293     renderIntro : function(intro)
294     {
295         var lines = intro.split("\n");
296         var tree = { 'name' : 'root', cn : []};
297         var state = [ tree ];
298         for (var i=0;i< lines.length;i++) {
299             var line = lines[i];
300             if (!line.length || line.match(/^\s+$/)) {
301                 continue;
302             }
303             var sm = line.match(/^(\s+)(.*)/);
304             
305             var sml = sm ? sm[1].length: 0;
306             Roo.log(sml);
307             sml = sml / 4; // 4 spaces indent?
308             var add = { name : sm ?  sm[2] : line, cn : [] };
309             state[sml].cn.push(add);
310             state[sml+1] = add;
311             
312         }
313         Roo.log(tree);
314         
315         for(var i = 0; i < tree.cn.length; i++) {
316             // make a container..
317             var treei = tree.cn[i];
318             var ctree = {
319                 
320                 xtype : 'Column',
321                 xns : Roo.bootstrap,
322                 md:4,
323                 sm : 6,
324                 items : [ {
325                     header : treei.name,
326                     xtype : 'Container',
327                     panel : 'info',
328                     xns : Roo.bootstrap,
329                     items : []
330                 }]
331             };
332             for(var ii = 0; ii < treei.cn.length; ii++) {
333                 var treeii = treei.cn[ii];
334                 // another container..
335                var ctreei = {
336                     header : treeii.name,
337                     xtype : 'Container',
338                     panel : 'primary',
339                     xns : Roo.bootstrap,
340                   
341                     items : [
342                          {
343                             xtype : 'Element',
344                             tag :'ul',
345                            
346                             xns : Roo.bootstrap,
347                             items : []
348                          }
349                     ]
350                 };
351                 ctree.items[0].items.push(ctreei);
352                 var footer = '';
353                 for(var iii = 0; iii < treeii.cn.length; iii++) {
354                     var treeiii = treeii.cn[iii];
355                     var ll = treeiii.name.match(/^(\S+)\s*(.*)$/);
356                     //Roo.log(treeiii.name);
357                     if (treeiii.name == 'Examples') {
358                         for (var j =0;j< treeiii.cn.length; j++) {
359                             var exs = treeiii.cn[j].name.match(/^\[([^\]]+)\](.*)$/);
360                             footer += '<li><a href="../' + exs[1] + '">'+exs[2] + '</a></li>';
361                         }
362                         continue;
363                         
364                         
365                     }
366         
367         
368
369                     ctreeii = {
370                             xtype : 'Element',
371                             tag :'li',
372                             xns : Roo.bootstrap,
373                             items : [
374                                 {
375                                    xtype : 'Link',
376                                     href : '#' + ( ll ? ll[1] : treeiii.name ) ,
377                                     html : ll ? ll[1] : treeiii.name,
378                                     xns : Roo.bootstrap 
379                                 },
380                                 {
381                                    xtype : 'Element',
382                                     tag : 'span',
383                                     html : ll && ll[2].length ? ' - ' + ll[2] : '',
384                                     xns : Roo.bootstrap 
385                                 }
386                             ]
387                             
388                             
389                             
390                     };
391                     ctreei.items.push(ctreeii);
392                     
393                 }
394                 if (footer.length) {
395                     Roo.log("footer:"+  footer);
396                     ctreei.footer = '<h5>Examples:</h5><ul>'+footer +'</ul>';
397                 }
398         
399             }
400             
401             
402             
403             
404             
405             Roo.docs.introBody.addxtypeChild(ctree);
406         }
407         
408         
409         
410     }
411     
412     
413     
414 };
415
416
417 Roo.onReady(Roo.docs.init.onReady, Roo.docs.init);
418     
419