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