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