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