X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/b37ceabb82336ee82757cd32efe353cfab8ec267..f5240829880f87e0cf581c6a296e436fdef0ef80:/adapter/ext/ext-base-debug.js diff --git a/adapter/ext/ext-base-debug.js b/adapter/ext/ext-base-debug.js index 878ff35a..72f34b95 100644 --- a/adapter/ext/ext-base-debug.js +++ b/adapter/ext/ext-base-debug.js @@ -1,22 +1,41 @@ - - +/*! + * Ext JS Library 3.3.0 + * Copyright(c) 2006-2010 Ext JS, Inc. + * licensing@extjs.com + * http://www.extjs.com/license + */ +// for old browsers window.undefined = window.undefined; - +/** + * @class Ext + * Ext core utilities and functions. + * @singleton + */ Ext = { - - version : '3.2.2', + /** + * The version of the framework + * @type String + */ + version : '3.3.0', versionDetail : { - major: 3, - minor: 2, - patch: 2 + major : 3, + minor : 3, + patch : 0 } }; - +/** + * Copies all the properties of config to obj. + * @param {Object} obj The receiver of the properties + * @param {Object} config The source of the properties + * @param {Object} defaults A different object that will also be applied for default values + * @return {Object} returns obj + * @member Ext apply + */ Ext.apply = function(o, c, defaults){ - + // no "this" reference for friendly out of scope calls if(defaults){ Ext.apply(o, defaults); } @@ -36,17 +55,18 @@ Ext.apply = function(o, c, defaults){ return r.test(ua); }, DOC = document, + docMode = DOC.documentMode, isStrict = DOC.compatMode == "CSS1Compat", isOpera = check(/opera/), isChrome = check(/\bchrome\b/), isWebKit = check(/webkit/), isSafari = !isChrome && check(/safari/), - isSafari2 = isSafari && check(/applewebkit\/4/), + isSafari2 = isSafari && check(/applewebkit\/4/), // unique to Safari 2 isSafari3 = isSafari && check(/version\/3/), isSafari4 = isSafari && check(/version\/4/), isIE = !isOpera && check(/msie/), - isIE7 = isIE && check(/msie 7/), - isIE8 = isIE && check(/msie 8/), + isIE7 = isIE && (check(/msie 7/) || docMode == 7), + isIE8 = isIE && (check(/msie 8/) && docMode != 7), isIE6 = isIE && !isIE7 && !isIE8, isGecko = !isWebKit && check(/gecko/), isGecko2 = isGecko && check(/rv:1\.8/), @@ -58,7 +78,7 @@ Ext.apply = function(o, c, defaults){ isLinux = check(/linux/), isSecure = /^https/i.test(window.location.protocol); - + // remove css image flicker if(isIE6){ try{ DOC.execCommand("BackgroundImageCache", false, true); @@ -66,30 +86,76 @@ Ext.apply = function(o, c, defaults){ } Ext.apply(Ext, { - + /** + * URL to a blank file used by Ext when in secure mode for iframe src and onReady src to prevent + * the IE insecure content warning ('about:blank', except for IE in secure mode, which is 'javascript:""'). + * @type String + */ SSL_SECURE_URL : isSecure && isIE ? 'javascript:""' : 'about:blank', - + /** + * True if the browser is in strict (standards-compliant) mode, as opposed to quirks mode + * @type Boolean + */ isStrict : isStrict, - + /** + * True if the page is running over SSL + * @type Boolean + */ isSecure : isSecure, - + /** + * True when the document is fully initialized and ready for action + * @type Boolean + */ isReady : false, - - - + /** + * True if the {@link Ext.Fx} Class is available + * @type Boolean + * @property enableFx + */ + + /** + * HIGHLY EXPERIMENTAL + * True to force css based border-box model override and turning off javascript based adjustments. This is a + * runtime configuration and must be set before onReady. + * @type Boolean + */ + enableForcedBoxModel : false, + + /** + * True to automatically uncache orphaned Ext.Elements periodically (defaults to true) + * @type Boolean + */ enableGarbageCollector : true, - + /** + * True to automatically purge event listeners during garbageCollection (defaults to false). + * @type Boolean + */ enableListenerCollection : false, - + /** + * EXPERIMENTAL - True to cascade listener removal to child elements when an element is removed. + * Currently not optimized for performance. + * @type Boolean + */ enableNestedListenerRemoval : false, - + /** + * Indicates whether to use native browser parsing for JSON methods. + * This option is ignored if the browser does not support native JSON methods. + * Note: Native JSON methods will not work with objects that have functions. + * Also, property names must be quoted, otherwise the data will not parse. (Defaults to false) + * @type Boolean + */ USE_NATIVE_JSON : false, - + /** + * Copies all the properties of config to obj if they don't already exist. + * @param {Object} obj The receiver of the properties + * @param {Object} config The source of the properties + * @return {Object} returns obj + */ applyIf : function(o, c){ if(o){ for(var p in c){ @@ -101,7 +167,12 @@ Ext.apply = function(o, c, defaults){ return o; }, - + /** + * Generates unique ids. If the element already has an id, it is unchanged + * @param {Mixed} el (optional) The element to generate an id for + * @param {String} prefix (optional) Id prefix (defaults "ext-gen") + * @return {String} The generated Id. + */ id : function(el, prefix){ el = Ext.getDom(el, true) || {}; if (!el.id) { @@ -110,9 +181,57 @@ Ext.apply = function(o, c, defaults){ return el.id; }, - + /** + *

Extends one class to create a subclass and optionally overrides members with the passed literal. This method + * also adds the function "override()" to the subclass that can be used to override members of the class.

+ * For example, to create a subclass of Ext GridPanel: + *

+MyGridPanel = Ext.extend(Ext.grid.GridPanel, {
+    constructor: function(config) {
+
+//      Create configuration for this Grid.
+        var store = new Ext.data.Store({...});
+        var colModel = new Ext.grid.ColumnModel({...});
+
+//      Create a new config object containing our computed properties
+//      *plus* whatever was in the config parameter.
+        config = Ext.apply({
+            store: store,
+            colModel: colModel
+        }, config);
+
+        MyGridPanel.superclass.constructor.call(this, config);
+
+//      Your postprocessing here
+    },
+
+    yourMethod: function() {
+        // etc.
+    }
+});
+
+ * + *

This function also supports a 3-argument call in which the subclass's constructor is + * passed as an argument. In this form, the parameters are as follows:

+ *
+ * + * @param {Function} superclass The constructor of class being extended. + * @param {Object} overrides

A literal with members which are copied into the subclass's + * prototype, and are therefore shared between all instances of the new class.

+ *

This may contain a special member named constructor. This is used + * to define the constructor of the new class, and is returned. If this property is + * not specified, a constructor is generated and returned which just calls the + * superclass's constructor passing on its parameters.

+ *

It is essential that you call the superclass constructor in any provided constructor. See example code.

