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