2af595033b4785c81580344526c4a5d6d45c3685
[roojs1] / docs / src / Function.js.html
1 <html><head><title>/home/edward/gitlive/roojs1/Function.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/*
2  * Based on:
3  * Ext JS Library 1.1.1
4  * Copyright(c) 2006-2007, Ext JS, LLC.
5  *
6  * Originally Released Under LGPL - original licence link has changed is not relivant.
7  *
8  * Fork - LGPL
9  * &lt;script type=&quot;text/javascript&quot;&gt;
10  */
11
12 </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() {
13     </span><span class="jsdoc-comment">// wrappedn so fnCleanup is not in global scope...
14     </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.isIE</span><span class="jsdoc-syntax">) {
15         </span><span class="jsdoc-keyword">function </span><span class="jsdoc-var">fnCleanUp</span><span class="jsdoc-syntax">() {
16             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">p </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Function.prototype</span><span class="jsdoc-syntax">;
17             </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">p.createSequence</span><span class="jsdoc-syntax">;
18             </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">p.defer</span><span class="jsdoc-syntax">;
19             </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">p.createDelegate</span><span class="jsdoc-syntax">;
20             </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">p.createCallback</span><span class="jsdoc-syntax">;
21             </span><span class="jsdoc-keyword">delete </span><span class="jsdoc-var">p.createInterceptor</span><span class="jsdoc-syntax">;
22
23             </span><span class="jsdoc-var">window.detachEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;onunload&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">fnCleanUp</span><span class="jsdoc-syntax">);
24         }
25         </span><span class="jsdoc-var">window.attachEvent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;onunload&quot;</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">fnCleanUp</span><span class="jsdoc-syntax">);
26     }
27 })();
28
29
30 </span><span class="jsdoc-comment">/**
31  * @class Function
32  * These functions are available on every Function object (any JavaScript function).
33  */
34 </span><span class="jsdoc-var">Roo.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Function.prototype</span><span class="jsdoc-syntax">, {
35      </span><span class="jsdoc-comment">/**
36      * Creates a callback that passes arguments[0], arguments[1], arguments[2], ...
37      * Call directly on any function. Example: &lt;code&gt;myFunction.createCallback(myarg, myarg2)&lt;/code&gt;
38      * Will create a function that is bound to those 2 args.
39      * @return {Function} The new function
40     */
41     </span><span class="jsdoc-var">createCallback </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-comment">/*args...*/</span><span class="jsdoc-syntax">){
42         </span><span class="jsdoc-comment">// make args available, in function below
43         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">args </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">;
44         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">method </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
45         </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">() {
46             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">method.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">window</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">args</span><span class="jsdoc-syntax">);
47         };
48     },
49
50     </span><span class="jsdoc-comment">/**
51      * Creates a delegate (callback) that sets the scope to obj.
52      * Call directly on any function. Example: &lt;code&gt;this.myFunction.createDelegate(this)&lt;/code&gt;
53      * Will create a function that is automatically scoped to this.
54      * @param {Object} obj (optional) The object for which the scope is set
55      * @param {Array} args (optional) Overrides arguments for the call. (Defaults to the arguments passed by the caller)
56      * @param {Boolean/Number} appendArgs (optional) if True args are appended to call args instead of overriding,
57      *                                             if a number the args are inserted at the specified position
58      * @return {Function} The new function
59      */
60     </span><span class="jsdoc-var">createDelegate </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">args</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">appendArgs</span><span class="jsdoc-syntax">){
61         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">method </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
62         </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">() {
63             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">callArgs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">args </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">;
64             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">appendArgs </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">){
65                 </span><span class="jsdoc-var">callArgs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Array.prototype.slice.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">, 0);
66                 </span><span class="jsdoc-var">callArgs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">callArgs.concat</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">args</span><span class="jsdoc-syntax">);
67             }</span><span class="jsdoc-keyword">else if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">appendArgs </span><span class="jsdoc-syntax">== </span><span class="jsdoc-string">&quot;number&quot;</span><span class="jsdoc-syntax">){
68                 </span><span class="jsdoc-var">callArgs </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">Array.prototype.slice.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">, 0); </span><span class="jsdoc-comment">// copy arguments first
69                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">applyArgs </span><span class="jsdoc-syntax">= [</span><span class="jsdoc-var">appendArgs</span><span class="jsdoc-syntax">, 0]</span><span class="jsdoc-var">.concat</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">args</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// create method call params
70                 </span><span class="jsdoc-var">Array.prototype.splice.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">callArgs</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">applyArgs</span><span class="jsdoc-syntax">); </span><span class="jsdoc-comment">// splice them in
71             </span><span class="jsdoc-syntax">}
72             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">method.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">window</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">callArgs</span><span class="jsdoc-syntax">);
73         };
74     },
75
76     </span><span class="jsdoc-comment">/**
77      * Calls this function after the number of millseconds specified.
78      * @param {Number} millis The number of milliseconds for the setTimeout call (if 0 the function is executed immediately)
79      * @param {Object} obj (optional) The object for which the scope is set
80      * @param {Array} args (optional) Overrides arguments for the call. (Defaults to the arguments passed by the caller)
81      * @param {Boolean/Number} appendArgs (optional) if True args are appended to call args instead of overriding,
82      *                                             if a number the args are inserted at the specified position
83      * @return {Number} The timeout id that can be used with clearTimeout
84      */
85     </span><span class="jsdoc-var">defer </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">millis</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">args</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">appendArgs</span><span class="jsdoc-syntax">){
86         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">fn </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.createDelegate</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">obj</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">args</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">appendArgs</span><span class="jsdoc-syntax">);
87         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">millis</span><span class="jsdoc-syntax">){
88             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">setTimeout</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fn</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">millis</span><span class="jsdoc-syntax">);
89         }
90         </span><span class="jsdoc-var">fn</span><span class="jsdoc-syntax">();
91         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">0;
92     },
93     </span><span class="jsdoc-comment">/**
94      * Create a combined function call sequence of the original function + the passed function.
95      * The resulting function returns the results of the original function.
96      * The passed fcn is called with the parameters of the original function
97      * @param {Function} fcn The function to sequence
98      * @param {Object} scope (optional) The scope of the passed fcn (Defaults to scope of original function or window)
99      * @return {Function} The new function
100      */
101     </span><span class="jsdoc-var">createSequence </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fcn</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">scope</span><span class="jsdoc-syntax">){
102         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">fcn </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">&quot;function&quot;</span><span class="jsdoc-syntax">){
103             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
104         }
105         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">method </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
106         </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">() {
107             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">retval </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">method.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">window</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">);
108             </span><span class="jsdoc-var">fcn.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">scope </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">window</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">);
109             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">retval</span><span class="jsdoc-syntax">;
110         };
111     },
112
113     </span><span class="jsdoc-comment">/**
114      * Creates an interceptor function. The passed fcn is called before the original one. If it returns false, the original one is not called.
115      * The resulting function returns the results of the original function.
116      * The passed fcn is called with the parameters of the original function.
117      * @addon
118      * @param {Function} fcn The function to call before the original
119      * @param {Object} scope (optional) The scope of the passed fcn (Defaults to scope of original function or window)
120      * @return {Function} The new function
121      */
122     </span><span class="jsdoc-var">createInterceptor </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fcn</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">scope</span><span class="jsdoc-syntax">){
123         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof </span><span class="jsdoc-var">fcn </span><span class="jsdoc-syntax">!= </span><span class="jsdoc-string">&quot;function&quot;</span><span class="jsdoc-syntax">){
124             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
125         }
126         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">method </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
127         </span><span class="jsdoc-keyword">return function</span><span class="jsdoc-syntax">() {
128             </span><span class="jsdoc-var">fcn.target </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
129             </span><span class="jsdoc-var">fcn.method </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">method</span><span class="jsdoc-syntax">;
130             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">fcn.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">scope </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">window</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">) === </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">){
131                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
132             }
133             </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">method.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">window</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">arguments</span><span class="jsdoc-syntax">);
134         };
135     }
136 });
137 </span></code></body></html>