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