fcf4d7d29b0a700d5cf6dc5312a9649c3b16db98
[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.length && $.memberOf != data.name) { // it's a singleton - can not inherit static methods.
147                     return true;
148                 }
149             
150                 $.isInherited = ($.memberOf.length && $.memberOf != data.name);
151                 ownMethods.push($);
152                 return true;
153             }
154             
155             
156             if ($.memberOf.length && ($.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 }