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