+ * @return {Function} The subclass constructor from the overrides parameter, or a generated one if not provided. + */ extend : function(){ - + // inline overrides var io = function(o){ for(var m in o){ this[m] = o[m]; @@ -150,7 +269,23 @@ Ext.apply = function(o, c, defaults){ }; }(), - + /** + * Adds a list of functions to the prototype of an existing class, overwriting any existing methods with the same name. + * Usage:

+Ext.override(MyClass, {
+    newMethod1: function(){
+        // etc.
+    },
+    newMethod2: function(foo){
+        // etc.
+    }
+});
+
+ * @param {Object} origclass The class to override + * @param {Object} overrides The list of functions to add to origClass. This should be specified as an object literal + * containing one or more methods. + * @method override + */ override : function(origclass, overrides){ if(overrides){ var p = origclass.prototype; @@ -161,7 +296,21 @@ Ext.apply = function(o, c, defaults){ } }, - + /** + * Creates namespaces to be used for scoping variables and classes so that they are not global. + * Specifying the last node of a namespace implicitly creates all other nodes. Usage: + *

+Ext.namespace('Company', 'Company.data');
+Ext.namespace('Company.data'); // equivalent and preferable to above syntax
+Company.Widget = function() { ... }
+Company.data.CustomStore = function(config) { ... }
+
+ * @param {String} namespace1 + * @param {String} namespace2 + * @param {String} etc + * @return {Object} The namespace object. (If multiple arguments are passed, this will be the last namespace created) + * @method namespace + */ namespace : function(){ var o, d; Ext.each(arguments, function(v) { @@ -174,7 +323,12 @@ Ext.apply = function(o, c, defaults){ return o; }, - + /** + * Takes an object and converts it to an encoded URL. e.g. Ext.urlEncode({foo: 1, bar: 2}); would return "foo=1&bar=2". Optionally, property values can be arrays, instead of keys and the resulting string that's returned will contain a name/value pair for each array value. + * @param {Object} o + * @param {String} pre (optional) A prefix to add to the url encoded string + * @return {String} + */ urlEncode : function(o, pre){ var empty, buf = [], @@ -193,7 +347,15 @@ Ext.apply = function(o, c, defaults){ return pre + buf.join(''); }, - + /** + * Takes an encoded URL and and converts it to an object. Example:

+Ext.urlDecode("foo=1&bar=2"); // returns {foo: "1", bar: "2"}
+Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", false); // returns {foo: "1", bar: ["2", "3", "4"]}
+
+ * @param {String} string + * @param {Boolean} overwrite (optional) Items of the same name will overwrite previous values instead of creating an an array (Defaults to false). + * @return {Object} A literal with members + */ urlDecode : function(string, overwrite){ if(Ext.isEmpty(string)){ return {}; @@ -213,7 +375,13 @@ Ext.apply = function(o, c, defaults){ return obj; }, - + /** + * Appends content to the query string of a URL, handling logic for whether to place + * a question mark or ampersand. + * @param {String} url The URL to append to. + * @param {String} s The content to append to the URL. + * @return (String) The resulting URL + */ urlAppend : function(url, s){ if(!Ext.isEmpty(s)){ return url + (url.indexOf('?') === -1 ? '?' : '&') + s; @@ -221,7 +389,13 @@ Ext.apply = function(o, c, defaults){ return url; }, - + /** + * Converts any iterable (numeric indices and a length property) into a true array + * Don't use this on strings. IE doesn't support "abc"[0] which this implementation depends on. + * For strings, use this instead: "abc".match(/./g) => [a,b,c]; + * @param {Iterable} the iterable object to be turned into a true Array. + * @return (Array) array + */ toArray : function(){ return isIE ? function(a, i, j, res){ @@ -237,20 +411,42 @@ Ext.apply = function(o, c, defaults){ }(), isIterable : function(v){ - + //check for array or arguments if(Ext.isArray(v) || v.callee){ return true; } - + //check for node list type if(/NodeList|HTMLCollection/.test(toString.call(v))){ return true; } - - + //NodeList has an item and length property + //IXMLDOMNodeList has nextNode method, needs to be checked first. return ((typeof v.nextNode != 'undefined' || v.item) && Ext.isNumber(v.length)); }, - + /** + * Iterates an array calling the supplied function. + * @param {Array/NodeList/Mixed} array The array to be iterated. If this + * argument is not really an array, the supplied function is called once. + * @param {Function} fn The function to be called with each item. If the + * supplied function returns false, iteration stops and this method returns + * the current index. This function is called with + * the following arguments: + *
+ * @param {Object} scope The scope (this reference) in which the specified function is executed. + * Defaults to the item at the current index + * within the passed array. + * @return See description for the fn parameter. + */ each : function(array, fn, scope){ if(Ext.isEmpty(array, true)){ return; @@ -265,7 +461,26 @@ Ext.apply = function(o, c, defaults){ } }, - + /** + * Iterates either the elements in an array, or each of the properties in an object. + * Note: If you are only iterating arrays, it is better to call {@link #each}. + * @param {Object/Array} object The object or array to be iterated + * @param {Function} fn The function to be called for each iteration. + * The iteration will stop if the supplied function returns false, or + * all array elements / object properties have been covered. The signature + * varies depending on the type of object being interated: + *
+ * @param {Object} scope The scope (this reference) in which the specified function is executed. Defaults to + * the object being iterated. + */ iterate : function(obj, fn, scope){ if(Ext.isEmpty(obj)){ return; @@ -284,7 +499,29 @@ Ext.apply = function(o, c, defaults){ } }, - + /** + * Return the dom node for the passed String (id), dom node, or Ext.Element. + * Optional 'strict' flag is needed for IE since it can return 'name' and + * 'id' elements by using getElementById. + * Here are some examples: + *

+// gets dom node based on id
+var elDom = Ext.getDom('elId');
+// gets dom node based on the dom node
+var elDom1 = Ext.getDom(elDom);
+
+// If we don't know if we are working with an
+// Ext.Element or a dom node use Ext.getDom
+function(el){
+    var dom = Ext.getDom(el);
+    // do something with the dom node
+}
+         * 
+ * Note: the dom node to be found actually needs to exist (be rendered, etc) + * when this method is called to be successful. + * @param {Mixed} el + * @return HTMLElement + */ getDom : function(el, strict){ if(!el || !DOC){ return null; @@ -294,8 +531,8 @@ Ext.apply = function(o, c, defaults){ } else { if (typeof el == 'string') { var e = DOC.getElementById(el); - - + // IE returns elements with the 'name' and 'id' attribute. + // we do a strict check to return the element with only the id attribute if (e && isIE && strict) { if (el == e.getAttribute('id')) { return e; @@ -310,12 +547,18 @@ Ext.apply = function(o, c, defaults){ } }, - + /** + * Returns the current document body as an {@link Ext.Element}. + * @return Ext.Element The document body + */ getBody : function(){ return Ext.get(DOC.body || DOC.documentElement); }, - + /** + * Returns the current document body as an {@link Ext.Element}. + * @return Ext.Element The document body + */ getHead : function() { var head; @@ -328,8 +571,16 @@ Ext.apply = function(o, c, defaults){ }; }(), - - + /** + * Removes a DOM node from the document. + */ + /** + *

Removes this element from the document, removes all DOM event listeners, and deletes the cache reference. + * All DOM event listeners are removed from this element. If {@link Ext#enableNestedListenerRemoval} is + * true, then DOM event listeners are also removed from all child nodes. The body node + * will be ignored if passed in.

+ * @param {HTMLElement} node The node to remove + */ removeNode : isIE && !isIE8 ? function(){ var d; return function(n){ @@ -349,112 +600,261 @@ Ext.apply = function(o, c, defaults){ } }, - + /** + *

Returns true if the passed value is empty.

+ *

The value is deemed to be empty if it is

+ * @param {Mixed} value The value to test + * @param {Boolean} allowBlank (optional) true to allow empty strings (defaults to false) + * @return {Boolean} + */ isEmpty : function(v, allowBlank){ return v === null || v === undefined || ((Ext.isArray(v) && !v.length)) || (!allowBlank ? v === '' : false); }, - + /** + * Returns true if the passed value is a JavaScript array, otherwise false. + * @param {Mixed} value The value to test + * @return {Boolean} + */ isArray : function(v){ return toString.apply(v) === '[object Array]'; }, - + /** + * Returns true if the passed object is a JavaScript date object, otherwise false. + * @param {Object} object The object to test + * @return {Boolean} + */ isDate : function(v){ return toString.apply(v) === '[object Date]'; }, - + /** + * Returns true if the passed value is a JavaScript Object, otherwise false. + * @param {Mixed} value The value to test + * @return {Boolean} + */ isObject : function(v){ return !!v && Object.prototype.toString.call(v) === '[object Object]'; }, - + /** + * Returns true if the passed value is a JavaScript 'primitive', a string, number or boolean. + * @param {Mixed} value The value to test + * @return {Boolean} + */ isPrimitive : function(v){ return Ext.isString(v) || Ext.isNumber(v) || Ext.isBoolean(v); }, - + /** + * Returns true if the passed value is a JavaScript Function, otherwise false. + * @param {Mixed} value The value to test + * @return {Boolean} + */ isFunction : function(v){ return toString.apply(v) === '[object Function]'; }, - + /** + * Returns true if the passed value is a number. Returns false for non-finite numbers. + * @param {Mixed} value The value to test + * @return {Boolean} + */ isNumber : function(v){ return typeof v === 'number' && isFinite(v); }, - + /** + * Returns true if the passed value is a string. + * @param {Mixed} value The value to test + * @return {Boolean} + */ isString : function(v){ return typeof v === 'string'; }, - + /** + * Returns true if the passed value is a boolean. + * @param {Mixed} value The value to test + * @return {Boolean} + */ isBoolean : function(v){ return typeof v === 'boolean'; }, - + /** + * Returns true if the passed value is an HTMLElement + * @param {Mixed} value The value to test + * @return {Boolean} + */ isElement : function(v) { return v ? !!v.tagName : false; }, - + /** + * Returns true if the passed value is not undefined. + * @param {Mixed} value The value to test + * @return {Boolean} + */ isDefined : function(v){ return typeof v !== 'undefined'; }, - + /** + * True if the detected browser is Opera. + * @type Boolean + */ isOpera : isOpera, - + /** + * True if the detected browser uses WebKit. + * @type Boolean + */ isWebKit : isWebKit, - + /** + * True if the detected browser is Chrome. + * @type Boolean + */ isChrome : isChrome, - + /** + * True if the detected browser is Safari. + * @type Boolean + */ isSafari : isSafari, - + /** + * True if the detected browser is Safari 3.x. + * @type Boolean + */ isSafari3 : isSafari3, - + /** + * True if the detected browser is Safari 4.x. + * @type Boolean + */ isSafari4 : isSafari4, - + /** + * True if the detected browser is Safari 2.x. + * @type Boolean + */ isSafari2 : isSafari2, - + /** + * True if the detected browser is Internet Explorer. + * @type Boolean + */ isIE : isIE, - + /** + * True if the detected browser is Internet Explorer 6.x. + * @type Boolean + */ isIE6 : isIE6, - + /** + * True if the detected browser is Internet Explorer 7.x. + * @type Boolean + */ isIE7 : isIE7, - + /** + * True if the detected browser is Internet Explorer 8.x. + * @type Boolean + */ isIE8 : isIE8, - + /** + * True if the detected browser uses the Gecko layout engine (e.g. Mozilla, Firefox). + * @type Boolean + */ isGecko : isGecko, - + /** + * True if the detected browser uses a pre-Gecko 1.9 layout engine (e.g. Firefox 2.x). + * @type Boolean + */ isGecko2 : isGecko2, - + /** + * True if the detected browser uses a Gecko 1.9+ layout engine (e.g. Firefox 3.x). + * @type Boolean + */ isGecko3 : isGecko3, - + /** + * True if the detected browser is Internet Explorer running in non-strict mode. + * @type Boolean + */ isBorderBox : isBorderBox, - + /** + * True if the detected platform is Linux. + * @type Boolean + */ isLinux : isLinux, - + /** + * True if the detected platform is Windows. + * @type Boolean + */ isWindows : isWindows, - + /** + * True if the detected platform is Mac OS. + * @type Boolean + */ isMac : isMac, - + /** + * True if the detected platform is Adobe Air. + * @type Boolean + */ isAir : isAir }); - + /** + * Creates namespaces to be used for scoping variables and classes so that they are not global. + * Specifying the last node of a namespace implicitly creates all other nodes. Usage: + *

+Ext.namespace('Company', 'Company.data');
+Ext.namespace('Company.data'); // equivalent and preferable to above syntax
+Company.Widget = function() { ... }
+Company.data.CustomStore = function(config) { ... }
+
+ * @param {String} namespace1 + * @param {String} namespace2 + * @param {String} etc + * @return {Object} The namespace object. (If multiple arguments are passed, this will be the last namespace created) + * @method ns + */ Ext.ns = Ext.namespace; })(); -Ext.ns("Ext.util", "Ext.lib", "Ext.data"); +Ext.ns('Ext.util', 'Ext.lib', 'Ext.data', 'Ext.supports'); Ext.elCache = {}; - +/** + * @class Function + * These functions are available on every Function object (any JavaScript function). + */ Ext.apply(Function.prototype, { - + /** + * Creates an interceptor function. The passed function is called before the original one. If it returns false, + * the original one is not called. The resulting function returns the results of the original function. + * The passed function is called with the parameters of the original function. Example usage: + *

+var sayHi = function(name){
+    alert('Hi, ' + name);
+}
+
+sayHi('Fred'); // alerts "Hi, Fred"
+
+// create a new function that validates input without
+// directly modifying the original function:
+var sayHiToFriend = sayHi.createInterceptor(function(name){
+    return name == 'Brian';
+});
+
+sayHiToFriend('Fred');  // no alert
+sayHiToFriend('Brian'); // alerts "Hi, Brian"
+
+ * @param {Function} fcn The function to call before the original + * @param {Object} scope (optional) The scope (this reference) in which the passed function is executed. + * If omitted, defaults to the scope in which the original function is called or the browser window. + * @return {Function} The new function + */ createInterceptor : function(fcn, scope){ var method = this; return !Ext.isFunction(fcn) ? @@ -470,9 +870,32 @@ Ext.apply(Function.prototype, { }; }, - - createCallback : function(){ - + /** + * Creates a callback that passes arguments[0], arguments[1], arguments[2], ... + * Call directly on any function. Example: myFunction.createCallback(arg1, arg2) + * Will create a function that is bound to those 2 args. If a specific scope is required in the + * callback, use {@link #createDelegate} instead. The function returned by createCallback always + * executes in the window scope. + *

This method is required when you want to pass arguments to a callback function. If no arguments + * are needed, you can simply pass a reference to the function as a callback (e.g., callback: myFn). + * However, if you tried to pass a function with arguments (e.g., callback: myFn(arg1, arg2)) the function + * would simply execute immediately when the code is parsed. Example usage: + *


+var sayHi = function(name){
+    alert('Hi, ' + name);
+}
+
+// clicking the button alerts "Hi, Fred"
+new Ext.Button({
+    text: 'Say Hi',
+    renderTo: Ext.getBody(),
+    handler: sayHi.createCallback('Fred')
+});
+
+ * @return {Function} The new function + */ + createCallback : function(/*args...*/){ + // make args available, in function below var args = arguments, method = this; return function() { @@ -480,7 +903,37 @@ Ext.apply(Function.prototype, { }; }, - + /** + * Creates a delegate (callback) that sets the scope to obj. + * Call directly on any function. Example: this.myFunction.createDelegate(this, [arg1, arg2]) + * Will create a function that is automatically scoped to obj so that the this variable inside the + * callback points to obj. Example usage: + *

+var sayHi = function(name){
+    // Note this use of "this.text" here.  This function expects to
+    // execute within a scope that contains a text property.  In this
+    // example, the "this" variable is pointing to the btn object that
+    // was passed in createDelegate below.
+    alert('Hi, ' + name + '. You clicked the "' + this.text + '" button.');
+}
+
+var btn = new Ext.Button({
+    text: 'Say Hi',
+    renderTo: Ext.getBody()
+});
+
+// This callback will execute in the scope of the
+// button instance. Clicking the button alerts
+// "Hi, Fred. You clicked the "Say Hi" button."
+btn.on('click', sayHi.createDelegate(btn, ['Fred']));
+
+ * @param {Object} scope (optional) The scope (this reference) in which the function is executed. + * If omitted, defaults to the browser window. + * @param {Array} args (optional) Overrides arguments for the call. (Defaults to the arguments passed by the caller) + * @param {Boolean/Number} appendArgs (optional) if True args are appended to call args instead of overriding, + * if a number the args are inserted at the specified position + * @return {Function} The new function + */ createDelegate : function(obj, args, appendArgs){ var method = this; return function() { @@ -489,15 +942,41 @@ Ext.apply(Function.prototype, { callArgs = Array.prototype.slice.call(arguments, 0); callArgs = callArgs.concat(args); }else if (Ext.isNumber(appendArgs)){ - callArgs = Array.prototype.slice.call(arguments, 0); - var applyArgs = [appendArgs, 0].concat(args); - Array.prototype.splice.apply(callArgs, applyArgs); + callArgs = Array.prototype.slice.call(arguments, 0); // copy arguments first + var applyArgs = [appendArgs, 0].concat(args); // create method call params + Array.prototype.splice.apply(callArgs, applyArgs); // splice them in } return method.apply(obj || window, callArgs); }; }, - + /** + * Calls this function after the number of millseconds specified, optionally in a specific scope. Example usage: + *

+var sayHi = function(name){
+    alert('Hi, ' + name);
+}
+
+// executes immediately:
+sayHi('Fred');
+
+// executes after 2 seconds:
+sayHi.defer(2000, this, ['Fred']);
+
+// this syntax is sometimes useful for deferring
+// execution of an anonymous function:
+(function(){
+    alert('Anonymous');
+}).defer(100);
+
+ * @param {Number} millis The number of milliseconds for the setTimeout call (if less than or equal to 0 the function is executed immediately) + * @param {Object} scope (optional) The scope (this reference) in which the function is executed. + * If omitted, defaults to the browser window. + * @param {Array} args (optional) Overrides arguments for the call. (Defaults to the arguments passed by the caller) + * @param {Boolean/Number} appendArgs (optional) if True args are appended to call args instead of overriding, + * if a number the args are inserted at the specified position + * @return {Number} The timeout id that can be used with clearTimeout + */ defer : function(millis, obj, args, appendArgs){ var fn = this.createDelegate(obj, args, appendArgs); if(millis > 0){ @@ -508,9 +987,25 @@ Ext.apply(Function.prototype, { } }); - +/** + * @class String + * These functions are available on every String object. + */ Ext.applyIf(String, { - + /** + * Allows you to define a tokenized string and pass an arbitrary number of arguments to replace the tokens. Each + * token must be unique, and must increment in the format {0}, {1}, etc. Example usage: + *

+var cls = 'my-class', text = 'Some text';
+var s = String.format('<div class="{0}">{1}</div>', cls, text);
+// s now contains the string: '<div class="my-class">Some text</div>'
+     * 
+ * @param {String} string The tokenized string to be formatted + * @param {String} value1 The value to replace token {0} + * @param {String} value2 Etc... + * @return {String} The formatted string + * @static + */ format : function(format){ var args = Ext.toArray(arguments, 1); return format.replace(/\{(\d+)\}/g, function(m, i){ @@ -519,9 +1014,16 @@ Ext.applyIf(String, { } }); - +/** + * @class Array + */ Ext.applyIf(Array.prototype, { - + /** + * Checks whether or not the specified object exists in the array. + * @param {Object} o The object to check for + * @param {Number} from (Optional) The index at which to begin the search + * @return {Number} The index of o in the array (or -1 if it is not found) + */ indexOf : function(o, from){ var len = this.length; from = from || 0; @@ -534,7 +1036,11 @@ Ext.applyIf(Array.prototype, { return -1; }, - + /** + * Removes the specified object from the array. If the object is not found nothing happens. + * @param {Object} o The object to remove + * @return {Array} this array + */ remove : function(o){ var index = this.indexOf(o); if(index != -1){ @@ -543,397 +1049,39 @@ Ext.applyIf(Array.prototype, { return this; } }); - - -Ext.ns("Ext.grid", "Ext.list", "Ext.dd", "Ext.tree", "Ext.form", "Ext.menu", - "Ext.state", "Ext.layout", "Ext.app", "Ext.ux", "Ext.chart", "Ext.direct"); - - -Ext.apply(Ext, function(){ - var E = Ext, - idSeed = 0, - scrollWidth = null; - - return { - - emptyFn : function(){}, - - - BLANK_IMAGE_URL : Ext.isIE6 || Ext.isIE7 || Ext.isAir ? - 'http:/' + '/www.extjs.com/s.gif' : - 'data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==', - - extendX : function(supr, fn){ - return Ext.extend(supr, fn(supr.prototype)); - }, - - - getDoc : function(){ - return Ext.get(document); - }, - - - num : function(v, defaultValue){ - v = Number(Ext.isEmpty(v) || Ext.isArray(v) || typeof v == 'boolean' || (typeof v == 'string' && v.trim().length == 0) ? NaN : v); - return isNaN(v) ? defaultValue : v; - }, - - - value : function(v, defaultValue, allowBlank){ - return Ext.isEmpty(v, allowBlank) ? defaultValue : v; - }, - - - escapeRe : function(s) { - return s.replace(/([-.*+?^${}()|[\]\/\\])/g, "\\$1"); - }, - - sequence : function(o, name, fn, scope){ - o[name] = o[name].createSequence(fn, scope); - }, - - - addBehaviors : function(o){ - if(!Ext.isReady){ - Ext.onReady(function(){ - Ext.addBehaviors(o); - }); - } else { - var cache = {}, - parts, - b, - s; - for (b in o) { - if ((parts = b.split('@'))[1]) { - s = parts[0]; - if(!cache[s]){ - cache[s] = Ext.select(s); - } - cache[s].on(parts[1], o[b]); - } - } - cache = null; - } - }, - - - getScrollBarWidth: function(force){ - if(!Ext.isReady){ - return 0; - } - - if(force === true || scrollWidth === null){ - - var div = Ext.getBody().createChild('
'), - child = div.child('div', true); - var w1 = child.offsetWidth; - div.setStyle('overflow', (Ext.isWebKit || Ext.isGecko) ? 'auto' : 'scroll'); - var w2 = child.offsetWidth; - div.remove(); - - scrollWidth = w1 - w2 + 2; - } - return scrollWidth; - }, - - - - combine : function(){ - var as = arguments, l = as.length, r = []; - for(var i = 0; i < l; i++){ - var a = as[i]; - if(Ext.isArray(a)){ - r = r.concat(a); - }else if(a.length !== undefined && !a.substr){ - r = r.concat(Array.prototype.slice.call(a, 0)); - }else{ - r.push(a); - } - } - return r; - }, - - - copyTo : function(dest, source, names){ - if(typeof names == 'string'){ - names = names.split(/[,;\s]/); - } - Ext.each(names, function(name){ - if(source.hasOwnProperty(name)){ - dest[name] = source[name]; - } - }, this); - return dest; - }, - - - destroy : function(){ - Ext.each(arguments, function(arg){ - if(arg){ - if(Ext.isArray(arg)){ - this.destroy.apply(this, arg); - }else if(typeof arg.destroy == 'function'){ - arg.destroy(); - }else if(arg.dom){ - arg.remove(); - } - } - }, this); - }, - - - destroyMembers : function(o, arg1, arg2, etc){ - for(var i = 1, a = arguments, len = a.length; i < len; i++) { - Ext.destroy(o[a[i]]); - delete o[a[i]]; - } - }, - - - clean : function(arr){ - var ret = []; - Ext.each(arr, function(v){ - if(!!v){ - ret.push(v); - } - }); - return ret; - }, - - - unique : function(arr){ - var ret = [], - collect = {}; - - Ext.each(arr, function(v) { - if(!collect[v]){ - ret.push(v); - } - collect[v] = true; - }); - return ret; - }, - - - flatten : function(arr){ - var worker = []; - function rFlatten(a) { - Ext.each(a, function(v) { - if(Ext.isArray(v)){ - rFlatten(v); - }else{ - worker.push(v); - } - }); - return worker; - } - return rFlatten(arr); - }, - - - min : function(arr, comp){ - var ret = arr[0]; - comp = comp || function(a,b){ return a < b ? -1 : 1; }; - Ext.each(arr, function(v) { - ret = comp(ret, v) == -1 ? ret : v; - }); - return ret; - }, - - - max : function(arr, comp){ - var ret = arr[0]; - comp = comp || function(a,b){ return a > b ? 1 : -1; }; - Ext.each(arr, function(v) { - ret = comp(ret, v) == 1 ? ret : v; - }); - return ret; - }, - - - mean : function(arr){ - return arr.length > 0 ? Ext.sum(arr) / arr.length : undefined; - }, - - - sum : function(arr){ - var ret = 0; - Ext.each(arr, function(v) { - ret += v; - }); - return ret; - }, - - - partition : function(arr, truth){ - var ret = [[],[]]; - Ext.each(arr, function(v, i, a) { - ret[ (truth && truth(v, i, a)) || (!truth && v) ? 0 : 1].push(v); - }); - return ret; - }, - - - invoke : function(arr, methodName){ - var ret = [], - args = Array.prototype.slice.call(arguments, 2); - Ext.each(arr, function(v,i) { - if (v && typeof v[methodName] == 'function') { - ret.push(v[methodName].apply(v, args)); - } else { - ret.push(undefined); - } - }); - return ret; - }, - - - pluck : function(arr, prop){ - var ret = []; - Ext.each(arr, function(v) { - ret.push( v[prop] ); - }); - return ret; - }, - - - zip : function(){ - var parts = Ext.partition(arguments, function( val ){ return typeof val != 'function'; }), - arrs = parts[0], - fn = parts[1][0], - len = Ext.max(Ext.pluck(arrs, "length")), - ret = []; - - for (var i = 0; i < len; i++) { - ret[i] = []; - if(fn){ - ret[i] = fn.apply(fn, Ext.pluck(arrs, i)); - }else{ - for (var j = 0, aLen = arrs.length; j < aLen; j++){ - ret[i].push( arrs[j][i] ); - } - } - } - return ret; - }, - - - getCmp : function(id){ - return Ext.ComponentMgr.get(id); - }, - - - useShims: E.isIE6 || (E.isMac && E.isGecko2), - - - - type : function(o){ - if(o === undefined || o === null){ - return false; - } - if(o.htmlElement){ - return 'element'; - } - var t = typeof o; - if(t == 'object' && o.nodeName) { - switch(o.nodeType) { - case 1: return 'element'; - case 3: return (/\S/).test(o.nodeValue) ? 'textnode' : 'whitespace'; - } - } - if(t == 'object' || t == 'function') { - switch(o.constructor) { - case Array: return 'array'; - case RegExp: return 'regexp'; - case Date: return 'date'; - } - if(typeof o.length == 'number' && typeof o.item == 'function') { - return 'nodelist'; - } - } - return t; - }, - - intercept : function(o, name, fn, scope){ - o[name] = o[name].createInterceptor(fn, scope); - }, - - - callback : function(cb, scope, args, delay){ - if(typeof cb == 'function'){ - if(delay){ - cb.defer(delay, scope, args || []); - }else{ - cb.apply(scope, args || []); - } - } - } - }; -}()); - - -Ext.apply(Function.prototype, { - - createSequence : function(fcn, scope){ - var method = this; - return (typeof fcn != 'function') ? - this : - function(){ - var retval = method.apply(this || window, arguments); - fcn.apply(scope || this || window, arguments); - return retval; - }; - } -}); - - - -Ext.applyIf(String, { - - - escape : function(string) { - return string.replace(/('|\\)/g, "\\$1"); - }, - - - leftPad : function (val, size, ch) { - var result = String(val); - if(!ch) { - ch = " "; - } - while (result.length < size) { - result = ch + result; - } - return result; - } -}); - - -String.prototype.toggle = function(value, other){ - return this == value ? other : value; -}; - - -String.prototype.trim = function(){ - var re = /^\s+|\s+$/g; - return function(){ return this.replace(re, ""); }; -}(); - - - -Date.prototype.getElapsed = function(date) { - return Math.abs((date || new Date()).getTime()-this.getTime()); -}; - - - -Ext.applyIf(Number.prototype, { - - constrain : function(min, max){ - return Math.min(Math.max(this, min), max); - } +/** + * @class Ext.util.TaskRunner + * Provides the ability to execute one or more arbitrary tasks in a multithreaded + * manner. Generally, you can use the singleton {@link Ext.TaskMgr} instead, but + * if needed, you can create separate instances of TaskRunner. Any number of + * separate tasks can be started at any time and will run independently of each + * other. Example usage: + *

+// Start a simple clock task that updates a div once per second
+var updateClock = function(){
+    Ext.fly('clock').update(new Date().format('g:i:s A'));
+} 
+var task = {
+    run: updateClock,
+    interval: 1000 //1 second
+}
+var runner = new Ext.util.TaskRunner();
+runner.start(task);
+
+// equivalent using TaskMgr
+Ext.TaskMgr.start({
+    run: updateClock,
+    interval: 1000
 });
 
+ * 
+ *

See the {@link #start} method for details about how to configure a task object.

+ * Also see {@link Ext.util.DelayedTask}. + * + * @constructor + * @param {Number} interval (optional) The minimum precision in milliseconds supported by this TaskRunner instance + * (defaults to 10) + */ Ext.util.TaskRunner = function(interval){ interval = interval || 10; var tasks = [], @@ -941,14 +1089,14 @@ Ext.util.TaskRunner = function(interval){ id = 0, running = false, - + // private stopThread = function(){ running = false; clearInterval(id); id = 0; }, - + // private startThread = function(){ if(!running){ running = true; @@ -956,7 +1104,7 @@ Ext.util.TaskRunner = function(interval){ } }, - + // private removeTask = function(t){ removeQueue.push(t); if(t.onStop){ @@ -964,7 +1112,7 @@ Ext.util.TaskRunner = function(interval){ } }, - + // private runTasks = function(){ var rqLen = removeQueue.length, now = new Date().getTime(); @@ -996,7 +1144,30 @@ Ext.util.TaskRunner = function(interval){ } }; - + /** + * Starts a new task. + * @method start + * @param {Object} task

A config object that supports the following properties:

+ *

Before each invocation, Ext injects the property taskRunCount into the task object so + * that calculations based on the repeat count can be performed.

+ * @return {Object} The task + */ this.start = function(task){ tasks.push(task); task.taskStartTime = new Date().getTime(); @@ -1006,13 +1177,21 @@ Ext.util.TaskRunner = function(interval){ return task; }; - + /** + * Stops an existing running task. + * @method stop + * @param {Object} task The task to stop + * @return {Object} The task + */ this.stop = function(task){ removeTask(task); return task; }; - + /** + * Stops all tasks that are currently running. + * @method stopAll + */ this.stopAll = function(){ stopThread(); for(var i = 0, len = tasks.length; i < len; i++){ @@ -1025,7 +1204,24 @@ Ext.util.TaskRunner = function(interval){ }; }; - +/** + * @class Ext.TaskMgr + * @extends Ext.util.TaskRunner + * A static {@link Ext.util.TaskRunner} instance that can be used to start and stop arbitrary tasks. See + * {@link Ext.util.TaskRunner} for supported methods and task config properties. + *

+// Start a simple clock task that updates a div once per second
+var task = {
+    run: function(){
+        Ext.fly('clock').update(new Date().format('g:i:s A'));
+    },
+    interval: 1000 //1 second
+}
+Ext.TaskMgr.start(task);
+
+ *

See the {@link #start} method for details about how to configure a task object.

+ * @singleton + */ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ var libFlyweight; @@ -1165,7 +1361,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ ret = [x,y]; } } - return ret + return ret; }, setXY : function(el, xy) { @@ -1176,7 +1372,9 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ pos; for (pos in pts) { - if(!isNaN(pts[pos])) style[pos] = pts[pos] + "px" + if (!isNaN(pts[pos])) { + style[pos] = pts[pos] + "px"; + } } }, @@ -1188,9 +1386,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ this.setXY(el, [false, y]); } }; -})();Ext.lib.Dom.getRegion = function(el) { - return Ext.lib.Region.getRegion(el); -};Ext.lib.Event = function() { +})();Ext.lib.Event = function() { var loadComplete = false, unloadListeners = {}, retryCount = 0, @@ -1200,7 +1396,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ win = window, doc = document, - + // constants POLL_RETRYS = 200, POLL_INTERVAL = 20, TYPE = 0, @@ -1212,7 +1408,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ UNLOAD = 'unload', MOUSEOVER = 'mouseover', MOUSEOUT = 'mouseout', - + // private doAdd = function() { var ret; if (win.addEventListener) { @@ -1238,7 +1434,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ } return ret; }(), - + // private doRemove = function(){ var ret; if (win.removeEventListener) { @@ -1279,7 +1475,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ return false; } - + // private function _tryPreloadAttach() { var ret = false, notAvail = [], @@ -1317,7 +1513,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ return ret; } - + // private function startInterval() { if(!_interval){ var callback = function() { @@ -1327,7 +1523,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ } } - + // private function getScroll() { var dd = doc.documentElement, db = doc.body; @@ -1340,7 +1536,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ } } - + // private function getPageCoord (ev, xy) { ev = ev.browserEvent || ev; var coord = ev['page' + xy]; @@ -1369,7 +1565,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ startInterval(); }, - + // This function should ALWAYS be called from Ext.EventManager addListener: function(el, eventName, fn) { el = Ext.getDom(el); if (el && fn) { @@ -1385,7 +1581,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ return false; }, - + // This function should ALWAYS be called from Ext.EventManager removeListener: function(el, eventName, fn) { el = Ext.getDom(el); var i, len, li, lis; @@ -1413,7 +1609,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ if(!node){ return; } - + // work around firefox bug, https://bugzilla.mozilla.org/show_bug.cgi?id=101197 var s = HTMLElement.prototype.toString.call(node); if(s == '[xpconnect wrapped native prototype]' || s == '[object XULElement]'){ return; @@ -1486,13 +1682,13 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ return ev.charCode || ev.keyCode || 0; }, - - + //clearCache: function() {}, + // deprecated, call from EventManager getListeners : function(el, eventName) { Ext.EventManager.getListeners(el, eventName); }, - + // deprecated, call from EventManager purgeElement : function(el, recurse, eventName) { Ext.EventManager.purgeElement(el, recurse, eventName); }, @@ -1501,8 +1697,8 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ loadComplete = true; if (Ext.isIE && e !== true) { - - + // IE8 complains that _load is null or not an object + // so lets remove self via arguments.callee doRemove(win, "load", arguments.callee); } }, @@ -1530,7 +1726,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ } }; - + // Initialize stuff. pub.on = pub.addListener; pub.un = pub.removeListener; if (doc && doc.body) { @@ -1543,17 +1739,23 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ return pub; }(); - +/* +* Portions of this file are based on pieces of Yahoo User Interface Library +* Copyright (c) 2007, Yahoo! Inc. All rights reserved. +* YUI licensed under the BSD License: +* http://developer.yahoo.net/yui/license.txt +*/ Ext.lib.Ajax = function() { - var activeX = ['MSXML2.XMLHTTP.3.0', - 'MSXML2.XMLHTTP', - 'Microsoft.XMLHTTP'], + var activeX = ['Msxml2.XMLHTTP.6.0', + 'Msxml2.XMLHTTP.3.0', + 'Msxml2.XMLHTTP'], CONTENTTYPE = 'Content-Type'; - + // private function setHeader(o) { var conn = o.conn, - prop; + prop, + headers = {}; function setTheHeaders(conn, headers){ for (prop in headers) { @@ -1563,17 +1765,12 @@ Ext.lib.Ajax = function() { } } - if (pub.defaultHeaders) { - setTheHeaders(conn, pub.defaultHeaders); - } - - if (pub.headers) { - setTheHeaders(conn, pub.headers); - delete pub.headers; - } + Ext.apply(headers, pub.headers, pub.defaultHeaders); + setTheHeaders(conn, headers); + delete pub.headers; } - + // private function createExceptionObject(tId, callbackArg, isAbort, isTimeout) { return { tId : tId, @@ -1585,19 +1782,19 @@ Ext.lib.Ajax = function() { }; } - + // private function initHeader(label, value) { (pub.headers = pub.headers || {})[label] = value; } - + // private function createResponseObject(o, callbackArg) { var headerObj = {}, headerStr, conn = o.conn, t, s, - + // see: https://prototype.lighthouseapp.com/projects/8886/tickets/129-ie-mangles-http-response-status-code-204-to-1223 isBrokenStatus = conn.status == 1223; try { @@ -1616,7 +1813,7 @@ Ext.lib.Ajax = function() { return { tId : o.tId, - + // Normalize the status and statusText when IE returns 1223, see the above link. status : isBrokenStatus ? 204 : conn.status, statusText : isBrokenStatus ? 'No Content' : conn.statusText, getResponseHeader : function(header){return headerObj[header.toLowerCase()];}, @@ -1627,7 +1824,7 @@ Ext.lib.Ajax = function() { }; } - + // private function releaseObject(o) { if (o.tId) { pub.conn[o.tId] = null; @@ -1636,7 +1833,7 @@ Ext.lib.Ajax = function() { o = null; } - + // private function handleTransactionResponse(o, callback, isAbort, isTimeout) { if (!callback) { releaseObject(o); @@ -1702,10 +1899,28 @@ Ext.lib.Ajax = function() { releaseObject(o); responseObject = null; } + + function checkResponse(o, callback, conn, tId, poll, cbTimeout){ + if (conn && conn.readyState == 4) { + clearInterval(poll[tId]); + poll[tId] = null; + if (cbTimeout) { + clearTimeout(pub.timeout[tId]); + pub.timeout[tId] = null; + } + handleTransactionResponse(o, callback); + } + } + + function checkTimeout(o, callback){ + pub.abort(o, callback, true); + } + + // private function handleReadyState(o, callback){ - callback = callback || {}; + callback = callback || {}; var conn = o.conn, tId = o.tId, poll = pub.poll, @@ -1713,29 +1928,12 @@ Ext.lib.Ajax = function() { if (cbTimeout) { pub.conn[tId] = conn; - pub.timeout[tId] = setTimeout(function() { - pub.abort(o, callback, true); - }, cbTimeout); + pub.timeout[tId] = setTimeout(checkTimeout.createCallback(o, callback), cbTimeout); } - - poll[tId] = setInterval( - function() { - if (conn && conn.readyState == 4) { - clearInterval(poll[tId]); - poll[tId] = null; - - if (cbTimeout) { - clearTimeout(pub.timeout[tId]); - pub.timeout[tId] = null; - } - - handleTransactionResponse(o, callback); - } - }, - pub.pollInterval); + poll[tId] = setInterval(checkResponse.createCallback(o, callback, conn, tId, poll, cbTimeout), pub.pollInterval); } - + // private function asyncRequest(method, uri, callback, postData) { var o = getConnectionObject() || null; @@ -1760,7 +1958,7 @@ Ext.lib.Ajax = function() { return o; } - + // private function getConnectionObject() { var o; @@ -1774,7 +1972,7 @@ Ext.lib.Ajax = function() { } } - + // private function createXhrObject(transactionId) { var http; @@ -1814,30 +2012,31 @@ Ext.lib.Ajax = function() { }, serializeForm : function(form) { - var fElements = form.elements || (document.forms[form] || Ext.getDom(form)).elements, - hasSubmit = false, - encoder = encodeURIComponent, - name, - data = '', - type; - - Ext.each(fElements, function(element) { + var fElements = form.elements || (document.forms[form] || Ext.getDom(form)).elements, + hasSubmit = false, + encoder = encodeURIComponent, + name, + data = '', + type, + hasValue; + + Ext.each(fElements, function(element){ name = element.name; type = element.type; - - if (!element.disabled && name){ - if(/select-(one|multiple)/i.test(type)) { - Ext.each(element.options, function(opt) { + + if (!element.disabled && name) { + if (/select-(one|multiple)/i.test(type)) { + Ext.each(element.options, function(opt){ if (opt.selected) { - data += String.format("{0}={1}&", encoder(name), encoder((opt.hasAttribute ? opt.hasAttribute('value') : opt.getAttribute('value') !== null) ? opt.value : opt.text)); + hasValue = opt.hasAttribute ? opt.hasAttribute('value') : opt.getAttributeNode('value').specified; + data += String.format("{0}={1}&", encoder(name), encoder(hasValue ? opt.value : opt.text)); } }); - } else if(!(/file|undefined|reset|button/i.test(type))) { - if(!(/radio|checkbox/i.test(type) && !element.checked) && !(type == 'submit' && hasSubmit)){ - - data += encoder(name) + '=' + encoder(element.value) + '&'; - hasSubmit = /submit/i.test(type); - } + } else if (!(/file|undefined|reset|button/i.test(type))) { + if (!(/radio|checkbox/i.test(type) && !element.checked) && !(type == 'submit' && hasSubmit)) { + data += encoder(name) + '=' + encoder(element.value) + '&'; + hasSubmit = /submit/i.test(type); + } } } }); @@ -1854,32 +2053,32 @@ Ext.lib.Ajax = function() { pollInterval : 50, transactionId : 0, - - - - - - - - - - - - - - - - - - - - - - - - - - +// This is never called - Is it worth exposing this? +// setProgId : function(id) { +// activeX.unshift(id); +// }, + +// This is never called - Is it worth exposing this? +// setDefaultPostHeader : function(b) { +// this.useDefaultHeader = b; +// }, + +// This is never called - Is it worth exposing this? +// setDefaultXhrHeader : function(b) { +// this.useDefaultXhrHeader = b; +// }, + +// This is never called - Is it worth exposing this? +// setPollingInterval : function(i) { +// if (typeof i == 'number' && isFinite(i)) { +// this.pollInterval = i; +// } +// }, + +// This is never called - Is it worth exposing this? +// resetDefaultHeaders : function() { +// this.defaultHeaders = null; +// }, abort : function(o, callback, isTimeout) { var me = this, @@ -1899,97 +2098,12 @@ Ext.lib.Ajax = function() { }, isCallInProgress : function(o) { - + // if there is a connection and readyState is not 0 or 4 return o.conn && !{0:true,4:true}[o.conn.readyState]; } }; return pub; -}(); Ext.lib.Region = function(t, r, b, l) { - var me = this; - me.top = t; - me[1] = t; - me.right = r; - me.bottom = b; - me.left = l; - me[0] = l; - }; - - Ext.lib.Region.prototype = { - contains : function(region) { - var me = this; - return ( region.left >= me.left && - region.right <= me.right && - region.top >= me.top && - region.bottom <= me.bottom ); - - }, - - getArea : function() { - var me = this; - return ( (me.bottom - me.top) * (me.right - me.left) ); - }, - - intersect : function(region) { - var me = this, - t = Math.max(me.top, region.top), - r = Math.min(me.right, region.right), - b = Math.min(me.bottom, region.bottom), - l = Math.max(me.left, region.left); - - if (b >= t && r >= l) { - return new Ext.lib.Region(t, r, b, l); - } - }, - - union : function(region) { - var me = this, - t = Math.min(me.top, region.top), - r = Math.max(me.right, region.right), - b = Math.max(me.bottom, region.bottom), - l = Math.min(me.left, region.left); - - return new Ext.lib.Region(t, r, b, l); - }, - - constrainTo : function(r) { - var me = this; - me.top = me.top.constrain(r.top, r.bottom); - me.bottom = me.bottom.constrain(r.top, r.bottom); - me.left = me.left.constrain(r.left, r.right); - me.right = me.right.constrain(r.left, r.right); - return me; - }, - - adjust : function(t, l, b, r) { - var me = this; - me.top += t; - me.left += l; - me.right += r; - me.bottom += b; - return me; - } - }; - - Ext.lib.Region.getRegion = function(el) { - var p = Ext.lib.Dom.getXY(el), - t = p[1], - r = p[0] + el.offsetWidth, - b = p[1] + el.offsetHeight, - l = p[0]; - - return new Ext.lib.Region(t, r, b, l); - }; Ext.lib.Point = function(x, y) { - if (Ext.isArray(x)) { - y = x[1]; - x = x[0]; - } - var me = this; - me.x = me.right = me.left = me[0] = x; - me.y = me.top = me.bottom = me[1] = y; - }; - - Ext.lib.Point.prototype = new Ext.lib.Region(); -(function(){ +}();(function(){ var EXTLIB = Ext.lib, noNegatives = /width|height|opacity|padding/i, offsetAttribute = /^((width|height)|(top|left))$/, @@ -2413,7 +2527,13 @@ Ext.lib.Ajax = function() { if(control.length > 0 && !Ext.isArray(control[0])){ control = [control]; }else{ - + /* + var tmp = []; + for (i = 0,len = control.length; i < len; ++i) { + tmp[i] = control[i]; + } + control = tmp; + */ } Ext.fly(el, '_anim').position(); @@ -2451,9 +2571,9 @@ Ext.lib.Ajax = function() { return [val[0] - pageXY[0] + start[0], val[1] - pageXY[1] + start[1]]; }; })(); -})(); +})();// Easing functions (function(){ - + // shortcuts to aid compression var abs = Math.abs, pi = Math.PI, asin = Math.asin, @@ -2584,10 +2704,10 @@ Ext.lib.Ajax = function() { (function() { var EXTLIB = Ext.lib; - + // Color Animation EXTLIB.Anim.color = function(el, args, duration, easing, cb, scope) { return EXTLIB.Anim.run(el, args, duration, easing, cb, scope, EXTLIB.ColorAnim); - } + }; EXTLIB.ColorAnim = function(el, attributes, duration, method) { EXTLIB.ColorAnim.superclass.constructor.call(this, el, attributes, duration, method); @@ -2605,7 +2725,7 @@ Ext.lib.Ajax = function() { return typeof v !== 'undefined'; }; - + // private function parseColor(s) { var pi = parseInt, base, @@ -2694,7 +2814,7 @@ Ext.lib.Ajax = function() { (function() { - + // Scroll Animation var EXTLIB = Ext.lib; EXTLIB.Anim.scroll = function(el, args, duration, easing, cb, scope) { return EXTLIB.Anim.run(el, args, duration, easing, cb, scope, EXTLIB.Scroll); @@ -2750,7 +2870,7 @@ Ext.lib.Ajax = function() { } }); })(); - if(Ext.isIE) { + if (Ext.isIE) { function fnCleanUp() { var p = Function.prototype; delete p.createSequence; @@ -2763,4 +2883,4 @@ Ext.lib.Ajax = function() { } window.attachEvent("onunload", fnCleanUp); } -})(); +})(); \ No newline at end of file