major doc changes
[roojs1] / docs / Roo.docs.template.js
1
2
3 Roo.docs.template  = {
4
5     summary : function (data)
6     {
7         
8         output = this.resolveLinks(data.desc) ;
9         if (data.example.length) {
10             output += '<pre class="code">'+data.example+'</pre>';
11         }
12         return output;
13     },
14
15     
16     
17     augments : function(data)
18     {
19         if (!data.augments.length) {
20             return '';
21         }
22         var linkSymbol  = this.linkSymbol;
23         var output = '<div class="inheritance res-block"> <pre class="res-block-inner">';
24         
25         var iblock_indent = 0;
26          data.augments.reverse().map(
27             function($) {  
28                 output += iblock_indent ? ('<img src="../images/default/s.gif" height="1" width="' + 
29                     iblock_indent + '"/><img src="../images/default/tree/elbow-end.gif" class="elbow"/>') : '';
30                 output += linkSymbol($) + "\n"; 
31                 iblock_indent += 20;
32             }
33         )
34          
35         return output +  '<img src="../images/default/s.gif" height="1"  width="' +  iblock_indent +'"/>' +
36             '<img class="elbow" src="../images/default/tree/elbow-end.gif"/>'+data.name+
37     
38                '</pre></div>'
39        
40     },
41     
42     implementors : function(data)
43     {
44                 if (!data.childClasses || typeof(data.childClasses[data.name]) == 'undefined') { 
45                         return '';
46                 }
47                 var linkSymbol  = this.linkSymbol;
48                 //var linkSymbol  = this.linkSymbol;
49                 var output = '<ul class="inheritance res-block"> ';
50                 
51                 var iterArray  = function(ar) {
52                         for(var i = 0; i < ar.length; i++) {
53                                 output += '<li>' +linkSymbol(ar[i]) ; // a href...
54                                 if (typeof(data.childClasses[ar[i]]) != 'undefined') {
55                                         output += '<ul>';
56                                         iterArray(data.childClasses[ar[i]]);
57                                         output += '</ul>';
58                                 }
59                                 output +=  "</li>";
60                                 
61                         }
62                         
63                 }
64                 iterArray(data.childClasses[data.name]);
65                  
66                 return output +   '</ul>'
67         
68     },
69         
70         doc_children : function(data)
71     {
72                 if (!data.tree_children ||  data.tree_children < 1) { 
73                         return '';
74                 }
75                 
76                 var ar = data.tree_children;
77                 
78                 
79                 var linkSymbol  = this.linkSymbol;
80                 //var linkSymbol  = this.linkSymbol;
81                 var output = '<ul class="doc-children-list res-block"> ';
82                 ar.sort(function (a, b) {
83                         return a.toLowerCase().localeCompare(b.toLowerCase());
84                 })
85                 for(var i = 0; i < ar.length; i++) {
86                         output += '<li>' +linkSymbol(ar[i])  + "</li>";
87                         
88                 }
89                 
90         
91                 
92                  
93                 return output +   '</ul>'
94         
95     },
96         
97     
98     config : function(dtag)
99     {
100        
101         var output = '<a name="'+dtag.memberOf+'-cfg-'+dtag.name+'"></a>';
102         output += '<div class="fixedFont"><b  class="itemname"> ' + dtag.name + '</b> : ' +
103             (dtag.type.length ? this.linkSymbol(dtag.type) : "" ) + '</div>';
104               
105         output += '<div class="mdesc"><div class="short">'+this.resolveLinks(this.summarize(dtag.desc))+'</div></div>';
106                 
107         output += '<div class="mdesc"><div class="long">' + this.resolveLinks(dtag.desc)+ ' ' + 
108                         (dtag.values && dtag.values.length ? ("<BR/>Possible Values: " +
109                     dtag.values.map(function(v) {
110                         return v.length ? v : "<B>Empty</B>";
111                     }).join(", ")) : ''
112                 ) + '</div></div>';
113         Roo.log(JSON.stringify(output));
114         return output;
115     },
116     
117     methodsSort : function(data)
118     {
119     
120       
121         var ownMethods = [];
122     
123         if (data.name.length && 
124             !data.isBuiltin && 
125             !data.isSingleton &&
126             !data.isStatic &&
127             !data.isFlutter
128             ) {
129             data.isInherited = false;
130             data.isConstructor = true;
131             ownMethods.push(data);   // should push ctor???
132         }
133         
134         var msorted = data.methods.sort(this.makeSortby("name"));
135         
136         // static first?
137         
138         msorted.filter(
139             function($){
140          
141             
142             
143             
144             if (data.isSingleton) {
145              
146                 if ($.isStatic && $.memberOf != data.name) { // it's a singleton - can not inherit static methods.
147                 return true;
148                 }
149             
150                 $.isInherited = ($.memberOf != data.name);
151                 ownMethods.push($);
152                 return true;
153             }
154             
155                 
156             if (($.memberOf != data.name) && $.isStatic){
157                 return true;
158             }
159             if ($.isStatic) {
160                 $.isInherited = ($.memberOf != data.name);
161                 ownMethods.push($);
162             }
163                 
164             return true;
165             }
166         );
167     
168         // then dynamics..
169     
170         msorted.filter(
171             function($){
172                 //if (/@hide/.test($.desc)) {
173                 //        return false;
174                 //}
175                 // it's a signleton class - can not have dynamic methods..
176                 if (data.isSingleton) {
177                     return true;
178                 }
179                 if (($.memberOf != data.name) && $.isStatic){
180                     return true;
181                 }
182                 if (!$.isStatic) {
183                 $.isInherited = ($.memberOf != data.alias);
184                 ownMethods.push($);
185                 }
186                 
187                 return true;
188             }
189         );
190         
191         return ownMethods;
192         
193     },
194
195     
196     method : function(member) {
197       
198         var output = '<a name="' + member.memberOf +'.' + member.name + '"></a>' +
199              '<div class="fixedFont"> <span class="attributes">';
200
201         if (member.isConstructor) {
202                 output += "new ";
203         } else {
204                 
205         if (member.isPrivate) output += "&lt;private&gt; ";
206         if (member.isInner) output += "&lt;inner&gt; ";
207         if (member.isStatic || member.isSingleton) { //|| data.comment.getTag("instanceOf").length) {
208             output +=  member.memberOf + ".";    
209         }
210         }
211         output += '</span><b class="itemname">' + member.name + '</b>';
212                 
213         output += this.makeSignature(member.params);
214         if (member.returns && member.returns.length) {
215             output += ': ';
216             for(var i = 0;i< member.returns.length;i++) {
217                 var item = member.returns[i];
218                 output += (i > 0 ? ' or ' : '') +
219                 this.linkSymbol(item.type);
220             }
221         }
222             
223             
224     output += '</div> <div class="mdesc">';
225         if (!member.isConstructor) {
226             output+= '<div class="short">'+this.resolveLinks(this.summarize(member.desc)) +'</div>';
227         } else  {
228             //ctor
229         output+= '<div class="short">Create a new '+member.memberOf +'</div>';
230     }
231     output +='<div class="long">';
232         if (!member.isConstructor) {
233             output+= this.resolveLinks(member.desc) ;
234             if (member.example.length) {
235                 output += '<pre class="code">'+member.example+'</pre>';
236             }
237         } else {
238             //ctor
239             output+= 'Create a new '+member.memberOf;
240         // example and desc.. are normally on the 'top'...
241         }
242         if (member.params.length) {
243         
244      
245             output+= '<dl class="detailList"> <dt class="heading">Parameters:</dt>';
246             for(var  i = 0; i <  member.params.length ; i++) {
247                 var item = member.params[i];
248                     output += '<dt>' +
249                        ( item.type.length ?
250                             '<span class="fixedFont">' + this.linkSymbol(item.type) + '</span> ' :
251                             ""
252                         )+  '<b>'+item.name+'</b>';
253                     if (item.isOptional) {
254                         output+='<i>Optional ';
255                         if (item.defaultValue.length) {
256                             output+='Default: '+item.defaultValue;
257                         }
258                         output+='</i>';
259                     }
260                     output +='</dt><dd>'+this.resolveLinks(item.desc)+'</dd>';
261             }
262             output+= '</dl>';
263         }    
264         if (member.isDeprecated || (member.deprecated && member.deprecated.length)) {
265             output+= '<dl class="detailList"><dt class="heading">Deprecated:</dt><dt>' +
266                         +member.deprecated+'</dt></dl>';
267         }
268         
269         
270         if (member.since && member.since.length) {
271             output+= '<dl class="detailList"><dt class="heading">Since:</dt><dt>' +
272                         +member.since+'</dt></dl>';
273         }
274          /*
275                 <if test="member.exceptions.length">
276                         <dl class="detailList">
277                         <dt class="heading">Throws:</dt>
278                         <for each="item" in="member.exceptions">
279                                 <dt>
280                                         {+((item.type)?"<span class=\"fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b>
281                                 </dt>
282                                 <dd>{+resolveLinks(item.desc)+}</dd>
283                         </for>
284                         </dl>
285                 </if>
286                 */
287         if (member.returns && member.returns.length) {
288             output += '<dl class="detailList"><dt class="heading">Returns:</dt>';
289         for (var i =0; i < member.returns.length; i++) {
290         var item = member.returns[i];
291         output+= '<dd>' + this.linkSymbol( item.type ) + ' ' + this.resolveLinks(item.desc) + '</dd></dl>';
292         }
293                     
294         }
295         
296         /*
297                 <if test="member.requires.length">
298                         <dl class="detailList">
299                         <dt class="heading">Requires:</dt>
300                         <for each="item" in="member.requires">
301                                 <dd>{+ resolveLinks(item) +}</dd>
302                         </for>
303                         </dl>
304                 </if>
305         */
306         if (member.see  && member.see.length) {
307             output+= '<dl class="detailList"><dt class="heading">See:</dt><dt>' +
308                         '<dd>' + this.linkSymbol( member.see ) +'</dd></dl>';
309         }
310         output +='</div></div>';
311         return output;
312     },
313     
314     
315     
316     event  : function(member)
317     {
318      
319   
320         var output = '<a name="' + member.memberOf +'-event-' + member.name + '"></a>' +
321         '<div class="fixedFont"> ';
322
323         
324         output += '<b class="itemname">'+member.name+'</b>' +this.makeSignature(member.params) + '</div>';
325               
326         output += '<div class="mdesc">';
327     output += '<div class="short">' +this.resolveLinks(this.summarize(member.desc))+   '</div>';
328            
329             
330         output += '<div class="long">' + this.resolveLinks(member.desc);
331     
332     if (member.example.length) {
333         output +='<pre class="code">'+member.example+'</pre>';
334     }
335     if (member.params.length) {
336         
337      
338             output+= '<dl class="detailList"> <dt class="heading">Parameters:</dt>';
339             for(var  i = 0; i <  member.params.length ; i++) {
340                 var item = member.params[i];
341                     output += '<dt>' +
342                        ( item.type.length ?
343                             '<span class="fixedFont">' + this.linkSymbol(item.type) + '</span> ' :
344                             ""
345                         )+  '<b>'+item.name+'</b>';
346                     if (item.isOptional) {
347                         output+='<i>Optional ';
348                         if (item.defaultValue.length) {
349                             output+='Default: '+item.defaultValue;
350                         }
351                         output+='</i>';
352                     }
353                     output +='</dt><dd>'+this.resolveLinks(item.desc)+'</dd>';
354             }
355             output+= '</dl>';
356         }            
357       if ((member.deprecated && member.deprecated.length) || member.isDeprecated) {
358             output+= '<dl class="detailList"><dt class="heading">Deprecated:</dt><dt>' +
359                         +member.deprecated+'</dt></dl>';
360         }
361         
362         
363         if (member.since && member.since.length) {
364             output+= '<dl class="detailList"><dt class="heading">Since:</dt><dt>' +
365                         +member.since+'</dt></dl>';
366         }
367          /*
368                 <if test="member.exceptions.length">
369                         <dl class="detailList">
370                         <dt class="heading">Throws:</dt>
371                         <for each="item" in="member.exceptions">
372                                 <dt>
373                                         {+((item.type)?"<span class=\"fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b>
374                                 </dt>
375                                 <dd>{+resolveLinks(item.desc)+}</dd>
376                         </for>
377                         </dl>
378                 </if>
379                 */    
380       if (member.returns && member.returns.length) {
381             output += '<dl class="detailList"><dt class="heading">Returns:</dt>';
382         for (var i =0; i < member.returns.length; i++) {
383         var item = member.returns[i];
384         output+= '<dd>' + this.linkSymbol( item.type ) + ' ' + this.resolveLinks(item.desc) + '</dd></dl>';
385         }
386                     
387         }
388         
389         /*
390                 <if test="member.requires.length">
391                         <dl class="detailList">
392                         <dt class="heading">Requires:</dt>
393                         <for each="item" in="member.requires">
394                                 <dd>{+ resolveLinks(item) +}</dd>
395                         </for>
396                         </dl>
397                 </if>
398         */
399         if (member.see && member.see.length) {
400             output+= '<dl class="detailList"><dt class="heading">See:</dt><dt>' +
401                         '<dd>' + this.linkSymbol( member.see ) +'</dd></dl>';
402         }
403         output +='</div></div>';         
404           
405     return output;
406     },
407     
408     
409     
410     
411     
412     
413     
414     
415     
416     
417     makeSignature : function(params)
418     {
419         
420             if (!params.length) return "()";
421         var linkSymbol = this.linkSymbol;
422         var signature = " ("    +
423             params.filter(
424                 function($) {
425                     return $.name.indexOf(".") == -1; // don't show config params in signature
426                 }
427             ).map(
428                 function($) {
429                     $.defaultValue = typeof($.defaultValue) == 'undefined' ? false : $.defaultValue;
430                     
431                     return "" +
432                         ($.isOptional ? "[" : "") +
433                         (($.type) ? 
434                             linkSymbol(
435                                 (typeof($.type) == 'object' ) ? 'Function' : $.type
436                             ) + " " :  ""
437                         )   + 
438                         "<B><i>" +$.name + "</i></B>" +
439                         ($.defaultValue ? "=" +item.defaultValue : "") +
440                         ($.isOptional ? "]" : "");
441                     
442                      
443                 }
444             ).join(", ")
445         +
446         ")";
447         return signature;
448         
449     },
450     resolveLinks : function(str)
451     {
452         if (!str || typeof(str) == 'undefined') {
453             return '';
454         }
455         
456         // gtk specific. now..
457         // @ -> bold.. - they are arguments..
458         /*
459         str = str.replace(/@([a-z_]+)/gi,
460             function(match, symbolName) {
461                 return '<b>' + symbolName + '</b>';
462             }
463         );
464         // constants.
465         str = str.replace(/%([a-z_]+)/gi,
466             function(match, symbolName) {
467                 return '<b>' + symbolName + '</b>';
468             }
469         );
470         
471         str = str.replace(/#([a-z_]+)/gi,
472             function(match, symbolName) {
473                 return '<b>' + symbolName + '</b>';
474                 // this should do a lookup!!!!
475                 /// it could use data in the signature to find out..
476                 //return new Link().toSymbol(Template.data.ns + '.' + symbolName);
477             }
478         );
479         */
480         //Roo.log(JSON.stringify(str));
481         str = str.replace(/[ \t]+\n/gi, '\n');
482         str = str.replace(/\n\n+/gi, '<br/><br/>');
483         //str = str.replace(/\n/gi, '<br/>');
484         var linkSymbol = this.linkSymbol;
485         str = str.replace(/\{@link ([^} ]+) ?\}/gi,
486             function(match, symbolName) {
487                 return linkSymbol(symbolName);
488             }
489         );
490          
491         return str;
492     },
493     summarize : function(desc)
494     {
495         if (typeof desc != "undefined") {
496             // finds the first fulls stop... (and we remove '<' html...)
497             return desc.match(/([\w\W]+?[\.|:])[^a-z0-9]/i)?
498                 RegExp.$1.split('<')[0].replace("\n", " ") : desc.split("\n")[0];
499         }
500         return '';
501     },
502     linkSymbol : function(str)
503     {
504         Roo.log(str);
505         var ar = str.split('<');
506         var out = '';
507         for(var i = ar.length-1; i > -1; i--) {
508             var bit = ar[i].split('>').shift();
509             if (out.length) {
510                 out = '&lt;' + out + '&gt;';
511             }
512             out = '<span class=\"fixedFont\"><a href="#' + bit+ '">' + bit + '</a>' + out + '</span>';
513         }
514         
515         return out;
516     },
517     makeSortby : function(attribute) {
518         return function(a, b) {
519             if (a[attribute] != undefined && b[attribute] != undefined) {
520                 a = a[attribute]; //.toLowerCase();
521                 b = b[attribute];//.toLowerCase();
522                 if (a < b) return -1;
523                 if (a > b) return 1;
524                 return 0;
525             }
526             return 0;
527         }
528     }
529 }