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