From 530ef4b6c5b943cfa68b779d11cf7de29aa878bf Mon Sep 17 00:00:00 2001
From: Sean Kellogg 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. 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: 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. 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
+ * Returns true if the passed value is empty. The value is deemed to be empty if it is 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:
+ * Utility method for returning a default value if the passed value is empty. The value is deemed to be empty if it is example: Zips N sets together. See the {@link #start} method for details about how to configure a task object. A config object that supports the following properties: The function to execute each time the task is invoked. The
+ * function will be called at each interval and passed the If a particular scope ( Return
+ *
+ *
+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.
+ }
+});
+
+ *
subclass
: Function superclass
: Function overrides
: Object 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];
+ }
+ };
+ var oc = Object.prototype.constructor;
+
+ return function(sb, sp, overrides){
+ if(typeof sp == 'object'){
+ overrides = sp;
+ sp = sb;
+ sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);};
+ }
+ var F = function(){},
+ sbp,
+ spp = sp.prototype;
+
+ F.prototype = spp;
+ sbp = sb.prototype = new F();
+ sbp.constructor=sb;
+ sb.superclass=spp;
+ if(spp.constructor == oc){
+ spp.constructor=sp;
+ }
+ sb.override = function(o){
+ Ext.override(sb, o);
+ };
+ sbp.superclass = sbp.supr = (function(){
+ return spp;
+ });
+ sbp.override = io;
+ Ext.override(sb, overrides);
+ sb.extend = function(o){return Ext.extend(sb, o);};
+ return sb;
+ };
+ }(),
+
+ /**
+ * Adds a list of functions to the prototype of an existing class, overwriting any existing methods with the same name.
+ * Usage:
+ * @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;
+ Ext.apply(p, overrides);
+ if(Ext.isIE && overrides.hasOwnProperty('toString')){
+ p.toString = overrides.toString;
+ }
+ }
+ },
+
+ /**
+ * 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.override(MyClass, {
+ newMethod1: function(){
+ // etc.
+ },
+ newMethod2: function(foo){
+ // etc.
+ }
+});
+
+ * @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) {
+ d = v.split(".");
+ o = window[d[0]] = window[d[0]] || {};
+ Ext.each(d.slice(1), function(v2){
+ o = o[v2] = o[v2] || {};
+ });
+ });
+ 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 = [],
+ e = encodeURIComponent;
+
+ Ext.iterate(o, function(key, item){
+ empty = Ext.isEmpty(item);
+ Ext.each(empty ? key : item, function(val){
+ buf.push('&', e(key), '=', (!Ext.isEmpty(val) && (val != key || !empty)) ? (Ext.isDate(val) ? Ext.encode(val).replace(/"/g, '') : e(val)) : '');
+ });
+ });
+ if(!pre){
+ buf.shift();
+ pre = '';
+ }
+ return pre + buf.join('');
+ },
+
+ /**
+ * Takes an encoded URL and and converts it to an object. Example:
+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} 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 {};
+ }
+ var obj = {},
+ pairs = string.split('&'),
+ d = decodeURIComponent,
+ name,
+ value;
+ Ext.each(pairs, function(pair) {
+ pair = pair.split('=');
+ name = d(pair[0]);
+ value = d(pair[1]);
+ obj[name] = overwrite || !obj[name] ? value :
+ [].concat(obj[name]).concat(value);
+ });
+ 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;
+ }
+ 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){
+ res = [];
+ for(var x = 0, len = a.length; x < len; x++) {
+ res.push(a[x]);
+ }
+ return res.slice(i || 0, j || res.length);
+ } :
+ function(a, i, j){
+ return Array.prototype.slice.call(a, i || 0, j || a.length);
+ }
+ }(),
+
+ 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
+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"]}
+
index
. This function is called with
+ * the following arguments:
+ *
+ *
item
: Mixed
+ * index
+ * in the passed array
index
: Number
+ * allItems
: Array
+ * array
passed as the first
+ * argument to Ext.each
.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;
+ }
+ if(!Ext.isIterable(array) || Ext.isPrimitive(array)){
+ array = [array];
+ }
+ for(var i = 0, len = array.length; i < len; i++){
+ if(fn.call(scope || array[i], array[i], i, array) === false){
+ return i;
+ };
+ }
+ },
+
+ /**
+ * 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:
+ *
+ *
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;
+ }
+ if(Ext.isIterable(obj)){
+ Ext.each(obj, fn, scope);
+ return;
+ }else if(typeof obj == 'object'){
+ for(var prop in obj){
+ if(obj.hasOwnProperty(prop)){
+ if(fn.call(scope || obj, prop, obj[prop], obj) === false){
+ return;
+ };
+ }
+ }
+ }
+ },
+
+ /**
+ * 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:
+ *
+ * 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;
+ }
+ if (el.dom){
+ return el.dom;
+ } 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;
+ } else {
+ return null;
+ }
+ }
+ return e;
+ } else {
+ return el;
+ }
+ }
+ },
+
+ /**
+ * 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);
+ },
+
+ /**
+ * Removes a DOM node from the document.
+ */
+ /**
+ *
+// 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
+}
+ *
true
, then DOM event listeners are also removed from all child nodes. The body node
+ * will be ignored if passed in.
+ *
+ * @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.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:
+ *
+Ext.namespace('Company', 'Company.data');
+Ext.namespace('Company.data'); // equivalent and preferable to above syntax
+Company.Widget = function() { ... }
+Company.data.CustomStore = function(config) { ... }
+
+ * @param {Function} fcn The function to call before the original
+ * @param {Object} scope (optional) The scope (
+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"
+
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) ?
+ this :
+ function() {
+ var me = this,
+ args = arguments;
+ fcn.target = me;
+ fcn.method = method;
+ return (fcn.apply(scope || me || window, args) !== false) ?
+ method.apply(me || window, args) :
+ null;
+ };
+ },
+
+ /**
+ * 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.
+ *
+ * @return {Function} The new function
+ */
+ createCallback : function(/*args...*/){
+ // make args available, in function below
+ var args = arguments,
+ method = this;
+ return function() {
+ return method.apply(window, args);
+ };
+ },
+
+ /**
+ * Creates a delegate (callback) that sets the scope to obj.
+ * Call directly on any function. Example:
+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')
+});
+
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:
+ *
+ * @param {Object} scope (optional) The scope (
+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']));
+
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() {
+ var callArgs = args || arguments;
+ if (appendArgs === true){
+ callArgs = Array.prototype.slice.call(arguments, 0);
+ callArgs = callArgs.concat(args);
+ }else if (Ext.isNumber(appendArgs)){
+ 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:
+ *
+ * @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 (
+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);
+
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){
+ return setTimeout(fn, millis);
+ }
+ fn();
+ return 0;
+ }
+});
+
+/**
+ * @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:
+ *
+ * @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){
+ return args[i];
+ });
+ }
+});
+
+/**
+ * @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;
+ from += (from < 0) ? len : 0;
+ for (; from < len; ++from){
+ if(this[from] === o){
+ return from;
+ }
+ }
+ 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){
+ this.splice(index, 1);
+ }
+ return this;
+ }
+});
+/**
+ * @class Ext
+ */
+
+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");
+ /**
+ * Namespace alloted for extensions to the framework.
+ * @property ux
+ * @type Object
+ */
+
+Ext.apply(Ext, function(){
+ var E = Ext,
+ idSeed = 0,
+ scrollWidth = null;
+
+ return {
+ /**
+ * A reusable empty function
+ * @property
+ * @type Function
+ */
+ emptyFn : function(){},
+
+ /**
+ * URL to a 1x1 transparent gif image used by Ext to create inline icons with CSS background images.
+ * In older versions of IE, this defaults to "http://extjs.com/s.gif" and you should change this to a URL on your server.
+ * For other browsers it uses an inline data URL.
+ * @type String
+ */
+ 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));
+ },
+
+ /**
+ * Returns the current HTML document object as an {@link Ext.Element}.
+ * @return Ext.Element The document
+ */
+ getDoc : function(){
+ return Ext.get(document);
+ },
+
+ /**
+ * Utility method for validating that a value is numeric, returning the specified default value if it is not.
+ * @param {Mixed} value Should be a number, but any type will be handled appropriately
+ * @param {Number} defaultValue The value to return if the original value is non-numeric
+ * @return {Number} Value, if numeric, else defaultValue
+ */
+ 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;
+ },
+
+ /**
+ *
+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 {Object} obj The list of behaviors to apply
+ */
+ addBehaviors : function(o){
+ if(!Ext.isReady){
+ Ext.onReady(function(){
+ Ext.addBehaviors(o);
+ });
+ } else {
+ var cache = {}, // simple cache for applying multiple behaviors to same selector does query multiple times
+ parts,
+ b,
+ s;
+ for (b in o) {
+ if ((parts = b.split('@'))[1]) { // for Object prototype breakers
+ s = parts[0];
+ if(!cache[s]){
+ cache[s] = Ext.select(s);
+ }
+ cache[s].on(parts[1], o[b]);
+ }
+ }
+ cache = null;
+ }
+ },
+
+ /**
+ * Utility method for getting the width of the browser scrollbar. This can differ depending on
+ * operating system settings, such as the theme or font size.
+ * @param {Boolean} force (optional) true to force a recalculation of the value.
+ * @return {Number} The width of the scrollbar.
+ */
+ getScrollBarWidth: function(force){
+ if(!Ext.isReady){
+ return 0;
+ }
+
+ if(force === true || scrollWidth === null){
+ // Append our div, do our calculation and then remove it
+ 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();
+ // Need to add 2 to ensure we leave enough space
+ scrollWidth = w1 - w2 + 2;
+ }
+ return scrollWidth;
+ },
+
+
+ // deprecated
+ 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;
+ },
+
+ /**
+ * Copies a set of named properties fom the source object to the destination object.
+ *
+Ext.addBehaviors({
+ // add a listener for click on all anchors in element with id foo
+ '#foo a@click' : function(e, t){
+ // do something
+ },
+
+ // add the same listener to multiple selectors (separated by comma BEFORE the @)
+ '#foo a, #bar span.some-class@mouseover' : function(){
+ // do something
+ }
+});
+ *
+ * @param {Object} dest The destination object.
+ * @param {Object} source The source object.
+ * @param {Array/String} names Either an Array of property names, or a comma-delimited list
+ * of property names to copy.
+ * @return {Object} The modified object.
+ */
+ 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;
+ },
+
+ /**
+ * Attempts to destroy any objects passed to it by removing all event listeners, removing them from the
+ * DOM (if applicable) and calling their destroy functions (if available). This method is primarily
+ * intended for arguments of type {@link Ext.Element} and {@link Ext.Component}, but any subclass of
+ * {@link Ext.util.Observable} can be passed in. Any number of elements and/or components can be
+ * passed into this function in a single call as separate arguments.
+ * @param {Mixed} arg1 An {@link Ext.Element}, {@link Ext.Component}, or an Array of either of these to destroy
+ * @param {Mixed} arg2 (optional)
+ * @param {Mixed} etc... (optional)
+ */
+ 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);
+ },
+
+ /**
+ * Attempts to destroy and then remove a set of named properties of the passed object.
+ * @param {Object} o The object (most likely a Component) who's properties you wish to destroy.
+ * @param {Mixed} arg1 The name of the property to destroy and remove from the object.
+ * @param {Mixed} etc... More property names to destroy and remove.
+ */
+ 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]];
+ }
+ },
+
+ /**
+ * Creates a copy of the passed Array with falsy values removed.
+ * @param {Array/NodeList} arr The Array from which to remove falsy values.
+ * @return {Array} The new, compressed Array.
+ */
+ clean : function(arr){
+ var ret = [];
+ Ext.each(arr, function(v){
+ if(!!v){
+ ret.push(v);
+ }
+ });
+ return ret;
+ },
+
+ /**
+ * Creates a copy of the passed Array, filtered to contain only unique values.
+ * @param {Array} arr The Array to filter
+ * @return {Array} The new Array containing unique values.
+ */
+ unique : function(arr){
+ var ret = [],
+ collect = {};
+
+ Ext.each(arr, function(v) {
+ if(!collect[v]){
+ ret.push(v);
+ }
+ collect[v] = true;
+ });
+ return ret;
+ },
+
+ /**
+ * Recursively flattens into 1-d Array. Injects Arrays inline.
+ * @param {Array} arr The array to flatten
+ * @return {Array} The new, flattened array.
+ */
+ 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);
+ },
+
+ /**
+ * Returns the minimum value in the Array.
+ * @param {Array|NodeList} arr The Array from which to select the minimum value.
+ * @param {Function} comp (optional) a function to perform the comparision which determines minimization.
+ * If omitted the "<" operator will be used. Note: gt = 1; eq = 0; lt = -1
+ * @return {Object} The minimum value in the Array.
+ */
+ 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;
+ },
+
+ /**
+ * Returns the maximum value in the Array
+ * @param {Array|NodeList} arr The Array from which to select the maximum value.
+ * @param {Function} comp (optional) a function to perform the comparision which determines maximization.
+ * If omitted the ">" operator will be used. Note: gt = 1; eq = 0; lt = -1
+ * @return {Object} The maximum value in the Array.
+ */
+ 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;
+ },
+
+ /**
+ * Calculates the mean of the Array
+ * @param {Array} arr The Array to calculate the mean value of.
+ * @return {Number} The mean.
+ */
+ mean : function(arr){
+ return arr.length > 0 ? Ext.sum(arr) / arr.length : undefined;
+ },
+
+ /**
+ * Calculates the sum of the Array
+ * @param {Array} arr The Array to calculate the sum value of.
+ * @return {Number} The sum.
+ */
+ sum : function(arr){
+ var ret = 0;
+ Ext.each(arr, function(v) {
+ ret += v;
+ });
+ return ret;
+ },
+
+ /**
+ * Partitions the set into two sets: a true set and a false set.
+ * Example:
+ * Example2:
+ *
+ImageComponent = Ext.extend(Ext.BoxComponent, {
+ initComponent: function() {
+ this.autoEl = { tag: 'img' };
+ MyComponent.superclass.initComponent.apply(this, arguments);
+ this.initialBox = Ext.copyTo({}, this.initialConfig, 'x,y,width,height');
+ }
+});
+ *
+ * @param {Array|NodeList} arr The array to partition
+ * @param {Function} truth (optional) a function to determine truth. If this is omitted the element
+ * itself must be able to be evaluated for its truthfulness.
+ * @return {Array} [true
+// Example 1:
+Ext.partition([true, false, true, true, false]); // [[true, true, true], [false, false]]
+
+// Example 2:
+Ext.partition(
+ Ext.query("p"),
+ function(val){
+ return val.className == "class1"
+ }
+);
+// true are those paragraph elements with a className of "class1",
+// false set are those that do not have that className.
+ *
+ * @param {Array|NodeList} arr The Array of items to invoke the method on.
+ * @param {String} methodName The method name to invoke.
+ * @param {...*} args Arguments to send into the method invocation.
+ * @return {Array} The results of invoking the method on each item in the array.
+ */
+ 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;
+ },
+
+ /**
+ * Plucks the value of a property from each item in the Array
+ *
+// Example:
+Ext.invoke(Ext.query("p"), "getAttribute", "id");
+// [el1.getAttribute("id"), el2.getAttribute("id"), ..., elN.getAttribute("id")]
+ *
+ * @param {Array|NodeList} arr The Array of items to pluck the value from.
+ * @param {String} prop The property name to pluck from each element.
+ * @return {Array} The value from each item in the Array.
+ */
+ pluck : function(arr, prop){
+ var ret = [];
+ Ext.each(arr, function(v) {
+ ret.push( v[prop] );
+ });
+ return ret;
+ },
+
+ /**
+ *
+// Example:
+Ext.pluck(Ext.query("p"), "className"); // [el1.className, el2.className, ..., elN.className]
+ *
+ * @param {Arrays|NodeLists} arr This argument may be repeated. Array(s) to contribute values.
+ * @param {Function} zipper (optional) The last item in the argument list. This will drive how the items are zipped together.
+ * @return {Array} The zipped set.
+ */
+ 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;
+ },
+
+ /**
+ * This is shorthand reference to {@link Ext.ComponentMgr#get}.
+ * Looks up an existing {@link Ext.Component Component} by {@link Ext.Component#id id}
+ * @param {String} id The component {@link Ext.Component#id id}
+ * @return Ext.Component The Component, undefined if not found, or null if a
+ * Class was found.
+ */
+ getCmp : function(id){
+ return Ext.ComponentMgr.get(id);
+ },
+
+ /**
+ * By default, Ext intelligently decides whether floating elements should be shimmed. If you are using flash,
+ * you may want to set this to true.
+ * @type Boolean
+ */
+ useShims: E.isIE6 || (E.isMac && E.isGecko2),
+
+ // inpired by a similar function in mootools library
+ /**
+ * Returns the type of object that is passed in. If the object passed in is null or undefined it
+ * return false otherwise it returns one of the following values:
+// Example 1:
+Ext.zip([1,2,3],[4,5,6]); // [[1,4],[2,5],[3,6]]
+// Example 2:
+Ext.zip(
+ [ "+", "-", "+"],
+ [ 12, 10, 22],
+ [ 43, 15, 96],
+ function(a, b, c){
+ return "$" + a + "" + b + "." + c
+ }
+); // ["$+12.43", "$-10.15", "$+22.96"]
+ *
+ *
+ * @param {Function} fcn The function to sequence
+ * @param {Object} scope (optional) The scope (
+var sayHi = function(name){
+ alert('Hi, ' + name);
+}
+
+sayHi('Fred'); // alerts "Hi, Fred"
+
+var sayGoodbye = sayHi.createSequence(function(name){
+ alert('Bye, ' + name);
+});
+
+sayGoodbye('Fred'); // both alerts show
+
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
+ */
+ 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;
+ };
+ }
+});
+
+
+/**
+ * @class String
+ * These functions are available as static methods on the JavaScript String object.
+ */
+Ext.applyIf(String, {
+
+ /**
+ * Escapes the passed string for ' and \
+ * @param {String} string The string to escape
+ * @return {String} The escaped string
+ * @static
+ */
+ escape : function(string) {
+ return string.replace(/('|\\)/g, "\\$1");
+ },
+
+ /**
+ * Pads the left side of a string with a specified character. This is especially useful
+ * for normalizing number and date strings. Example usage:
+ *
+ * @param {String} string The original string
+ * @param {Number} size The total length of the output string
+ * @param {String} char (optional) The character with which to pad the original string (defaults to empty string " ")
+ * @return {String} The padded string
+ * @static
+ */
+ leftPad : function (val, size, ch) {
+ var result = String(val);
+ if(!ch) {
+ ch = " ";
+ }
+ while (result.length < size) {
+ result = ch + result;
+ }
+ return result;
+ }
+});
+
+/**
+ * Utility function that allows you to easily switch a string between two alternating values. The passed value
+ * is compared to the current string, and if they are equal, the other value that was passed in is returned. If
+ * they are already different, the first value passed in is returned. Note that this method returns the new value
+ * but does not change the current string.
+ *
+var s = String.leftPad('123', 5, '0');
+// s now contains the string: '00123'
+ *
+ * @param {String} value The value to compare to the current string
+ * @param {String} other The new value to use if the string already equals the first value passed in
+ * @return {String} The new value
+ */
+String.prototype.toggle = function(value, other){
+ return this == value ? other : value;
+};
+
+/**
+ * Trims whitespace from either end of a string, leaving spaces within the string intact. Example:
+ *
+// alternate sort directions
+sort = sort.toggle('ASC', 'DESC');
+
+// instead of conditional logic:
+sort = (sort == 'ASC' ? 'DESC' : 'ASC');
+
+ * @return {String} The trimmed string
+ */
+String.prototype.trim = function(){
+ var re = /^\s+|\s+$/g;
+ return function(){ return this.replace(re, ""); };
+}();
+
+// here to prevent dependency on Date.js
+/**
+ Returns the number of milliseconds between this date and date
+ @param {Date} date (optional) Defaults to now
+ @return {Number} The diff in milliseconds
+ @member Date getElapsed
+ */
+Date.prototype.getElapsed = function(date) {
+ return Math.abs((date || new Date()).getTime()-this.getTime());
+};
+
+
+/**
+ * @class Number
+ */
+Ext.applyIf(Number.prototype, {
+ /**
+ * Checks whether or not the current number is within a desired range. If the number is already within the
+ * range it is returned, otherwise the min or max value is returned depending on which side of the range is
+ * exceeded. Note that this method returns the constrained value but does not change the current number.
+ * @param {Number} min The minimum number in the range
+ * @param {Number} max The maximum number in the range
+ * @return {Number} The constrained value if outside the range, otherwise the current value
+ */
+ 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:
+ *
+var s = ' foo bar ';
+alert('-' + s + '-'); //alerts "- foo bar -"
+alert('-' + s.trim() + '-'); //alerts "-foo bar-"
+
+ *
+// 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
+});
+
+ *
+ *
run
: Functionargs
argument if specified, and the
+ * current invocation count if not.this
reference) is required, be sure to specify it using the scope
argument.false
from this function to terminate the task.interval
: Numberargs
: Arrayrun
. If not specified, the current invocation count is passed.scope
: Objectrun
function. Defaults to the task config object.duration
: Numberrepeat
: Number
Before each invocation, Ext injects the property taskRunCount
into the task object so
+ * that calculations based on the repeat count can be performed.
+// 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; + + function fly(el) { + if (!libFlyweight) { + libFlyweight = new Ext.Element.Flyweight(); + } + libFlyweight.dom = el; + return libFlyweight; + } + + (function(){ + var doc = document, + isCSS1 = doc.compatMode == "CSS1Compat", + MAX = Math.max, + ROUND = Math.round, + PARSEINT = parseInt; + + Ext.lib.Dom = { + isAncestor : function(p, c) { + var ret = false; + + p = Ext.getDom(p); + c = Ext.getDom(c); + if (p && c) { + if (p.contains) { + return p.contains(c); + } else if (p.compareDocumentPosition) { + return !!(p.compareDocumentPosition(c) & 16); + } else { + while (c = c.parentNode) { + ret = c == p || ret; + } + } + } + return ret; + }, + + getViewWidth : function(full) { + return full ? this.getDocumentWidth() : this.getViewportWidth(); + }, + + getViewHeight : function(full) { + return full ? this.getDocumentHeight() : this.getViewportHeight(); + }, + + getDocumentHeight: function() { + return MAX(!isCSS1 ? doc.body.scrollHeight : doc.documentElement.scrollHeight, this.getViewportHeight()); + }, + + getDocumentWidth: function() { + return MAX(!isCSS1 ? doc.body.scrollWidth : doc.documentElement.scrollWidth, this.getViewportWidth()); + }, + + getViewportHeight: function(){ + return Ext.isIE ? + (Ext.isStrict ? doc.documentElement.clientHeight : doc.body.clientHeight) : + self.innerHeight; + }, + + getViewportWidth : function() { + return !Ext.isStrict && !Ext.isOpera ? doc.body.clientWidth : + Ext.isIE ? doc.documentElement.clientWidth : self.innerWidth; + }, + + getY : function(el) { + return this.getXY(el)[1]; + }, + + getX : function(el) { + return this.getXY(el)[0]; + }, + + getXY : function(el) { + var p, + pe, + b, + bt, + bl, + dbd, + x = 0, + y = 0, + scroll, + hasAbsolute, + bd = (doc.body || doc.documentElement), + ret = [0,0]; + + el = Ext.getDom(el); + + if(el != bd){ + if (el.getBoundingClientRect) { + b = el.getBoundingClientRect(); + scroll = fly(document).getScroll(); + ret = [ROUND(b.left + scroll.left), ROUND(b.top + scroll.top)]; + } else { + p = el; + hasAbsolute = fly(el).isStyle("position", "absolute"); + + while (p) { + pe = fly(p); + x += p.offsetLeft; + y += p.offsetTop; + + hasAbsolute = hasAbsolute || pe.isStyle("position", "absolute"); + + if (Ext.isGecko) { + y += bt = PARSEINT(pe.getStyle("borderTopWidth"), 10) || 0; + x += bl = PARSEINT(pe.getStyle("borderLeftWidth"), 10) || 0; + + if (p != el && !pe.isStyle('overflow','visible')) { + x += bl; + y += bt; + } + } + p = p.offsetParent; + } + + if (Ext.isSafari && hasAbsolute) { + x -= bd.offsetLeft; + y -= bd.offsetTop; + } + + if (Ext.isGecko && !hasAbsolute) { + dbd = fly(bd); + x += PARSEINT(dbd.getStyle("borderLeftWidth"), 10) || 0; + y += PARSEINT(dbd.getStyle("borderTopWidth"), 10) || 0; + } + + p = el.parentNode; + while (p && p != bd) { + if (!Ext.isOpera || (p.tagName != 'TR' && !fly(p).isStyle("display", "inline"))) { + x -= p.scrollLeft; + y -= p.scrollTop; + } + p = p.parentNode; + } + ret = [x,y]; + } + } + return ret + }, + + setXY : function(el, xy) { + (el = Ext.fly(el, '_setXY')).position(); + + var pts = el.translatePoints(xy), + style = el.dom.style, + pos; + + for (pos in pts) { + if(!isNaN(pts[pos])) style[pos] = pts[pos] + "px" + } + }, + + setX : function(el, x) { + this.setXY(el, [x, false]); + }, + + setY : function(el, y) { + this.setXY(el, [false, y]); + } + }; +})();Ext.lib.Dom.getRegion = function(el) { + return Ext.lib.Region.getRegion(el); +};Ext.lib.Event = function() { + var loadComplete = false, + unloadListeners = {}, + retryCount = 0, + onAvailStack = [], + _interval, + locked = false, + win = window, + doc = document, + + // constants + POLL_RETRYS = 200, + POLL_INTERVAL = 20, + EL = 0, + TYPE = 0, + FN = 1, + WFN = 2, + OBJ = 2, + ADJ_SCOPE = 3, + SCROLLLEFT = 'scrollLeft', + SCROLLTOP = 'scrollTop', + UNLOAD = 'unload', + MOUSEOVER = 'mouseover', + MOUSEOUT = 'mouseout', + // private + doAdd = function() { + var ret; + if (win.addEventListener) { + ret = function(el, eventName, fn, capture) { + if (eventName == 'mouseenter') { + fn = fn.createInterceptor(checkRelatedTarget); + el.addEventListener(MOUSEOVER, fn, (capture)); + } else if (eventName == 'mouseleave') { + fn = fn.createInterceptor(checkRelatedTarget); + el.addEventListener(MOUSEOUT, fn, (capture)); + } else { + el.addEventListener(eventName, fn, (capture)); + } + return fn; + }; + } else if (win.attachEvent) { + ret = function(el, eventName, fn, capture) { + el.attachEvent("on" + eventName, fn); + return fn; + }; + } else { + ret = function(){}; + } + return ret; + }(), + // private + doRemove = function(){ + var ret; + if (win.removeEventListener) { + ret = function (el, eventName, fn, capture) { + if (eventName == 'mouseenter') { + eventName = MOUSEOVER; + } else if (eventName == 'mouseleave') { + eventName = MOUSEOUT; + } + el.removeEventListener(eventName, fn, (capture)); + }; + } else if (win.detachEvent) { + ret = function (el, eventName, fn) { + el.detachEvent("on" + eventName, fn); + }; + } else { + ret = function(){}; + } + return ret; + }(); + + function checkRelatedTarget(e) { + return !elContains(e.currentTarget, pub.getRelatedTarget(e)); + } + + function elContains(parent, child) { + if(parent && parent.firstChild){ + while(child) { + if(child === parent) { + return true; + } + child = child.parentNode; + if(child && (child.nodeType != 1)) { + child = null; + } + } + } + return false; + } + + // private + function _tryPreloadAttach() { + var ret = false, + notAvail = [], + element, i, v, override, + tryAgain = !loadComplete || (retryCount > 0); + + if(!locked){ + locked = true; + + for(i = 0; i < onAvailStack.length; ++i){ + v = onAvailStack[i]; + if(v && (element = doc.getElementById(v.id))){ + if(!v.checkReady || loadComplete || element.nextSibling || (doc && doc.body)) { + override = v.override; + element = override ? (override === true ? v.obj : override) : element; + v.fn.call(element, v.obj); + onAvailStack.remove(v); + --i; + }else{ + notAvail.push(v); + } + } + } + + retryCount = (notAvail.length === 0) ? 0 : retryCount - 1; + + if (tryAgain) { + startInterval(); + } else { + clearInterval(_interval); + _interval = null; + } + ret = !(locked = false); + } + return ret; + } + + // private + function startInterval() { + if(!_interval){ + var callback = function() { + _tryPreloadAttach(); + }; + _interval = setInterval(callback, POLL_INTERVAL); + } + } + + // private + function getScroll() { + var dd = doc.documentElement, + db = doc.body; + if(dd && (dd[SCROLLTOP] || dd[SCROLLLEFT])){ + return [dd[SCROLLLEFT], dd[SCROLLTOP]]; + }else if(db){ + return [db[SCROLLLEFT], db[SCROLLTOP]]; + }else{ + return [0, 0]; + } + } + + // private + function getPageCoord (ev, xy) { + ev = ev.browserEvent || ev; + var coord = ev['page' + xy]; + if (!coord && coord !== 0) { + coord = ev['client' + xy] || 0; + + if (Ext.isIE) { + coord += getScroll()[xy == "X" ? 0 : 1]; + } + } + + return coord; + } + + var pub = { + extAdapter: true, + onAvailable : function(p_id, p_fn, p_obj, p_override) { + onAvailStack.push({ + id: p_id, + fn: p_fn, + obj: p_obj, + override: p_override, + checkReady: false }); + + retryCount = POLL_RETRYS; + startInterval(); + }, + + // This function should ALWAYS be called from Ext.EventManager + addListener: function(el, eventName, fn) { + el = Ext.getDom(el); + if (el && fn) { + if (eventName == UNLOAD) { + if (unloadListeners[el.id] === undefined) { + unloadListeners[el.id] = []; + } + unloadListeners[el.id].push([eventName, fn]); + return fn; + } + return doAdd(el, eventName, fn, false); + } + 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; + if (el && fn) { + if(eventName == UNLOAD){ + if((lis = unloadListeners[el.id]) !== undefined){ + for(i = 0, len = lis.length; i < len; i++){ + if((li = lis[i]) && li[TYPE] == eventName && li[FN] == fn){ + unloadListeners[el.id].splice(i, 1); + } + } + } + return; + } + doRemove(el, eventName, fn, false); + } + }, + + getTarget : function(ev) { + ev = ev.browserEvent || ev; + return this.resolveTextNode(ev.target || ev.srcElement); + }, + + resolveTextNode : Ext.isGecko ? function(node){ + 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; + } + return node.nodeType == 3 ? node.parentNode : node; + } : function(node){ + return node && node.nodeType == 3 ? node.parentNode : node; + }, + + getRelatedTarget : function(ev) { + ev = ev.browserEvent || ev; + return this.resolveTextNode(ev.relatedTarget || + (ev.type == MOUSEOUT ? ev.toElement : + ev.type == MOUSEOVER ? ev.fromElement : null)); + }, + + getPageX : function(ev) { + return getPageCoord(ev, "X"); + }, + + getPageY : function(ev) { + return getPageCoord(ev, "Y"); + }, + + + getXY : function(ev) { + return [this.getPageX(ev), this.getPageY(ev)]; + }, + + stopEvent : function(ev) { + this.stopPropagation(ev); + this.preventDefault(ev); + }, + + stopPropagation : function(ev) { + ev = ev.browserEvent || ev; + if (ev.stopPropagation) { + ev.stopPropagation(); + } else { + ev.cancelBubble = true; + } + }, + + preventDefault : function(ev) { + ev = ev.browserEvent || ev; + if (ev.preventDefault) { + ev.preventDefault(); + } else { + ev.returnValue = false; + } + }, + + getEvent : function(e) { + e = e || win.event; + if (!e) { + var c = this.getEvent.caller; + while (c) { + e = c.arguments[0]; + if (e && Event == e.constructor) { + break; + } + c = c.caller; + } + } + return e; + }, + + getCharCode : function(ev) { + ev = ev.browserEvent || ev; + 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); + }, + + _load : function(e) { + loadComplete = true; + var EU = Ext.lib.Event; + 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); + } + }, + + _unload : function(e) { + var EU = Ext.lib.Event, + i, j, l, v, ul, id, len, index, scope; + + + for (id in unloadListeners) { + ul = unloadListeners[id]; + for (i = 0, len = ul.length; i < len; i++) { + v = ul[i]; + if (v) { + try{ + scope = v[ADJ_SCOPE] ? (v[ADJ_SCOPE] === true ? v[OBJ] : v[ADJ_SCOPE]) : win; + v[FN].call(scope, EU.getEvent(e), v[OBJ]); + }catch(ex){} + } + } + }; + + Ext.EventManager._unload(); + + doRemove(win, UNLOAD, EU._unload); + } + }; + + // Initialize stuff. + pub.on = pub.addListener; + pub.un = pub.removeListener; + if (doc && doc.body) { + pub._load(true); + } else { + doAdd(win, "load", pub._load); + } + doAdd(win, UNLOAD, pub._unload); + _tryPreloadAttach(); + + 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'], + CONTENTTYPE = 'Content-Type'; + + // private + function setHeader(o) { + var conn = o.conn, + prop; + + function setTheHeaders(conn, headers){ + for (prop in headers) { + if (headers.hasOwnProperty(prop)) { + conn.setRequestHeader(prop, headers[prop]); + } + } + } + + if (pub.defaultHeaders) { + setTheHeaders(conn, pub.defaultHeaders); + } + + if (pub.headers) { + setTheHeaders(conn, pub.headers); + delete pub.headers; + } + } + + // private + function createExceptionObject(tId, callbackArg, isAbort, isTimeout) { + return { + tId : tId, + status : isAbort ? -1 : 0, + statusText : isAbort ? 'transaction aborted' : 'communication failure', + isAbort: isAbort, + isTimeout: isTimeout, + argument : callbackArg + }; + } + + // 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 { + headerStr = o.conn.getAllResponseHeaders(); + Ext.each(headerStr.replace(/\r\n/g, '\n').split('\n'), function(v){ + t = v.indexOf(':'); + if(t >= 0){ + s = v.substr(0, t).toLowerCase(); + if(v.charAt(t + 1) == ' '){ + ++t; + } + headerObj[s] = v.substr(t + 1); + } + }); + } catch(e) {} + + 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()];}, + getAllResponseHeaders : function(){return headerStr}, + responseText : conn.responseText, + responseXML : conn.responseXML, + argument : callbackArg + }; + } + + // private + function releaseObject(o) { + if (o.tId) { + pub.conn[o.tId] = null; + } + o.conn = null; + o = null; + } + + // private + function handleTransactionResponse(o, callback, isAbort, isTimeout) { + if (!callback) { + releaseObject(o); + return; + } + + var httpStatus, responseObject; + + try { + if (o.conn.status !== undefined && o.conn.status != 0) { + httpStatus = o.conn.status; + } + else { + httpStatus = 13030; + } + } + catch(e) { + httpStatus = 13030; + } + + if ((httpStatus >= 200 && httpStatus < 300) || (Ext.isIE && httpStatus == 1223)) { + responseObject = createResponseObject(o, callback.argument); + if (callback.success) { + if (!callback.scope) { + callback.success(responseObject); + } + else { + callback.success.apply(callback.scope, [responseObject]); + } + } + } + else { + switch (httpStatus) { + case 12002: + case 12029: + case 12030: + case 12031: + case 12152: + case 13030: + responseObject = createExceptionObject(o.tId, callback.argument, (isAbort ? isAbort : false), isTimeout); + if (callback.failure) { + if (!callback.scope) { + callback.failure(responseObject); + } + else { + callback.failure.apply(callback.scope, [responseObject]); + } + } + break; + default: + responseObject = createResponseObject(o, callback.argument); + if (callback.failure) { + if (!callback.scope) { + callback.failure(responseObject); + } + else { + callback.failure.apply(callback.scope, [responseObject]); + } + } + } + } + + releaseObject(o); + responseObject = null; + } + + // private + function handleReadyState(o, callback){ + callback = callback || {}; + var conn = o.conn, + tId = o.tId, + poll = pub.poll, + cbTimeout = callback.timeout || null; + + if (cbTimeout) { + pub.conn[tId] = conn; + pub.timeout[tId] = setTimeout(function() { + pub.abort(o, callback, true); + }, 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); + } + + // private + function asyncRequest(method, uri, callback, postData) { + var o = getConnectionObject() || null; + + if (o) { + o.conn.open(method, uri, true); + + if (pub.useDefaultXhrHeader) { + initHeader('X-Requested-With', pub.defaultXhrHeader); + } + + if(postData && pub.useDefaultHeader && (!pub.headers || !pub.headers[CONTENTTYPE])){ + initHeader(CONTENTTYPE, pub.defaultPostHeader); + } + + if (pub.defaultHeaders || pub.headers) { + setHeader(o); + } + + handleReadyState(o, callback); + o.conn.send(postData || null); + } + return o; + } + + // private + function getConnectionObject() { + var o; + + try { + if (o = createXhrObject(pub.transactionId)) { + pub.transactionId++; + } + } catch(e) { + } finally { + return o; + } + } + + // private + function createXhrObject(transactionId) { + var http; + + try { + http = new XMLHttpRequest(); + } catch(e) { + for (var i = 0; i < activeX.length; ++i) { + try { + http = new ActiveXObject(activeX[i]); + break; + } catch(e) {} + } + } finally { + return {conn : http, tId : transactionId}; + } + } + + var pub = { + request : function(method, uri, cb, data, options) { + if(options){ + var me = this, + xmlData = options.xmlData, + jsonData = options.jsonData, + hs; + + Ext.applyIf(me, options); + + if(xmlData || jsonData){ + hs = me.headers; + if(!hs || !hs[CONTENTTYPE]){ + initHeader(CONTENTTYPE, xmlData ? 'text/xml' : 'application/json'); + } + data = xmlData || (!Ext.isPrimitive(jsonData) ? Ext.encode(jsonData) : jsonData); + } + } + return asyncRequest(method || options.method || "POST", uri, cb, data); + }, + + serializeForm : function(form) { + var fElements = form.elements || (document.forms[form] || Ext.getDom(form)).elements, + hasSubmit = false, + encoder = encodeURIComponent, + element, + options, + name, + val, + data = '', + type; + + 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 (opt.selected) { + data += String.format("{0}={1}&", encoder(name), encoder((opt.hasAttribute ? opt.hasAttribute('value') : opt.getAttribute('value') !== null) ? 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); + } + } + } + }); + return data.substr(0, data.length - 1); + }, + + useDefaultHeader : true, + defaultPostHeader : 'application/x-www-form-urlencoded; charset=UTF-8', + useDefaultXhrHeader : true, + defaultXhrHeader : 'XMLHttpRequest', + poll : {}, + timeout : {}, + conn: {}, + 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, + tId = o.tId, + isAbort = false; + + if (me.isCallInProgress(o)) { + o.conn.abort(); + clearInterval(me.poll[tId]); + me.poll[tId] = null; + clearTimeout(pub.timeout[tId]); + me.timeout[tId] = null; + + handleTransactionResponse(o, callback, (isAbort = true), isTimeout); + } + return isAbort; + }, + + 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(){ + var EXTLIB = Ext.lib, + noNegatives = /width|height|opacity|padding/i, + offsetAttribute = /^((width|height)|(top|left))$/, + defaultUnit = /width|height|top$|bottom$|left$|right$/i, + offsetUnit = /\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i, + isset = function(v){ + return typeof v !== 'undefined'; + }, + now = function(){ + return new Date(); + }; + + EXTLIB.Anim = { + motion : function(el, args, duration, easing, cb, scope) { + return this.run(el, args, duration, easing, cb, scope, Ext.lib.Motion); + }, + + run : function(el, args, duration, easing, cb, scope, type) { + type = type || Ext.lib.AnimBase; + if (typeof easing == "string") { + easing = Ext.lib.Easing[easing]; + } + var anim = new type(el, args, duration, easing); + anim.animateX(function() { + if(Ext.isFunction(cb)){ + cb.call(scope); + } + }); + return anim; + } + }; + + EXTLIB.AnimBase = function(el, attributes, duration, method) { + if (el) { + this.init(el, attributes, duration, method); + } + }; + + EXTLIB.AnimBase.prototype = { + doMethod: function(attr, start, end) { + var me = this; + return me.method(me.curFrame, start, end - start, me.totalFrames); + }, + + + setAttr: function(attr, val, unit) { + if (noNegatives.test(attr) && val < 0) { + val = 0; + } + Ext.fly(this.el, '_anim').setStyle(attr, val + unit); + }, + + + getAttr: function(attr) { + var el = Ext.fly(this.el), + val = el.getStyle(attr), + a = offsetAttribute.exec(attr) || []; + + if (val !== 'auto' && !offsetUnit.test(val)) { + return parseFloat(val); + } + + return (!!(a[2]) || (el.getStyle('position') == 'absolute' && !!(a[3]))) ? el.dom['offset' + a[0].charAt(0).toUpperCase() + a[0].substr(1)] : 0; + }, + + + getDefaultUnit: function(attr) { + return defaultUnit.test(attr) ? 'px' : ''; + }, + + animateX : function(callback, scope) { + var me = this, + f = function() { + me.onComplete.removeListener(f); + if (Ext.isFunction(callback)) { + callback.call(scope || me, me); + } + }; + me.onComplete.addListener(f, me); + me.animate(); + }, + + + setRunAttr: function(attr) { + var me = this, + a = this.attributes[attr], + to = a.to, + by = a.by, + from = a.from, + unit = a.unit, + ra = (this.runAttrs[attr] = {}), + end; + + if (!isset(to) && !isset(by)){ + return false; + } + + var start = isset(from) ? from : me.getAttr(attr); + if (isset(to)) { + end = to; + }else if(isset(by)) { + if (Ext.isArray(start)){ + end = []; + for(var i=0,len=start.length; iExtends 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:
- *subclass
: Function superclass
: Function overrides
: Object 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 theoverrides
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];
@@ -227,7 +121,7 @@ MyGridPanel = Ext.extend(Ext.grid.GridPanel, {
var oc = Object.prototype.constructor;
return function(sb, sp, overrides){
- if(Ext.isObject(sp)){
+ if(typeof sp == 'object'){
overrides = sp;
sp = sb;
sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);};
@@ -256,23 +150,7 @@ MyGridPanel = Ext.extend(Ext.grid.GridPanel, {
};
}(),
- /**
- * 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;
@@ -283,21 +161,7 @@ Ext.override(MyClass, {
}
},
- /**
- * 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) {
@@ -310,12 +174,7 @@ Company.data.CustomStore = function(config) { ... }
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 = [],
@@ -334,15 +193,7 @@ Company.data.CustomStore = function(config) { ... }
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 {};
@@ -362,13 +213,7 @@ Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", false); // returns {foo: "1", bar: ["2"
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;
@@ -376,13 +221,7 @@ Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", false); // returns {foo: "1", bar: ["2"
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){
@@ -398,42 +237,20 @@ Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", false); // returns {foo: "1", bar: ["2"
}(),
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:
- * item
: Mixed
- * index
- * in the passed array
index
: Number
- * allItems
: Array
- * array
passed as the first
- * argument to Ext.each
.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;
@@ -448,26 +265,7 @@ Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", false); // returns {foo: "1", bar: ["2"
}
},
- /**
- * 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:
- * 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;
@@ -475,7 +273,7 @@ Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", false); // returns {foo: "1", bar: ["2"
if(Ext.isIterable(obj)){
Ext.each(obj, fn, scope);
return;
- }else if(Ext.isObject(obj)){
+ }else if(typeof obj == 'object'){
for(var prop in obj){
if(obj.hasOwnProperty(prop)){
if(fn.call(scope || obj, prop, obj[prop], obj) === false){
@@ -486,29 +284,7 @@ Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", false); // returns {foo: "1", bar: ["2"
}
},
- /**
- * 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;
@@ -516,10 +292,10 @@ function(el){
if (el.dom){
return el.dom;
} else {
- if (Ext.isString(el)) {
+ 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;
@@ -534,24 +310,13 @@ function(el){
}
},
- /**
- * 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);
},
- /**
- * 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.
Returns true if the passed value is empty.
- *The value is deemed to be empty if it is
-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;
})();
@@ -796,36 +439,9 @@ Ext.ns("Ext.util", "Ext.lib", "Ext.data");
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
- */
+Ext.apply(Function.prototype, {
+
createInterceptor : function(fcn, scope){
var method = this;
return !Ext.isFunction(fcn) ?
@@ -841,32 +457,9 @@ sayHiToFriend('Brian'); // alerts "Hi, Brian"
};
},
- /**
- * 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
+
+ createCallback : function(){
+
var args = arguments,
method = this;
return function() {
@@ -874,37 +467,7 @@ new Ext.Button({
};
},
- /**
- * 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() {
@@ -913,41 +476,15 @@ btn.on('click', sayHi.createDelegate(btn, ['Fred']));
callArgs = Array.prototype.slice.call(arguments, 0);
callArgs = callArgs.concat(args);
}else if (Ext.isNumber(appendArgs)){
- 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
+ callArgs = Array.prototype.slice.call(arguments, 0);
+ var applyArgs = [appendArgs, 0].concat(args);
+ Array.prototype.splice.apply(callArgs, applyArgs);
}
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){
@@ -958,25 +495,9 @@ sayHi.defer(2000, this, ['Fred']);
}
});
-/**
- * @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){
@@ -985,16 +506,9 @@ var s = String.format('<div class="{0}">{1}</div>', cls, text);
}
});
-/**
- * @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;
@@ -1007,11 +521,7 @@ 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){
@@ -1020,86 +530,47 @@ Ext.applyIf(Array.prototype, {
return this;
}
});
-/**
- * @class Ext
- */
+
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");
- /**
- * Namespace alloted for extensions to the framework.
- * @property ux
- * @type Object
- */
+
Ext.apply(Ext, function(){
- var E = Ext,
+ var E = Ext,
idSeed = 0,
scrollWidth = null;
return {
- /**
- * A reusable empty function
- * @property
- * @type Function
- */
+
emptyFn : function(){},
- /**
- * URL to a 1x1 transparent gif image used by Ext to create inline icons with CSS background images.
- * In older versions of IE, this defaults to "http://extjs.com/s.gif" and you should change this to a URL on your server.
- * For other browsers it uses an inline data URL.
- * @type String
- */
+
BLANK_IMAGE_URL : Ext.isIE6 || Ext.isIE7 || Ext.isAir ?
- 'http:/' + '/extjs.com/s.gif' :
+ 'http:/' + '/www.extjs.com/s.gif' :
'data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==',
extendX : function(supr, fn){
return Ext.extend(supr, fn(supr.prototype));
},
- /**
- * Returns the current HTML document object as an {@link Ext.Element}.
- * @return Ext.Element The document
- */
+
getDoc : function(){
return Ext.get(document);
},
- /**
- * Utility method for validating that a value is numeric, returning the specified default value if it is not.
- * @param {Mixed} value Should be a number, but any type will be handled appropriately
- * @param {Number} defaultValue The value to return if the original value is non-numeric
- * @return {Number} Value, if numeric, else defaultValue
- */
+
num : function(v, defaultValue){
- v = Number(Ext.isEmpty(v) || Ext.isArray(v) || Ext.isBoolean(v) || (Ext.isString(v) && v.trim().length == 0) ? NaN : v);
+ 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;
},
- /**
- * Utility method for returning a default value if the passed value is empty.
- *The value is deemed to be empty if it is
-Ext.addBehaviors({
- // add a listener for click on all anchors in element with id foo
- '#foo a@click' : function(e, t){
- // do something
- },
-
- // add the same listener to multiple selectors (separated by comma BEFORE the @)
- '#foo a, #bar span.some-class@mouseover' : function(){
- // do something
- }
-});
- *
- * @param {Object} obj The list of behaviors to apply
- */
+
addBehaviors : function(o){
if(!Ext.isReady){
Ext.onReady(function(){
Ext.addBehaviors(o);
});
} else {
- var cache = {}, // simple cache for applying multiple behaviors to same selector does query multiple times
+ var cache = {},
parts,
b,
s;
for (b in o) {
- if ((parts = b.split('@'))[1]) { // for Object prototype breakers
+ if ((parts = b.split('@'))[1]) {
s = parts[0];
if(!cache[s]){
cache[s] = Ext.select(s);
@@ -1148,34 +602,29 @@ Ext.addBehaviors({
cache = null;
}
},
+
- /**
- * Utility method for getting the width of the browser scrollbar. This can differ depending on
- * operating system settings, such as the theme or font size.
- * @param {Boolean} force (optional) true to force a recalculation of the value.
- * @return {Number} The width of the scrollbar.
- */
getScrollBarWidth: function(force){
if(!Ext.isReady){
return 0;
}
-
+
if(force === true || scrollWidth === null){
- // Append our div, do our calculation and then remove it
+
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();
- // Need to add 2 to ensure we leave enough space
+
scrollWidth = w1 - w2 + 2;
}
return scrollWidth;
},
- // deprecated
+
combine : function(){
var as = arguments, l = as.length, r = [];
for(var i = 0; i < l; i++){
@@ -1191,25 +640,9 @@ Ext.addBehaviors({
return r;
},
- /**
- * Copies a set of named properties fom the source object to the destination object.
- * example:
-ImageComponent = Ext.extend(Ext.BoxComponent, {
- initComponent: function() {
- this.autoEl = { tag: 'img' };
- MyComponent.superclass.initComponent.apply(this, arguments);
- this.initialBox = Ext.copyTo({}, this.initialConfig, 'x,y,width,height');
- }
-});
- *
- * @param {Object} dest The destination object.
- * @param {Object} source The source object.
- * @param {Array/String} names Either an Array of property names, or a comma-delimited list
- * of property names to copy.
- * @return {Object} The modified object.
- */
+
copyTo : function(dest, source, names){
- if(Ext.isString(names)){
+ if(typeof names == 'string'){
names = names.split(/[,;\s]/);
}
Ext.each(names, function(name){
@@ -1220,36 +653,22 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
return dest;
},
- /**
- * Attempts to destroy any objects passed to it by removing all event listeners, removing them from the
- * DOM (if applicable) and calling their destroy functions (if available). This method is primarily
- * intended for arguments of type {@link Ext.Element} and {@link Ext.Component}, but any subclass of
- * {@link Ext.util.Observable} can be passed in. Any number of elements and/or components can be
- * passed into this function in a single call as separate arguments.
- * @param {Mixed} arg1 An {@link Ext.Element}, {@link Ext.Component}, or an Array of either of these to destroy
- * @param {Mixed} arg2 (optional)
- * @param {Mixed} etc... (optional)
- */
+
destroy : function(){
Ext.each(arguments, function(arg){
if(arg){
if(Ext.isArray(arg)){
this.destroy.apply(this, arg);
- }else if(Ext.isFunction(arg.destroy)){
+ }else if(typeof arg.destroy == 'function'){
arg.destroy();
}else if(arg.dom){
arg.remove();
- }
+ }
}
}, this);
},
- /**
- * Attempts to destroy and then remove a set of named properties of the passed object.
- * @param {Object} o The object (most likely a Component) who's properties you wish to destroy.
- * @param {Mixed} arg1 The name of the property to destroy and remove from the object.
- * @param {Mixed} etc... More property names to destroy and remove.
- */
+
destroyMembers : function(o, arg1, arg2, etc){
for(var i = 1, a = arguments, len = a.length; i < len; i++) {
Ext.destroy(o[a[i]]);
@@ -1257,11 +676,7 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
}
},
- /**
- * Creates a copy of the passed Array with falsy values removed.
- * @param {Array/NodeList} arr The Array from which to remove falsy values.
- * @return {Array} The new, compressed Array.
- */
+
clean : function(arr){
var ret = [];
Ext.each(arr, function(v){
@@ -1272,11 +687,7 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
return ret;
},
- /**
- * Creates a copy of the passed Array, filtered to contain only unique values.
- * @param {Array} arr The Array to filter
- * @return {Array} The new Array containing unique values.
- */
+
unique : function(arr){
var ret = [],
collect = {};
@@ -1290,11 +701,7 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
return ret;
},
- /**
- * Recursively flattens into 1-d Array. Injects Arrays inline.
- * @param {Array} arr The array to flatten
- * @return {Array} The new, flattened array.
- */
+
flatten : function(arr){
var worker = [];
function rFlatten(a) {
@@ -1310,13 +717,7 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
return rFlatten(arr);
},
- /**
- * Returns the minimum value in the Array.
- * @param {Array|NodeList} arr The Array from which to select the minimum value.
- * @param {Function} comp (optional) a function to perform the comparision which determines minimization.
- * If omitted the "<" operator will be used. Note: gt = 1; eq = 0; lt = -1
- * @return {Object} The minimum value in the Array.
- */
+
min : function(arr, comp){
var ret = arr[0];
comp = comp || function(a,b){ return a < b ? -1 : 1; };
@@ -1326,13 +727,7 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
return ret;
},
- /**
- * Returns the maximum value in the Array
- * @param {Array|NodeList} arr The Array from which to select the maximum value.
- * @param {Function} comp (optional) a function to perform the comparision which determines maximization.
- * If omitted the ">" operator will be used. Note: gt = 1; eq = 0; lt = -1
- * @return {Object} The maximum value in the Array.
- */
+
max : function(arr, comp){
var ret = arr[0];
comp = comp || function(a,b){ return a > b ? 1 : -1; };
@@ -1342,20 +737,12 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
return ret;
},
- /**
- * Calculates the mean of the Array
- * @param {Array} arr The Array to calculate the mean value of.
- * @return {Number} The mean.
- */
+
mean : function(arr){
return arr.length > 0 ? Ext.sum(arr) / arr.length : undefined;
},
- /**
- * Calculates the sum of the Array
- * @param {Array} arr The Array to calculate the sum value of.
- * @return {Number} The sum.
- */
+
sum : function(arr){
var ret = 0;
Ext.each(arr, function(v) {
@@ -1364,29 +751,7 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
return ret;
},
- /**
- * Partitions the set into two sets: a true set and a false set.
- * Example:
- * Example2:
- *
-// Example 1:
-Ext.partition([true, false, true, true, false]); // [[true, true, true], [false, false]]
-
-// Example 2:
-Ext.partition(
- Ext.query("p"),
- function(val){
- return val.className == "class1"
- }
-);
-// true are those paragraph elements with a className of "class1",
-// false set are those that do not have that className.
- *
- * @param {Array|NodeList} arr The array to partition
- * @param {Function} truth (optional) a function to determine truth. If this is omitted the element
- * itself must be able to be evaluated for its truthfulness.
- * @return {Array} [true
-// Example:
-Ext.invoke(Ext.query("p"), "getAttribute", "id");
-// [el1.getAttribute("id"), el2.getAttribute("id"), ..., elN.getAttribute("id")]
- *
- * @param {Array|NodeList} arr The Array of items to invoke the method on.
- * @param {String} methodName The method name to invoke.
- * @param {...*} args Arguments to send into the method invocation.
- * @return {Array} The results of invoking the method on each item in the array.
- */
+
invoke : function(arr, methodName){
var ret = [],
args = Array.prototype.slice.call(arguments, 2);
Ext.each(arr, function(v,i) {
- if (v && Ext.isFunction(v[methodName])) {
+ if (v && typeof v[methodName] == 'function') {
ret.push(v[methodName].apply(v, args));
} else {
ret.push(undefined);
@@ -1420,16 +774,7 @@ Ext.invoke(Ext.query("p"), "getAttribute", "id");
return ret;
},
- /**
- * Plucks the value of a property from each item in the Array
- *
-// Example:
-Ext.pluck(Ext.query("p"), "className"); // [el1.className, el2.className, ..., elN.className]
- *
- * @param {Array|NodeList} arr The Array of items to pluck the value from.
- * @param {String} prop The property name to pluck from each element.
- * @return {Array} The value from each item in the Array.
- */
+
pluck : function(arr, prop){
var ret = [];
Ext.each(arr, function(v) {
@@ -1438,27 +783,9 @@ Ext.pluck(Ext.query("p"), "className"); // [el1.className, el2.className, ..., e
return ret;
},
- /**
- * Zips N sets together.
- *
-// Example 1:
-Ext.zip([1,2,3],[4,5,6]); // [[1,4],[2,5],[3,6]]
-// Example 2:
-Ext.zip(
- [ "+", "-", "+"],
- [ 12, 10, 22],
- [ 43, 15, 96],
- function(a, b, c){
- return "$" + a + "" + b + "." + c
- }
-); // ["$+12.43", "$-10.15", "$+22.96"]
- *
- * @param {Arrays|NodeLists} arr This argument may be repeated. Array(s) to contribute values.
- * @param {Function} zipper (optional) The last item in the argument list. This will drive how the items are zipped together.
- * @return {Array} The zipped set.
- */
+
zip : function(){
- var parts = Ext.partition(arguments, function( val ){ return !Ext.isFunction(val); }),
+ 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")),
@@ -1477,44 +804,16 @@ Ext.zip(
return ret;
},
- /**
- * This is shorthand reference to {@link Ext.ComponentMgr#get}.
- * Looks up an existing {@link Ext.Component Component} by {@link Ext.Component#id id}
- * @param {String} id The component {@link Ext.Component#id id}
- * @return Ext.Component The Component, undefined if not found, or null if a
- * Class was found.
- */
+
getCmp : function(id){
return Ext.ComponentMgr.get(id);
},
- /**
- * By default, Ext intelligently decides whether floating elements should be shimmed. If you are using flash,
- * you may want to set this to true.
- * @type Boolean
- */
+
useShims: E.isIE6 || (E.isMac && E.isGecko2),
- // inpired by a similar function in mootools library
- /**
- * Returns the type of object that is passed in. If the object passed in is null or undefined it
- * return false otherwise it returns one of the following values:
-var sayHi = function(name){
- alert('Hi, ' + name);
-}
-
-sayHi('Fred'); // alerts "Hi, Fred"
-
-var sayGoodbye = sayHi.createSequence(function(name){
- alert('Bye, ' + name);
-});
-sayGoodbye('Fred'); // both alerts show
-
- * @param {Function} fcn The function to sequence
- * @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
- */
+Ext.apply(Function.prototype, {
+
createSequence : function(fcn, scope){
var method = this;
- return !Ext.isFunction(fcn) ?
+ return (typeof fcn != 'function') ?
this :
function(){
var retval = method.apply(this || window, arguments);
@@ -1599,35 +874,15 @@ sayGoodbye('Fred'); // both alerts show
});
-/**
- * @class String
- * These functions are available as static methods on the JavaScript String object.
- */
+
Ext.applyIf(String, {
- /**
- * Escapes the passed string for ' and \
- * @param {String} string The string to escape
- * @return {String} The escaped string
- * @static
- */
+
escape : function(string) {
return string.replace(/('|\\)/g, "\\$1");
},
- /**
- * Pads the left side of a string with a specified character. This is especially useful
- * for normalizing number and date strings. Example usage:
- *
-var s = String.leftPad('123', 5, '0');
-// s now contains the string: '00123'
- *
- * @param {String} string The original string
- * @param {Number} size The total length of the output string
- * @param {String} char (optional) The character with which to pad the original string (defaults to empty string " ")
- * @return {String} The padded string
- * @static
- */
+
leftPad : function (val, size, ch) {
var result = String(val);
if(!ch) {
@@ -1640,101 +895,32 @@ var s = String.leftPad('123', 5, '0');
}
});
-/**
- * Utility function that allows you to easily switch a string between two alternating values. The passed value
- * is compared to the current string, and if they are equal, the other value that was passed in is returned. If
- * they are already different, the first value passed in is returned. Note that this method returns the new value
- * but does not change the current string.
- *
-// alternate sort directions
-sort = sort.toggle('ASC', 'DESC');
-
-// instead of conditional logic:
-sort = (sort == 'ASC' ? 'DESC' : 'ASC');
-
- * @param {String} value The value to compare to the current string
- * @param {String} other The new value to use if the string already equals the first value passed in
- * @return {String} The new value
- */
+
String.prototype.toggle = function(value, other){
return this == value ? other : value;
};
-/**
- * Trims whitespace from either end of a string, leaving spaces within the string intact. Example:
- *
-var s = ' foo bar ';
-alert('-' + s + '-'); //alerts "- foo bar -"
-alert('-' + s.trim() + '-'); //alerts "-foo bar-"
-
- * @return {String} The trimmed string
- */
+
String.prototype.trim = function(){
var re = /^\s+|\s+$/g;
return function(){ return this.replace(re, ""); };
}();
-// here to prevent dependency on Date.js
-/**
- Returns the number of milliseconds between this date and date
- @param {Date} date (optional) Defaults to now
- @return {Number} The diff in milliseconds
- @member Date getElapsed
- */
+
+
Date.prototype.getElapsed = function(date) {
return Math.abs((date || new Date()).getTime()-this.getTime());
};
-/**
- * @class Number
- */
+
Ext.applyIf(Number.prototype, {
- /**
- * Checks whether or not the current number is within a desired range. If the number is already within the
- * range it is returned, otherwise the min or max value is returned depending on which side of the range is
- * exceeded. Note that this method returns the constrained value but does not change the current number.
- * @param {Number} min The minimum number in the range
- * @param {Number} max The maximum number in the range
- * @return {Number} The constrained value if outside the range, otherwise the current value
- */
+
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 = [], @@ -1742,14 +928,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; @@ -1757,7 +943,7 @@ Ext.util.TaskRunner = function(interval){ } }, - // private + removeTask = function(t){ removeQueue.push(t); if(t.onStop){ @@ -1765,7 +951,7 @@ Ext.util.TaskRunner = function(interval){ } }, - // private + runTasks = function(){ var rqLen = removeQueue.length, now = new Date().getTime(); @@ -1797,30 +983,7 @@ Ext.util.TaskRunner = function(interval){ } }; - /** - * Starts a new task. - * @method start - * @param {Object} taskA config object that supports the following properties:
run
: FunctionThe function to execute each time the task is invoked. The
- * function will be called at each interval and passed the args
argument if specified, and the
- * current invocation count if not.
If a particular scope (this
reference) is required, be sure to specify it using the scope
argument.
Return false
from this function to terminate the task.
interval
: Numberargs
: Arrayrun
. If not specified, the current invocation count is passed.scope
: Objectrun
function. Defaults to the task config object.duration
: Numberrepeat
: NumberBefore each invocation, Ext injects the property taskRunCount
into the task object so
- * that calculations based on the repeat count can be performed.
-// 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; @@ -2049,7 +1187,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ win = window, doc = document, - // constants + POLL_RETRYS = 200, POLL_INTERVAL = 20, EL = 0, @@ -2063,7 +1201,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ UNLOAD = 'unload', MOUSEOVER = 'mouseover', MOUSEOUT = 'mouseout', - // private + doAdd = function() { var ret; if (win.addEventListener) { @@ -2089,7 +1227,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ } return ret; }(), - // private + doRemove = function(){ var ret; if (win.removeEventListener) { @@ -2130,24 +1268,26 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ return false; } - // private + function _tryPreloadAttach() { var ret = false, notAvail = [], - element, i, len, v, + element, i, v, override, tryAgain = !loadComplete || (retryCount > 0); - if (!locked) { + if(!locked){ locked = true; - - for (i = 0, len = onAvailStack.length; i < len; i++) { + + for(i = 0; i < onAvailStack.length; ++i){ v = onAvailStack[i]; if(v && (element = doc.getElementById(v.id))){ if(!v.checkReady || loadComplete || element.nextSibling || (doc && doc.body)) { - element = v.override ? (v.override === true ? v.obj : v.override) : element; + override = v.override; + element = override ? (override === true ? v.obj : override) : element; v.fn.call(element, v.obj); onAvailStack.remove(v); - } else { + --i; + }else{ notAvail.push(v); } } @@ -2161,13 +1301,12 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ clearInterval(_interval); _interval = null; } - ret = !(locked = false); } return ret; } - // private + function startInterval() { if(!_interval){ var callback = function() { @@ -2177,7 +1316,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ } } - // private + function getScroll() { var dd = doc.documentElement, db = doc.body; @@ -2190,7 +1329,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ } } - // private + function getPageCoord (ev, xy) { ev = ev.browserEvent || ev; var coord = ev['page' + xy]; @@ -2219,7 +1358,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) { @@ -2235,7 +1374,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; @@ -2263,7 +1402,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; @@ -2336,13 +1475,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); }, @@ -2351,8 +1490,8 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ loadComplete = true; var EU = Ext.lib.Event; 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); } }, @@ -2381,7 +1520,7 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){ } }; - // Initialize stuff. + pub.on = pub.addListener; pub.un = pub.removeListener; if (doc && doc.body) { @@ -2394,19 +1533,14 @@ 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'], CONTENTTYPE = 'Content-Type'; - // private + function setHeader(o) { var conn = o.conn, prop; @@ -2429,7 +1563,7 @@ Ext.lib.Ajax = function() { } } - // private + function createExceptionObject(tId, callbackArg, isAbort, isTimeout) { return { tId : tId, @@ -2441,19 +1575,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 { @@ -2472,7 +1606,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()];}, @@ -2483,7 +1617,7 @@ Ext.lib.Ajax = function() { }; } - // private + function releaseObject(o) { if (o.tId) { pub.conn[o.tId] = null; @@ -2492,7 +1626,7 @@ Ext.lib.Ajax = function() { o = null; } - // private + function handleTransactionResponse(o, callback, isAbort, isTimeout) { if (!callback) { releaseObject(o); @@ -2559,7 +1693,7 @@ Ext.lib.Ajax = function() { responseObject = null; } - // private + function handleReadyState(o, callback){ callback = callback || {}; var conn = o.conn, @@ -2591,7 +1725,7 @@ Ext.lib.Ajax = function() { pub.pollInterval); } - // private + function asyncRequest(method, uri, callback, postData) { var o = getConnectionObject() || null; @@ -2616,7 +1750,7 @@ Ext.lib.Ajax = function() { return o; } - // private + function getConnectionObject() { var o; @@ -2630,7 +1764,7 @@ Ext.lib.Ajax = function() { } } - // private + function createXhrObject(transactionId) { var http; @@ -2713,32 +1847,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, @@ -2758,7 +1892,7 @@ 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]; } }; @@ -3273,13 +2407,7 @@ 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(); @@ -3317,9 +2445,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, @@ -3450,7 +2578,7 @@ 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); } @@ -3471,7 +2599,7 @@ Ext.lib.Ajax = function() { return typeof v !== 'undefined'; }; - // private + function parseColor(s) { var pi = parseInt, base, @@ -3560,7 +2688,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); @@ -3629,4 +2757,4 @@ Ext.lib.Ajax = function() { } window.attachEvent("onunload", fnCleanUp); } -})(); \ No newline at end of file +})(); diff --git a/adapter/ext/ext-base.js b/adapter/ext/ext-base.js index 3e034bcb..5573086e 100644 --- a/adapter/ext/ext-base.js +++ b/adapter/ext/ext-base.js @@ -1,7 +1,7 @@ /* - * Ext JS Library 3.2.0 + * Ext JS Library 3.2.1 * Copyright(c) 2006-2010 Ext JS, Inc. * licensing@extjs.com * http://www.extjs.com/license */ -window.undefined=window.undefined;Ext={version:"3.2.0"};Ext.apply=function(d,e,b){if(b){Ext.apply(d,b)}if(d&&e&&typeof e=="object"){for(var a in e){d[a]=e[a]}}return d};(function(){var g=0,s=Object.prototype.toString,t=navigator.userAgent.toLowerCase(),y=function(e){return e.test(t)},i=document,l=i.compatMode=="CSS1Compat",A=y(/opera/),h=y(/\bchrome\b/),u=y(/webkit/),x=!h&&y(/safari/),f=x&&y(/applewebkit\/4/),b=x&&y(/version\/3/),B=x&&y(/version\/4/),r=!A&&y(/msie/),p=r&&y(/msie 7/),o=r&&y(/msie 8/),q=r&&!p&&!o,n=!u&&y(/gecko/),d=n&&y(/rv:1\.8/),a=n&&y(/rv:1\.9/),v=r&&!l,z=y(/windows|win32/),k=y(/macintosh|mac os x/),j=y(/adobeair/),m=y(/linux/),c=/^https/i.test(window.location.protocol);if(q){try{i.execCommand("BackgroundImageCache",false,true)}catch(w){}}Ext.apply(Ext,{SSL_SECURE_URL:c&&r?'javascript:""':"about:blank",isStrict:l,isSecure:c,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,enableNestedListenerRemoval:false,USE_NATIVE_JSON:false,applyIf:function(C,D){if(C){for(var e in D){if(!Ext.isDefined(C[e])){C[e]=D[e]}}}return C},id:function(e,C){e=Ext.getDom(e,true)||{};if(!e.id){e.id=(C||"ext-gen")+(++g)}return e.id},extend:function(){var C=function(E){for(var D in E){this[D]=E[D]}};var e=Object.prototype.constructor;return function(J,G,I){if(Ext.isObject(G)){I=G;G=J;J=I.constructor!=e?I.constructor:function(){G.apply(this,arguments)}}var E=function(){},H,D=G.prototype;E.prototype=D;H=J.prototype=new E();H.constructor=J;J.superclass=D;if(D.constructor==e){D.constructor=G}J.override=function(F){Ext.override(J,F)};H.superclass=H.supr=(function(){return D});H.override=C;Ext.override(J,I);J.extend=function(F){return Ext.extend(J,F)};return J}}(),override:function(e,D){if(D){var C=e.prototype;Ext.apply(C,D);if(Ext.isIE&&D.hasOwnProperty("toString")){C.toString=D.toString}}},namespace:function(){var C,e;Ext.each(arguments,function(D){e=D.split(".");C=window[e[0]]=window[e[0]]||{};Ext.each(e.slice(1),function(E){C=C[E]=C[E]||{}})});return C},urlEncode:function(G,F){var D,C=[],E=encodeURIComponent;Ext.iterate(G,function(e,H){D=Ext.isEmpty(H);Ext.each(D?e:H,function(I){C.push("&",E(e),"=",(!Ext.isEmpty(I)&&(I!=e||!D))?(Ext.isDate(I)?Ext.encode(I).replace(/"/g,""):E(I)):"")})});if(!F){C.shift();F=""}return F+C.join("")},urlDecode:function(D,C){if(Ext.isEmpty(D)){return{}}var G={},F=D.split("&"),H=decodeURIComponent,e,E;Ext.each(F,function(I){I=I.split("=");e=H(I[0]);E=H(I[1]);G[e]=C||!G[e]?E:[].concat(G[e]).concat(E)});return G},urlAppend:function(e,C){if(!Ext.isEmpty(C)){return e+(e.indexOf("?")===-1?"?":"&")+C}return e},toArray:function(){return r?function(D,G,E,F){F=[];for(var C=0,e=D.length;C
// Example 1:
Ext.partition([true, false, true, true, false]); // [[true, true, true], [false, false]]
@@ -1411,7 +1415,7 @@ Ext.invoke(Ext.query("p"), "getAttribute", "id");
var ret = [],
args = Array.prototype.slice.call(arguments, 2);
Ext.each(arr, function(v,i) {
- if (v && Ext.isFunction(v[methodName])) {
+ if (v && typeof v[methodName] == 'function') {
ret.push(v[methodName].apply(v, args));
} else {
ret.push(undefined);
@@ -1458,7 +1462,7 @@ Ext.zip(
* @return {Array} The zipped set.
*/
zip : function(){
- var parts = Ext.partition(arguments, function( val ){ return !Ext.isFunction(val); }),
+ 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")),
@@ -1535,7 +1539,7 @@ Ext.zip(
case RegExp: return 'regexp';
case Date: return 'date';
}
- if(Ext.isNumber(o.length) && Ext.isFunction(o.item)) {
+ if(typeof o.length == 'number' && typeof o.item == 'function') {
return 'nodelist';
}
}
@@ -1548,7 +1552,7 @@ Ext.zip(
// internal
callback : function(cb, scope, args, delay){
- if(Ext.isFunction(cb)){
+ if(typeof cb == 'function'){
if(delay){
cb.defer(delay, scope, args || []);
}else{
@@ -1588,7 +1592,7 @@ sayGoodbye('Fred'); // both alerts show
*/
createSequence : function(fcn, scope){
var method = this;
- return !Ext.isFunction(fcn) ?
+ return (typeof fcn != 'function') ?
this :
function(){
var retval = method.apply(this || window, arguments);
diff --git a/adapter/jquery/ext-jquery-adapter.js b/adapter/jquery/ext-jquery-adapter.js
index f6d1eba3..2fc0726d 100644
--- a/adapter/jquery/ext-jquery-adapter.js
+++ b/adapter/jquery/ext-jquery-adapter.js
@@ -1,7 +1,7 @@
/*
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
-window.undefined=window.undefined;Ext={version:"3.2.0"};Ext.apply=function(d,e,b){if(b){Ext.apply(d,b)}if(d&&e&&typeof e=="object"){for(var a in e){d[a]=e[a]}}return d};(function(){var g=0,s=Object.prototype.toString,t=navigator.userAgent.toLowerCase(),y=function(e){return e.test(t)},i=document,l=i.compatMode=="CSS1Compat",A=y(/opera/),h=y(/\bchrome\b/),u=y(/webkit/),x=!h&&y(/safari/),f=x&&y(/applewebkit\/4/),b=x&&y(/version\/3/),B=x&&y(/version\/4/),r=!A&&y(/msie/),p=r&&y(/msie 7/),o=r&&y(/msie 8/),q=r&&!p&&!o,n=!u&&y(/gecko/),d=n&&y(/rv:1\.8/),a=n&&y(/rv:1\.9/),v=r&&!l,z=y(/windows|win32/),k=y(/macintosh|mac os x/),j=y(/adobeair/),m=y(/linux/),c=/^https/i.test(window.location.protocol);if(q){try{i.execCommand("BackgroundImageCache",false,true)}catch(w){}}Ext.apply(Ext,{SSL_SECURE_URL:c&&r?'javascript:""':"about:blank",isStrict:l,isSecure:c,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,enableNestedListenerRemoval:false,USE_NATIVE_JSON:false,applyIf:function(C,D){if(C){for(var e in D){if(!Ext.isDefined(C[e])){C[e]=D[e]}}}return C},id:function(e,C){e=Ext.getDom(e,true)||{};if(!e.id){e.id=(C||"ext-gen")+(++g)}return e.id},extend:function(){var C=function(E){for(var D in E){this[D]=E[D]}};var e=Object.prototype.constructor;return function(J,G,I){if(Ext.isObject(G)){I=G;G=J;J=I.constructor!=e?I.constructor:function(){G.apply(this,arguments)}}var E=function(){},H,D=G.prototype;E.prototype=D;H=J.prototype=new E();H.constructor=J;J.superclass=D;if(D.constructor==e){D.constructor=G}J.override=function(F){Ext.override(J,F)};H.superclass=H.supr=(function(){return D});H.override=C;Ext.override(J,I);J.extend=function(F){return Ext.extend(J,F)};return J}}(),override:function(e,D){if(D){var C=e.prototype;Ext.apply(C,D);if(Ext.isIE&&D.hasOwnProperty("toString")){C.toString=D.toString}}},namespace:function(){var C,e;Ext.each(arguments,function(D){e=D.split(".");C=window[e[0]]=window[e[0]]||{};Ext.each(e.slice(1),function(E){C=C[E]=C[E]||{}})});return C},urlEncode:function(G,F){var D,C=[],E=encodeURIComponent;Ext.iterate(G,function(e,H){D=Ext.isEmpty(H);Ext.each(D?e:H,function(I){C.push("&",E(e),"=",(!Ext.isEmpty(I)&&(I!=e||!D))?(Ext.isDate(I)?Ext.encode(I).replace(/"/g,""):E(I)):"")})});if(!F){C.shift();F=""}return F+C.join("")},urlDecode:function(D,C){if(Ext.isEmpty(D)){return{}}var G={},F=D.split("&"),H=decodeURIComponent,e,E;Ext.each(F,function(I){I=I.split("=");e=H(I[0]);E=H(I[1]);G[e]=C||!G[e]?E:[].concat(G[e]).concat(E)});return G},urlAppend:function(e,C){if(!Ext.isEmpty(C)){return e+(e.indexOf("?")===-1?"?":"&")+C}return e},toArray:function(){return r?function(D,G,E,F){F=[];for(var C=0,e=D.length;C0){return setTimeout(d,c)}d();return 0}});Ext.applyIf(String,{format:function(b){var a=Ext.toArray(arguments,1);return b.replace(/\{(\d+)\}/g,function(c,d){return a[d]})}});Ext.applyIf(Array.prototype,{indexOf:function(b,c){var a=this.length;c=c||0;c+=(c<0)?a:0;for(;c'),g=h.child("div",true);var e=g.offsetWidth;h.setStyle("overflow",(Ext.isWebKit||Ext.isGecko)?"auto":"scroll");var d=g.offsetWidth;h.remove();b=e-d+2}return b},combine:function(){var f=arguments,e=f.length,h=[];for(var g=0;gg?1:-1};Ext.each(d,function(g){f=e(f,g)==1?f:g});return f},mean:function(d){return d.length>0?Ext.sum(d)/d.length:undefined},sum:function(d){var e=0;Ext.each(d,function(f){e+=f});return e},partition:function(d,e){var f=[[],[]];Ext.each(d,function(h,j,g){f[(e&&e(h,j,g))||(!e&&h)?0:1].push(h)});return f},invoke:function(d,e){var g=[],f=Array.prototype.slice.call(arguments,2);Ext.each(d,function(h,j){if(h&&Ext.isFunction(h[e])){g.push(h[e].apply(h,f))}else{g.push(undefined)}});return g},pluck:function(d,f){var e=[];Ext.each(d,function(g){e.push(g[f])});return e},zip:function(){var m=Ext.partition(arguments,function(i){return !Ext.isFunction(i)}),h=m[0],l=m[1][0],d=Ext.max(Ext.pluck(h,"length")),g=[];for(var k=0;k0){for(var p=0;p10000){clearInterval(h)}var f=document.getElementById(j);if(f){clearInterval(h);e.call(d||window,f)}};var h=setInterval(g,50)},resolveTextNode:Ext.isGecko?function(e){if(!e){return}var d=HTMLElement.prototype.toString.call(e);if(d=="[xpconnect wrapped native prototype]"||d=="[object XULElement]"){return}return e.nodeType==3?e.parentNode:e}:function(d){return d&&d.nodeType==3?d.parentNode:d},getRelatedTarget:function(e){e=e.browserEvent||e;var d=e.relatedTarget;if(!d){if(e.type=="mouseout"){d=e.toElement}else{if(e.type=="mouseover"){d=e.fromElement}}}return this.resolveTextNode(d)}};Ext.lib.Ajax=function(){var d=function(f){return function(h,g){if((g=="error"||g=="timeout")&&f.failure){f.failure.call(f.scope||window,e(f,h))}else{if(f.success){f.success.call(f.scope||window,e(f,h))}}}};var e=function(f,l){var h={},j,g,i;try{j=l.getAllResponseHeaders();Ext.each(j.replace(/\r\n/g,"\n").split("\n"),function(m){g=m.indexOf(":");if(g>=0){i=m.substr(0,g).toLowerCase();if(m.charAt(g+1)==" "){++g}h[i]=m.substr(g+1)}})}catch(k){}return{responseText:l.responseText,responseXML:l.responseXML,argument:f.argument,status:l.status,statusText:l.statusText,getResponseHeader:function(m){return h[m.toLowerCase()]},getAllResponseHeaders:function(){return j}}};return{request:function(l,i,f,j,g){var k={type:l,url:i,data:j,timeout:f.timeout,complete:d(f)};if(g){var h=g.headers;if(g.xmlData){k.data=g.xmlData;k.processData=false;k.type=(l?l:(g.method?g.method:"POST"));if(!h||!h["Content-Type"]){k.contentType="text/xml"}}else{if(g.jsonData){k.data=typeof g.jsonData=="object"?Ext.encode(g.jsonData):g.jsonData;k.processData=false;k.type=(l?l:(g.method?g.method:"POST"));if(!h||!h["Content-Type"]){k.contentType="application/json"}}}if(h){k.beforeSend=function(n){for(var m in h){if(h.hasOwnProperty(m)){n.setRequestHeader(m,h[m])}}}}}jQuery.ajax(k)},formRequest:function(j,i,g,k,f,h){jQuery.ajax({type:Ext.getDom(j).method||"POST",url:i,data:jQuery(j).serialize()+(k?"&"+k:""),timeout:g.timeout,complete:d(g)})},isCallInProgress:function(f){return false},abort:function(f){return false},serializeForm:function(f){return jQuery(f.dom||f).serialize()}}}();Ext.lib.Anim=function(){var d=function(e,f){var g=true;return{stop:function(h){},isAnimated:function(){return g},proxyCallback:function(){g=false;Ext.callback(e,f)}}};return{scroll:function(h,f,j,k,e,g){var i=d(e,g);h=Ext.getDom(h);if(typeof f.scroll.to[0]=="number"){h.scrollLeft=f.scroll.to[0]}if(typeof f.scroll.to[1]=="number"){h.scrollTop=f.scroll.to[1]}i.proxyCallback();return i},motion:function(h,f,i,j,e,g){return this.run(h,f,i,j,e,g)},color:function(h,f,j,k,e,g){var i=d(e,g);i.proxyCallback();return i},run:function(g,q,j,p,h,s,r){var l=d(h,s),m=Ext.fly(g,"_animrun");var f={};for(var i in q){switch(i){case"points":var n,u;m.position();if(n=q.points.by){var t=m.getXY();u=m.translatePoints([t[0]+n[0],t[1]+n[1]])}else{u=m.translatePoints(q.points.to)}f.left=u.left;f.top=u.top;if(!parseInt(m.getStyle("left"),10)){m.setLeft(0)}if(!parseInt(m.getStyle("top"),10)){m.setTop(0)}if(q.points.from){m.setXY(q.points.from)}break;case"width":f.width=q.width.to;if(q.width.from){m.setWidth(q.width.from)}break;case"height":f.height=q.height.to;if(q.height.from){m.setHeight(q.height.from)}break;case"opacity":f.opacity=q.opacity.to;if(q.opacity.from){m.setOpacity(q.opacity.from)}break;case"left":f.left=q.left.to;if(q.left.from){m.setLeft(q.left.from)}break;case"top":f.top=q.top.to;if(q.top.from){m.setTop(q.top.from)}break;case"callback":case"scope":case"xy":break;default:f[i]=q[i].to;if(q[i].from){m.setStyle(i,q[i].from)}break}}jQuery(g).animate(f,j*1000,undefined,l.proxyCallback);return l}}}();Ext.lib.Region=function(f,g,d,e){this.top=f;this[1]=f;this.right=g;this.bottom=d;this.left=e;this[0]=e};Ext.lib.Region.prototype={contains:function(d){return(d.left>=this.left&&d.right<=this.right&&d.top>=this.top&&d.bottom<=this.bottom)},getArea:function(){return((this.bottom-this.top)*(this.right-this.left))},intersect:function(h){var f=Math.max(this.top,h.top);var g=Math.min(this.right,h.right);var d=Math.min(this.bottom,h.bottom);var e=Math.max(this.left,h.left);if(d>=f&&g>=e){return new Ext.lib.Region(f,g,d,e)}else{return null}},union:function(h){var f=Math.min(this.top,h.top);var g=Math.max(this.right,h.right);var d=Math.max(this.bottom,h.bottom);var e=Math.min(this.left,h.left);return new Ext.lib.Region(f,g,d,e)},constrainTo:function(d){this.top=this.top.constrain(d.top,d.bottom);this.bottom=this.bottom.constrain(d.top,d.bottom);this.left=this.left.constrain(d.left,d.right);this.right=this.right.constrain(d.left,d.right);return this},adjust:function(f,e,d,g){this.top+=f;this.left+=e;this.right+=g;this.bottom+=d;return this}};Ext.lib.Region.getRegion=function(g){var i=Ext.lib.Dom.getXY(g);var f=i[1];var h=i[0]+g.offsetWidth;var d=i[1]+g.offsetHeight;var e=i[0];return new Ext.lib.Region(f,h,d,e)};Ext.lib.Point=function(d,e){if(Ext.isArray(d)){e=d[1];d=d[0]}this.x=this.right=this.left=this[0]=d;this.y=this.top=this.bottom=this[1]=e};Ext.lib.Point.prototype=new Ext.lib.Region();if(Ext.isIE){function a(){var d=Function.prototype;delete d.createSequence;delete d.defer;delete d.createDelegate;delete d.createCallback;delete d.createInterceptor;window.detachEvent("onunload",a)}window.attachEvent("onunload",a)}})();
\ No newline at end of file
+window.undefined=window.undefined;Ext={version:"3.2.1",versionDetail:{major:3,minor:2,patch:1}};Ext.apply=function(d,e,b){if(b){Ext.apply(d,b)}if(d&&e&&typeof e=="object"){for(var a in e){d[a]=e[a]}}return d};(function(){var g=0,s=Object.prototype.toString,t=navigator.userAgent.toLowerCase(),y=function(e){return e.test(t)},i=document,l=i.compatMode=="CSS1Compat",A=y(/opera/),h=y(/\bchrome\b/),u=y(/webkit/),x=!h&&y(/safari/),f=x&&y(/applewebkit\/4/),b=x&&y(/version\/3/),B=x&&y(/version\/4/),r=!A&&y(/msie/),p=r&&y(/msie 7/),o=r&&y(/msie 8/),q=r&&!p&&!o,n=!u&&y(/gecko/),d=n&&y(/rv:1\.8/),a=n&&y(/rv:1\.9/),v=r&&!l,z=y(/windows|win32/),k=y(/macintosh|mac os x/),j=y(/adobeair/),m=y(/linux/),c=/^https/i.test(window.location.protocol);if(q){try{i.execCommand("BackgroundImageCache",false,true)}catch(w){}}Ext.apply(Ext,{SSL_SECURE_URL:c&&r?'javascript:""':"about:blank",isStrict:l,isSecure:c,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,enableNestedListenerRemoval:false,USE_NATIVE_JSON:false,applyIf:function(C,D){if(C){for(var e in D){if(!Ext.isDefined(C[e])){C[e]=D[e]}}}return C},id:function(e,C){e=Ext.getDom(e,true)||{};if(!e.id){e.id=(C||"ext-gen")+(++g)}return e.id},extend:function(){var C=function(E){for(var D in E){this[D]=E[D]}};var e=Object.prototype.constructor;return function(J,G,I){if(typeof G=="object"){I=G;G=J;J=I.constructor!=e?I.constructor:function(){G.apply(this,arguments)}}var E=function(){},H,D=G.prototype;E.prototype=D;H=J.prototype=new E();H.constructor=J;J.superclass=D;if(D.constructor==e){D.constructor=G}J.override=function(F){Ext.override(J,F)};H.superclass=H.supr=(function(){return D});H.override=C;Ext.override(J,I);J.extend=function(F){return Ext.extend(J,F)};return J}}(),override:function(e,D){if(D){var C=e.prototype;Ext.apply(C,D);if(Ext.isIE&&D.hasOwnProperty("toString")){C.toString=D.toString}}},namespace:function(){var C,e;Ext.each(arguments,function(D){e=D.split(".");C=window[e[0]]=window[e[0]]||{};Ext.each(e.slice(1),function(E){C=C[E]=C[E]||{}})});return C},urlEncode:function(G,F){var D,C=[],E=encodeURIComponent;Ext.iterate(G,function(e,H){D=Ext.isEmpty(H);Ext.each(D?e:H,function(I){C.push("&",E(e),"=",(!Ext.isEmpty(I)&&(I!=e||!D))?(Ext.isDate(I)?Ext.encode(I).replace(/"/g,""):E(I)):"")})});if(!F){C.shift();F=""}return F+C.join("")},urlDecode:function(D,C){if(Ext.isEmpty(D)){return{}}var G={},F=D.split("&"),H=decodeURIComponent,e,E;Ext.each(F,function(I){I=I.split("=");e=H(I[0]);E=H(I[1]);G[e]=C||!G[e]?E:[].concat(G[e]).concat(E)});return G},urlAppend:function(e,C){if(!Ext.isEmpty(C)){return e+(e.indexOf("?")===-1?"?":"&")+C}return e},toArray:function(){return r?function(D,G,E,F){F=[];for(var C=0,e=D.length;C0){return setTimeout(d,c)}d();return 0}});Ext.applyIf(String,{format:function(b){var a=Ext.toArray(arguments,1);return b.replace(/\{(\d+)\}/g,function(c,d){return a[d]})}});Ext.applyIf(Array.prototype,{indexOf:function(b,c){var a=this.length;c=c||0;c+=(c<0)?a:0;for(;c'),g=h.child("div",true);var e=g.offsetWidth;h.setStyle("overflow",(Ext.isWebKit||Ext.isGecko)?"auto":"scroll");var d=g.offsetWidth;h.remove();b=e-d+2}return b},combine:function(){var f=arguments,e=f.length,h=[];for(var g=0;gg?1:-1};Ext.each(d,function(g){f=e(f,g)==1?f:g});return f},mean:function(d){return d.length>0?Ext.sum(d)/d.length:undefined},sum:function(d){var e=0;Ext.each(d,function(f){e+=f});return e},partition:function(d,e){var f=[[],[]];Ext.each(d,function(h,j,g){f[(e&&e(h,j,g))||(!e&&h)?0:1].push(h)});return f},invoke:function(d,e){var g=[],f=Array.prototype.slice.call(arguments,2);Ext.each(d,function(h,j){if(h&&typeof h[e]=="function"){g.push(h[e].apply(h,f))}else{g.push(undefined)}});return g},pluck:function(d,f){var e=[];Ext.each(d,function(g){e.push(g[f])});return e},zip:function(){var m=Ext.partition(arguments,function(i){return typeof i!="function"}),h=m[0],l=m[1][0],d=Ext.max(Ext.pluck(h,"length")),g=[];for(var k=0;k0){for(var p=0;p10000){clearInterval(h)}var f=document.getElementById(j);if(f){clearInterval(h);e.call(d||window,f)}};var h=setInterval(g,50)},resolveTextNode:Ext.isGecko?function(e){if(!e){return}var d=HTMLElement.prototype.toString.call(e);if(d=="[xpconnect wrapped native prototype]"||d=="[object XULElement]"){return}return e.nodeType==3?e.parentNode:e}:function(d){return d&&d.nodeType==3?d.parentNode:d},getRelatedTarget:function(e){e=e.browserEvent||e;var d=e.relatedTarget;if(!d){if(e.type=="mouseout"){d=e.toElement}else{if(e.type=="mouseover"){d=e.fromElement}}}return this.resolveTextNode(d)}};Ext.lib.Ajax=function(){var d=function(f){return function(h,g){if((g=="error"||g=="timeout")&&f.failure){f.failure.call(f.scope||window,e(f,h))}else{if(f.success){f.success.call(f.scope||window,e(f,h))}}}};var e=function(f,l){var h={},j,g,i;try{j=l.getAllResponseHeaders();Ext.each(j.replace(/\r\n/g,"\n").split("\n"),function(m){g=m.indexOf(":");if(g>=0){i=m.substr(0,g).toLowerCase();if(m.charAt(g+1)==" "){++g}h[i]=m.substr(g+1)}})}catch(k){}return{responseText:l.responseText,responseXML:l.responseXML,argument:f.argument,status:l.status,statusText:l.statusText,getResponseHeader:function(m){return h[m.toLowerCase()]},getAllResponseHeaders:function(){return j}}};return{request:function(l,i,f,j,g){var k={type:l,url:i,data:j,timeout:f.timeout,complete:d(f)};if(g){var h=g.headers;if(g.xmlData){k.data=g.xmlData;k.processData=false;k.type=(l?l:(g.method?g.method:"POST"));if(!h||!h["Content-Type"]){k.contentType="text/xml"}}else{if(g.jsonData){k.data=typeof g.jsonData=="object"?Ext.encode(g.jsonData):g.jsonData;k.processData=false;k.type=(l?l:(g.method?g.method:"POST"));if(!h||!h["Content-Type"]){k.contentType="application/json"}}}if(h){k.beforeSend=function(n){for(var m in h){if(h.hasOwnProperty(m)){n.setRequestHeader(m,h[m])}}}}}jQuery.ajax(k)},formRequest:function(j,i,g,k,f,h){jQuery.ajax({type:Ext.getDom(j).method||"POST",url:i,data:jQuery(j).serialize()+(k?"&"+k:""),timeout:g.timeout,complete:d(g)})},isCallInProgress:function(f){return false},abort:function(f){return false},serializeForm:function(f){return jQuery(f.dom||f).serialize()}}}();Ext.lib.Anim=function(){var d=function(e,f){var g=true;return{stop:function(h){},isAnimated:function(){return g},proxyCallback:function(){g=false;Ext.callback(e,f)}}};return{scroll:function(h,f,j,k,e,g){var i=d(e,g);h=Ext.getDom(h);if(typeof f.scroll.to[0]=="number"){h.scrollLeft=f.scroll.to[0]}if(typeof f.scroll.to[1]=="number"){h.scrollTop=f.scroll.to[1]}i.proxyCallback();return i},motion:function(h,f,i,j,e,g){return this.run(h,f,i,j,e,g)},color:function(h,f,j,k,e,g){var i=d(e,g);i.proxyCallback();return i},run:function(g,q,j,p,h,s,r){var l=d(h,s),m=Ext.fly(g,"_animrun");var f={};for(var i in q){switch(i){case"points":var n,u;m.position();if(n=q.points.by){var t=m.getXY();u=m.translatePoints([t[0]+n[0],t[1]+n[1]])}else{u=m.translatePoints(q.points.to)}f.left=u.left;f.top=u.top;if(!parseInt(m.getStyle("left"),10)){m.setLeft(0)}if(!parseInt(m.getStyle("top"),10)){m.setTop(0)}if(q.points.from){m.setXY(q.points.from)}break;case"width":f.width=q.width.to;if(q.width.from){m.setWidth(q.width.from)}break;case"height":f.height=q.height.to;if(q.height.from){m.setHeight(q.height.from)}break;case"opacity":f.opacity=q.opacity.to;if(q.opacity.from){m.setOpacity(q.opacity.from)}break;case"left":f.left=q.left.to;if(q.left.from){m.setLeft(q.left.from)}break;case"top":f.top=q.top.to;if(q.top.from){m.setTop(q.top.from)}break;case"callback":case"scope":case"xy":break;default:f[i]=q[i].to;if(q[i].from){m.setStyle(i,q[i].from)}break}}jQuery(g).animate(f,j*1000,undefined,l.proxyCallback);return l}}}();Ext.lib.Region=function(f,g,d,e){this.top=f;this[1]=f;this.right=g;this.bottom=d;this.left=e;this[0]=e};Ext.lib.Region.prototype={contains:function(d){return(d.left>=this.left&&d.right<=this.right&&d.top>=this.top&&d.bottom<=this.bottom)},getArea:function(){return((this.bottom-this.top)*(this.right-this.left))},intersect:function(h){var f=Math.max(this.top,h.top);var g=Math.min(this.right,h.right);var d=Math.min(this.bottom,h.bottom);var e=Math.max(this.left,h.left);if(d>=f&&g>=e){return new Ext.lib.Region(f,g,d,e)}else{return null}},union:function(h){var f=Math.min(this.top,h.top);var g=Math.max(this.right,h.right);var d=Math.max(this.bottom,h.bottom);var e=Math.min(this.left,h.left);return new Ext.lib.Region(f,g,d,e)},constrainTo:function(d){this.top=this.top.constrain(d.top,d.bottom);this.bottom=this.bottom.constrain(d.top,d.bottom);this.left=this.left.constrain(d.left,d.right);this.right=this.right.constrain(d.left,d.right);return this},adjust:function(f,e,d,g){this.top+=f;this.left+=e;this.right+=g;this.bottom+=d;return this}};Ext.lib.Region.getRegion=function(g){var i=Ext.lib.Dom.getXY(g);var f=i[1];var h=i[0]+g.offsetWidth;var d=i[1]+g.offsetHeight;var e=i[0];return new Ext.lib.Region(f,h,d,e)};Ext.lib.Point=function(d,e){if(Ext.isArray(d)){e=d[1];d=d[0]}this.x=this.right=this.left=this[0]=d;this.y=this.top=this.bottom=this[1]=e};Ext.lib.Point.prototype=new Ext.lib.Region();if(Ext.isIE){function a(){var d=Function.prototype;delete d.createSequence;delete d.defer;delete d.createDelegate;delete d.createCallback;delete d.createInterceptor;window.detachEvent("onunload",a)}window.attachEvent("onunload",a)}})();
\ No newline at end of file
diff --git a/adapter/prototype/ext-prototype-adapter-debug.js b/adapter/prototype/ext-prototype-adapter-debug.js
index aa1a11a9..f16253b3 100644
--- a/adapter/prototype/ext-prototype-adapter-debug.js
+++ b/adapter/prototype/ext-prototype-adapter-debug.js
@@ -1,10 +1,9 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
-
// for old browsers
window.undefined = window.undefined;
@@ -19,7 +18,12 @@ Ext = {
* The version of the framework
* @type String
*/
- version : '3.2.0'
+ version : '3.2.1',
+ versionDetail : {
+ major: 3,
+ minor: 2,
+ patch: 1
+ }
};
/**
@@ -227,7 +231,7 @@ MyGridPanel = Ext.extend(Ext.grid.GridPanel, {
var oc = Object.prototype.constructor;
return function(sb, sp, overrides){
- if(Ext.isObject(sp)){
+ if(typeof sp == 'object'){
overrides = sp;
sp = sb;
sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);};
@@ -475,7 +479,7 @@ Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", false); // returns {foo: "1", bar: ["2"
if(Ext.isIterable(obj)){
Ext.each(obj, fn, scope);
return;
- }else if(Ext.isObject(obj)){
+ }else if(typeof obj == 'object'){
for(var prop in obj){
if(obj.hasOwnProperty(prop)){
if(fn.call(scope || obj, prop, obj[prop], obj) === false){
@@ -516,7 +520,7 @@ function(el){
if (el.dom){
return el.dom;
} else {
- if (Ext.isString(el)) {
+ 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
@@ -1033,7 +1037,7 @@ Ext.ns("Ext.grid", "Ext.list", "Ext.dd", "Ext.tree", "Ext.form", "Ext.menu",
*/
Ext.apply(Ext, function(){
- var E = Ext,
+ var E = Ext,
idSeed = 0,
scrollWidth = null;
@@ -1046,13 +1050,13 @@ Ext.apply(Ext, function(){
emptyFn : function(){},
/**
- * URL to a 1x1 transparent gif image used by Ext to create inline icons with CSS background images.
+ * URL to a 1x1 transparent gif image used by Ext to create inline icons with CSS background images.
* In older versions of IE, this defaults to "http://extjs.com/s.gif" and you should change this to a URL on your server.
* For other browsers it uses an inline data URL.
* @type String
*/
BLANK_IMAGE_URL : Ext.isIE6 || Ext.isIE7 || Ext.isAir ?
- 'http:/' + '/extjs.com/s.gif' :
+ 'http:/' + '/www.extjs.com/s.gif' :
'data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==',
extendX : function(supr, fn){
@@ -1074,7 +1078,7 @@ Ext.apply(Ext, function(){
* @return {Number} Value, if numeric, else defaultValue
*/
num : function(v, defaultValue){
- v = Number(Ext.isEmpty(v) || Ext.isArray(v) || Ext.isBoolean(v) || (Ext.isString(v) && v.trim().length == 0) ? NaN : v);
+ 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;
},
@@ -1117,13 +1121,13 @@ Ext.addBehaviors({
'#foo a@click' : function(e, t){
// do something
},
-
+
// add the same listener to multiple selectors (separated by comma BEFORE the @)
'#foo a, #bar span.some-class@mouseover' : function(){
// do something
}
});
- *
+ *
* @param {Object} obj The list of behaviors to apply
*/
addBehaviors : function(o){
@@ -1148,7 +1152,7 @@ Ext.addBehaviors({
cache = null;
}
},
-
+
/**
* Utility method for getting the width of the browser scrollbar. This can differ depending on
* operating system settings, such as the theme or font size.
@@ -1159,7 +1163,7 @@ Ext.addBehaviors({
if(!Ext.isReady){
return 0;
}
-
+
if(force === true || scrollWidth === null){
// Append our div, do our calculation and then remove it
var div = Ext.getBody().createChild(' '),
@@ -1201,7 +1205,7 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
this.initialBox = Ext.copyTo({}, this.initialConfig, 'x,y,width,height');
}
});
- *
+ *
* @param {Object} dest The destination object.
* @param {Object} source The source object.
* @param {Array/String} names Either an Array of property names, or a comma-delimited list
@@ -1209,7 +1213,7 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
* @return {Object} The modified object.
*/
copyTo : function(dest, source, names){
- if(Ext.isString(names)){
+ if(typeof names == 'string'){
names = names.split(/[,;\s]/);
}
Ext.each(names, function(name){
@@ -1235,11 +1239,11 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
if(arg){
if(Ext.isArray(arg)){
this.destroy.apply(this, arg);
- }else if(Ext.isFunction(arg.destroy)){
+ }else if(typeof arg.destroy == 'function'){
arg.destroy();
}else if(arg.dom){
arg.remove();
- }
+ }
}
}, this);
},
@@ -1366,8 +1370,8 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
/**
* Partitions the set into two sets: a true set and a false set.
- * Example:
- * Example2:
+ * Example:
+ * Example2:
*
// Example 1:
Ext.partition([true, false, true, true, false]); // [[true, true, true], [false, false]]
@@ -1411,7 +1415,7 @@ Ext.invoke(Ext.query("p"), "getAttribute", "id");
var ret = [],
args = Array.prototype.slice.call(arguments, 2);
Ext.each(arr, function(v,i) {
- if (v && Ext.isFunction(v[methodName])) {
+ if (v && typeof v[methodName] == 'function') {
ret.push(v[methodName].apply(v, args));
} else {
ret.push(undefined);
@@ -1458,7 +1462,7 @@ Ext.zip(
* @return {Array} The zipped set.
*/
zip : function(){
- var parts = Ext.partition(arguments, function( val ){ return !Ext.isFunction(val); }),
+ 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")),
@@ -1535,7 +1539,7 @@ Ext.zip(
case RegExp: return 'regexp';
case Date: return 'date';
}
- if(Ext.isNumber(o.length) && Ext.isFunction(o.item)) {
+ if(typeof o.length == 'number' && typeof o.item == 'function') {
return 'nodelist';
}
}
@@ -1548,7 +1552,7 @@ Ext.zip(
// internal
callback : function(cb, scope, args, delay){
- if(Ext.isFunction(cb)){
+ if(typeof cb == 'function'){
if(delay){
cb.defer(delay, scope, args || []);
}else{
@@ -1588,7 +1592,7 @@ sayGoodbye('Fred'); // both alerts show
*/
createSequence : function(fcn, scope){
var method = this;
- return !Ext.isFunction(fcn) ?
+ return (typeof fcn != 'function') ?
this :
function(){
var retval = method.apply(this || window, arguments);
diff --git a/adapter/prototype/ext-prototype-adapter.js b/adapter/prototype/ext-prototype-adapter.js
index 2377ffe3..923d1e2d 100644
--- a/adapter/prototype/ext-prototype-adapter.js
+++ b/adapter/prototype/ext-prototype-adapter.js
@@ -1,7 +1,7 @@
/*
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
-window.undefined=window.undefined;Ext={version:"3.2.0"};Ext.apply=function(d,e,b){if(b){Ext.apply(d,b)}if(d&&e&&typeof e=="object"){for(var a in e){d[a]=e[a]}}return d};(function(){var g=0,s=Object.prototype.toString,t=navigator.userAgent.toLowerCase(),y=function(e){return e.test(t)},i=document,l=i.compatMode=="CSS1Compat",A=y(/opera/),h=y(/\bchrome\b/),u=y(/webkit/),x=!h&&y(/safari/),f=x&&y(/applewebkit\/4/),b=x&&y(/version\/3/),B=x&&y(/version\/4/),r=!A&&y(/msie/),p=r&&y(/msie 7/),o=r&&y(/msie 8/),q=r&&!p&&!o,n=!u&&y(/gecko/),d=n&&y(/rv:1\.8/),a=n&&y(/rv:1\.9/),v=r&&!l,z=y(/windows|win32/),k=y(/macintosh|mac os x/),j=y(/adobeair/),m=y(/linux/),c=/^https/i.test(window.location.protocol);if(q){try{i.execCommand("BackgroundImageCache",false,true)}catch(w){}}Ext.apply(Ext,{SSL_SECURE_URL:c&&r?'javascript:""':"about:blank",isStrict:l,isSecure:c,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,enableNestedListenerRemoval:false,USE_NATIVE_JSON:false,applyIf:function(C,D){if(C){for(var e in D){if(!Ext.isDefined(C[e])){C[e]=D[e]}}}return C},id:function(e,C){e=Ext.getDom(e,true)||{};if(!e.id){e.id=(C||"ext-gen")+(++g)}return e.id},extend:function(){var C=function(E){for(var D in E){this[D]=E[D]}};var e=Object.prototype.constructor;return function(J,G,I){if(Ext.isObject(G)){I=G;G=J;J=I.constructor!=e?I.constructor:function(){G.apply(this,arguments)}}var E=function(){},H,D=G.prototype;E.prototype=D;H=J.prototype=new E();H.constructor=J;J.superclass=D;if(D.constructor==e){D.constructor=G}J.override=function(F){Ext.override(J,F)};H.superclass=H.supr=(function(){return D});H.override=C;Ext.override(J,I);J.extend=function(F){return Ext.extend(J,F)};return J}}(),override:function(e,D){if(D){var C=e.prototype;Ext.apply(C,D);if(Ext.isIE&&D.hasOwnProperty("toString")){C.toString=D.toString}}},namespace:function(){var C,e;Ext.each(arguments,function(D){e=D.split(".");C=window[e[0]]=window[e[0]]||{};Ext.each(e.slice(1),function(E){C=C[E]=C[E]||{}})});return C},urlEncode:function(G,F){var D,C=[],E=encodeURIComponent;Ext.iterate(G,function(e,H){D=Ext.isEmpty(H);Ext.each(D?e:H,function(I){C.push("&",E(e),"=",(!Ext.isEmpty(I)&&(I!=e||!D))?(Ext.isDate(I)?Ext.encode(I).replace(/"/g,""):E(I)):"")})});if(!F){C.shift();F=""}return F+C.join("")},urlDecode:function(D,C){if(Ext.isEmpty(D)){return{}}var G={},F=D.split("&"),H=decodeURIComponent,e,E;Ext.each(F,function(I){I=I.split("=");e=H(I[0]);E=H(I[1]);G[e]=C||!G[e]?E:[].concat(G[e]).concat(E)});return G},urlAppend:function(e,C){if(!Ext.isEmpty(C)){return e+(e.indexOf("?")===-1?"?":"&")+C}return e},toArray:function(){return r?function(D,G,E,F){F=[];for(var C=0,e=D.length;C0){return setTimeout(d,c)}d();return 0}});Ext.applyIf(String,{format:function(b){var a=Ext.toArray(arguments,1);return b.replace(/\{(\d+)\}/g,function(c,d){return a[d]})}});Ext.applyIf(Array.prototype,{indexOf:function(b,c){var a=this.length;c=c||0;c+=(c<0)?a:0;for(;c'),g=h.child("div",true);var e=g.offsetWidth;h.setStyle("overflow",(Ext.isWebKit||Ext.isGecko)?"auto":"scroll");var d=g.offsetWidth;h.remove();b=e-d+2}return b},combine:function(){var f=arguments,e=f.length,h=[];for(var g=0;gg?1:-1};Ext.each(d,function(g){f=e(f,g)==1?f:g});return f},mean:function(d){return d.length>0?Ext.sum(d)/d.length:undefined},sum:function(d){var e=0;Ext.each(d,function(f){e+=f});return e},partition:function(d,e){var f=[[],[]];Ext.each(d,function(h,j,g){f[(e&&e(h,j,g))||(!e&&h)?0:1].push(h)});return f},invoke:function(d,e){var g=[],f=Array.prototype.slice.call(arguments,2);Ext.each(d,function(h,j){if(h&&Ext.isFunction(h[e])){g.push(h[e].apply(h,f))}else{g.push(undefined)}});return g},pluck:function(d,f){var e=[];Ext.each(d,function(g){e.push(g[f])});return e},zip:function(){var m=Ext.partition(arguments,function(i){return !Ext.isFunction(i)}),h=m[0],l=m[1][0],d=Ext.max(Ext.pluck(h,"length")),g=[];for(var k=0;k0){for(var p=0;p=2)||(parseInt(a[1])>=7)||(parseInt(a[2])>=1),g={},d=function(i,j){if(i&&i.firstChild){while(j){if(j===i){return true}j=j.parentNode;if(j&&(j.nodeType!=1)){j=null}}}return false},b=function(i){return !d(i.currentTarget,Ext.lib.Event.getRelatedTarget(i))};Ext.lib.Dom={getViewWidth:function(i){return i?this.getDocumentWidth():this.getViewportWidth()},getViewHeight:function(i){return i?this.getDocumentHeight():this.getViewportHeight()},getDocumentHeight:function(){var i=(document.compatMode!="CSS1Compat")?document.body.scrollHeight:document.documentElement.scrollHeight;return Math.max(i,this.getViewportHeight())},getDocumentWidth:function(){var i=(document.compatMode!="CSS1Compat")?document.body.scrollWidth:document.documentElement.scrollWidth;return Math.max(i,this.getViewportWidth())},getViewportHeight:function(){var i=self.innerHeight;var j=document.compatMode;if((j||Ext.isIE)&&!Ext.isOpera){i=(j=="CSS1Compat")?document.documentElement.clientHeight:document.body.clientHeight}return i},getViewportWidth:function(){var i=self.innerWidth;var j=document.compatMode;if(j||Ext.isIE){i=(j=="CSS1Compat")?document.documentElement.clientWidth:document.body.clientWidth}return i},isAncestor:function(j,k){var i=false;j=Ext.getDom(j);k=Ext.getDom(k);if(j&&k){if(j.contains){return j.contains(k)}else{if(j.compareDocumentPosition){return !!(j.compareDocumentPosition(k)&16)}else{while(k=k.parentNode){i=k==j||i}}}}return i},getRegion:function(i){return Ext.lib.Region.getRegion(i)},getY:function(i){return this.getXY(i)[1]},getX:function(i){return this.getXY(i)[0]},getXY:function(k){var j,o,r,s,n=(document.body||document.documentElement);k=Ext.getDom(k);if(k==n){return[0,0]}if(k.getBoundingClientRect){r=k.getBoundingClientRect();s=f(document).getScroll();return[Math.round(r.left+s.left),Math.round(r.top+s.top)]}var t=0,q=0;j=k;var i=f(k).getStyle("position")=="absolute";while(j){t+=j.offsetLeft;q+=j.offsetTop;if(!i&&f(j).getStyle("position")=="absolute"){i=true}if(Ext.isGecko){o=f(j);var u=parseInt(o.getStyle("borderTopWidth"),10)||0;var l=parseInt(o.getStyle("borderLeftWidth"),10)||0;t+=l;q+=u;if(j!=k&&o.getStyle("overflow")!="visible"){t+=l;q+=u}}j=j.offsetParent}if(Ext.isSafari&&i){t-=n.offsetLeft;q-=n.offsetTop}if(Ext.isGecko&&!i){var m=f(n);t+=parseInt(m.getStyle("borderLeftWidth"),10)||0;q+=parseInt(m.getStyle("borderTopWidth"),10)||0}j=k.parentNode;while(j&&j!=n){if(!Ext.isOpera||(j.tagName!="TR"&&f(j).getStyle("display")!="inline")){t-=j.scrollLeft;q-=j.scrollTop}j=j.parentNode}return[t,q]},setXY:function(i,j){i=Ext.fly(i,"_setXY");i.position();var k=i.translatePoints(j);if(j[0]!==false){i.dom.style.left=k.left+"px"}if(j[1]!==false){i.dom.style.top=k.top+"px"}},setX:function(j,i){this.setXY(j,[i,false])},setY:function(i,j){this.setXY(i,[false,j])}};Ext.lib.Event={getPageX:function(i){return Event.pointerX(i.browserEvent||i)},getPageY:function(i){return Event.pointerY(i.browserEvent||i)},getXY:function(i){i=i.browserEvent||i;return[Event.pointerX(i),Event.pointerY(i)]},getTarget:function(i){return Event.element(i.browserEvent||i)},resolveTextNode:Ext.isGecko?function(j){if(!j){return}var i=HTMLElement.prototype.toString.call(j);if(i=="[xpconnect wrapped native prototype]"||i=="[object XULElement]"){return}return j.nodeType==3?j.parentNode:j}:function(i){return i&&i.nodeType==3?i.parentNode:i},getRelatedTarget:function(j){j=j.browserEvent||j;var i=j.relatedTarget;if(!i){if(j.type=="mouseout"){i=j.toElement}else{if(j.type=="mouseover"){i=j.fromElement}}}return this.resolveTextNode(i)},on:function(k,i,j){if((i=="mouseenter"||i=="mouseleave")&&!h){var l=g[k.id]||(g[k.id]={});l[i]=j;j=j.createInterceptor(b);i=(i=="mouseenter")?"mouseover":"mouseout"}Event.observe(k,i,j,false)},un:function(k,i,j){if((i=="mouseenter"||i=="mouseleave")&&!h){var m=g[k.id],l=m&&m[i];if(l){j=l.fn;delete m[i];i=(i=="mouseenter")?"mouseover":"mouseout"}}Event.stopObserving(k,i,j,false)},purgeElement:function(i){},preventDefault:function(i){i=i.browserEvent||i;if(i.preventDefault){i.preventDefault()}else{i.returnValue=false}},stopPropagation:function(i){i=i.browserEvent||i;if(i.stopPropagation){i.stopPropagation()}else{i.cancelBubble=true}},stopEvent:function(i){Event.stop(i.browserEvent||i)},onAvailable:function(n,j,i){var m=new Date(),l;var k=function(){if(m.getElapsed()>10000){clearInterval(l)}var o=document.getElementById(n);if(o){clearInterval(l);j.call(i||window,o)}};l=setInterval(k,50)}};Ext.lib.Ajax=function(){var k=function(l){return l.success?function(m){l.success.call(l.scope||window,i(l,m))}:Ext.emptyFn};var j=function(l){return l.failure?function(m){l.failure.call(l.scope||window,i(l,m))}:Ext.emptyFn};var i=function(l,r){var n={},p,m,o;try{p=r.getAllResponseHeaders();Ext.each(p.replace(/\r\n/g,"\n").split("\n"),function(s){m=s.indexOf(":");if(m>=0){o=s.substr(0,m).toLowerCase();if(s.charAt(m+1)==" "){++m}n[o]=s.substr(m+1)}})}catch(q){}return{responseText:r.responseText,responseXML:r.responseXML,argument:l.argument,status:r.status,statusText:r.statusText,getResponseHeader:function(s){return n[s.toLowerCase()]},getAllResponseHeaders:function(){return p}}};return{request:function(s,p,l,q,m){var r={method:s,parameters:q||"",timeout:l.timeout,onSuccess:k(l),onFailure:j(l)};if(m){var n=m.headers;if(n){r.requestHeaders=n}if(m.xmlData){s=(s?s:(m.method?m.method:"POST"));if(!n||!n["Content-Type"]){r.contentType="text/xml"}r.postBody=m.xmlData;delete r.parameters}if(m.jsonData){s=(s?s:(m.method?m.method:"POST"));if(!n||!n["Content-Type"]){r.contentType="application/json"}r.postBody=typeof m.jsonData=="object"?Ext.encode(m.jsonData):m.jsonData;delete r.parameters}}new Ajax.Request(p,r)},formRequest:function(p,o,m,q,l,n){new Ajax.Request(o,{method:Ext.getDom(p).method||"POST",parameters:Form.serialize(p)+(q?"&"+q:""),timeout:m.timeout,onSuccess:k(m),onFailure:j(m)})},isCallInProgress:function(l){return false},abort:function(l){return false},serializeForm:function(l){return Form.serialize(l.dom||l)}}}();Ext.lib.Anim=function(){var i={easeOut:function(k){return 1-Math.pow(1-k,2)},easeIn:function(k){return 1-Math.pow(1-k,2)}};var j=function(k,l){return{stop:function(m){this.effect.cancel()},isAnimated:function(){return this.effect.state=="running"},proxyCallback:function(){Ext.callback(k,l)}}};return{scroll:function(n,l,p,q,k,m){var o=j(k,m);n=Ext.getDom(n);if(typeof l.scroll.to[0]=="number"){n.scrollLeft=l.scroll.to[0]}if(typeof l.scroll.to[1]=="number"){n.scrollTop=l.scroll.to[1]}o.proxyCallback();return o},motion:function(n,l,o,p,k,m){return this.run(n,l,o,p,k,m)},color:function(n,l,o,p,k,m){return this.run(n,l,o,p,k,m)},run:function(m,v,r,u,n,x,w){var l={};for(var q in v){switch(q){case"points":var t,z,s=Ext.fly(m,"_animrun");s.position();if(t=v.points.by){var y=s.getXY();z=s.translatePoints([y[0]+t[0],y[1]+t[1]])}else{z=s.translatePoints(v.points.to)}l.left=z.left+"px";l.top=z.top+"px";break;case"width":l.width=v.width.to+"px";break;case"height":l.height=v.height.to+"px";break;case"opacity":l.opacity=String(v.opacity.to);break;default:l[q]=String(v[q].to);break}}var p=j(n,x);p.effect=new Effect.Morph(Ext.id(m),{duration:r,afterFinish:p.proxyCallback,transition:i[u]||Effect.Transitions.linear,style:l});return p}}}();function f(i){if(!e){e=new Ext.Element.Flyweight()}e.dom=i;return e}Ext.lib.Region=function(k,m,i,j){this.top=k;this[1]=k;this.right=m;this.bottom=i;this.left=j;this[0]=j};Ext.lib.Region.prototype={contains:function(i){return(i.left>=this.left&&i.right<=this.right&&i.top>=this.top&&i.bottom<=this.bottom)},getArea:function(){return((this.bottom-this.top)*(this.right-this.left))},intersect:function(n){var k=Math.max(this.top,n.top);var m=Math.min(this.right,n.right);var i=Math.min(this.bottom,n.bottom);var j=Math.max(this.left,n.left);if(i>=k&&m>=j){return new Ext.lib.Region(k,m,i,j)}else{return null}},union:function(n){var k=Math.min(this.top,n.top);var m=Math.max(this.right,n.right);var i=Math.max(this.bottom,n.bottom);var j=Math.min(this.left,n.left);return new Ext.lib.Region(k,m,i,j)},constrainTo:function(i){this.top=this.top.constrain(i.top,i.bottom);this.bottom=this.bottom.constrain(i.top,i.bottom);this.left=this.left.constrain(i.left,i.right);this.right=this.right.constrain(i.left,i.right);return this},adjust:function(k,j,i,m){this.top+=k;this.left+=j;this.right+=m;this.bottom+=i;return this}};Ext.lib.Region.getRegion=function(m){var o=Ext.lib.Dom.getXY(m);var k=o[1];var n=o[0]+m.offsetWidth;var i=o[1]+m.offsetHeight;var j=o[0];return new Ext.lib.Region(k,n,i,j)};Ext.lib.Point=function(i,j){if(Ext.isArray(i)){j=i[1];i=i[0]}this.x=this.right=this.left=this[0]=i;this.y=this.top=this.bottom=this[1]=j};Ext.lib.Point.prototype=new Ext.lib.Region();if(Ext.isIE){function c(){var i=Function.prototype;delete i.createSequence;delete i.defer;delete i.createDelegate;delete i.createCallback;delete i.createInterceptor;window.detachEvent("onunload",c)}window.attachEvent("onunload",c)}})();
\ No newline at end of file
+window.undefined=window.undefined;Ext={version:"3.2.1",versionDetail:{major:3,minor:2,patch:1}};Ext.apply=function(d,e,b){if(b){Ext.apply(d,b)}if(d&&e&&typeof e=="object"){for(var a in e){d[a]=e[a]}}return d};(function(){var g=0,s=Object.prototype.toString,t=navigator.userAgent.toLowerCase(),y=function(e){return e.test(t)},i=document,l=i.compatMode=="CSS1Compat",A=y(/opera/),h=y(/\bchrome\b/),u=y(/webkit/),x=!h&&y(/safari/),f=x&&y(/applewebkit\/4/),b=x&&y(/version\/3/),B=x&&y(/version\/4/),r=!A&&y(/msie/),p=r&&y(/msie 7/),o=r&&y(/msie 8/),q=r&&!p&&!o,n=!u&&y(/gecko/),d=n&&y(/rv:1\.8/),a=n&&y(/rv:1\.9/),v=r&&!l,z=y(/windows|win32/),k=y(/macintosh|mac os x/),j=y(/adobeair/),m=y(/linux/),c=/^https/i.test(window.location.protocol);if(q){try{i.execCommand("BackgroundImageCache",false,true)}catch(w){}}Ext.apply(Ext,{SSL_SECURE_URL:c&&r?'javascript:""':"about:blank",isStrict:l,isSecure:c,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,enableNestedListenerRemoval:false,USE_NATIVE_JSON:false,applyIf:function(C,D){if(C){for(var e in D){if(!Ext.isDefined(C[e])){C[e]=D[e]}}}return C},id:function(e,C){e=Ext.getDom(e,true)||{};if(!e.id){e.id=(C||"ext-gen")+(++g)}return e.id},extend:function(){var C=function(E){for(var D in E){this[D]=E[D]}};var e=Object.prototype.constructor;return function(J,G,I){if(typeof G=="object"){I=G;G=J;J=I.constructor!=e?I.constructor:function(){G.apply(this,arguments)}}var E=function(){},H,D=G.prototype;E.prototype=D;H=J.prototype=new E();H.constructor=J;J.superclass=D;if(D.constructor==e){D.constructor=G}J.override=function(F){Ext.override(J,F)};H.superclass=H.supr=(function(){return D});H.override=C;Ext.override(J,I);J.extend=function(F){return Ext.extend(J,F)};return J}}(),override:function(e,D){if(D){var C=e.prototype;Ext.apply(C,D);if(Ext.isIE&&D.hasOwnProperty("toString")){C.toString=D.toString}}},namespace:function(){var C,e;Ext.each(arguments,function(D){e=D.split(".");C=window[e[0]]=window[e[0]]||{};Ext.each(e.slice(1),function(E){C=C[E]=C[E]||{}})});return C},urlEncode:function(G,F){var D,C=[],E=encodeURIComponent;Ext.iterate(G,function(e,H){D=Ext.isEmpty(H);Ext.each(D?e:H,function(I){C.push("&",E(e),"=",(!Ext.isEmpty(I)&&(I!=e||!D))?(Ext.isDate(I)?Ext.encode(I).replace(/"/g,""):E(I)):"")})});if(!F){C.shift();F=""}return F+C.join("")},urlDecode:function(D,C){if(Ext.isEmpty(D)){return{}}var G={},F=D.split("&"),H=decodeURIComponent,e,E;Ext.each(F,function(I){I=I.split("=");e=H(I[0]);E=H(I[1]);G[e]=C||!G[e]?E:[].concat(G[e]).concat(E)});return G},urlAppend:function(e,C){if(!Ext.isEmpty(C)){return e+(e.indexOf("?")===-1?"?":"&")+C}return e},toArray:function(){return r?function(D,G,E,F){F=[];for(var C=0,e=D.length;C0){return setTimeout(d,c)}d();return 0}});Ext.applyIf(String,{format:function(b){var a=Ext.toArray(arguments,1);return b.replace(/\{(\d+)\}/g,function(c,d){return a[d]})}});Ext.applyIf(Array.prototype,{indexOf:function(b,c){var a=this.length;c=c||0;c+=(c<0)?a:0;for(;c'),g=h.child("div",true);var e=g.offsetWidth;h.setStyle("overflow",(Ext.isWebKit||Ext.isGecko)?"auto":"scroll");var d=g.offsetWidth;h.remove();b=e-d+2}return b},combine:function(){var f=arguments,e=f.length,h=[];for(var g=0;gg?1:-1};Ext.each(d,function(g){f=e(f,g)==1?f:g});return f},mean:function(d){return d.length>0?Ext.sum(d)/d.length:undefined},sum:function(d){var e=0;Ext.each(d,function(f){e+=f});return e},partition:function(d,e){var f=[[],[]];Ext.each(d,function(h,j,g){f[(e&&e(h,j,g))||(!e&&h)?0:1].push(h)});return f},invoke:function(d,e){var g=[],f=Array.prototype.slice.call(arguments,2);Ext.each(d,function(h,j){if(h&&typeof h[e]=="function"){g.push(h[e].apply(h,f))}else{g.push(undefined)}});return g},pluck:function(d,f){var e=[];Ext.each(d,function(g){e.push(g[f])});return e},zip:function(){var m=Ext.partition(arguments,function(i){return typeof i!="function"}),h=m[0],l=m[1][0],d=Ext.max(Ext.pluck(h,"length")),g=[];for(var k=0;k0){for(var p=0;p=2)||(parseInt(a[1])>=7)||(parseInt(a[2])>=1),g={},d=function(i,j){if(i&&i.firstChild){while(j){if(j===i){return true}j=j.parentNode;if(j&&(j.nodeType!=1)){j=null}}}return false},b=function(i){return !d(i.currentTarget,Ext.lib.Event.getRelatedTarget(i))};Ext.lib.Dom={getViewWidth:function(i){return i?this.getDocumentWidth():this.getViewportWidth()},getViewHeight:function(i){return i?this.getDocumentHeight():this.getViewportHeight()},getDocumentHeight:function(){var i=(document.compatMode!="CSS1Compat")?document.body.scrollHeight:document.documentElement.scrollHeight;return Math.max(i,this.getViewportHeight())},getDocumentWidth:function(){var i=(document.compatMode!="CSS1Compat")?document.body.scrollWidth:document.documentElement.scrollWidth;return Math.max(i,this.getViewportWidth())},getViewportHeight:function(){var i=self.innerHeight;var j=document.compatMode;if((j||Ext.isIE)&&!Ext.isOpera){i=(j=="CSS1Compat")?document.documentElement.clientHeight:document.body.clientHeight}return i},getViewportWidth:function(){var i=self.innerWidth;var j=document.compatMode;if(j||Ext.isIE){i=(j=="CSS1Compat")?document.documentElement.clientWidth:document.body.clientWidth}return i},isAncestor:function(j,k){var i=false;j=Ext.getDom(j);k=Ext.getDom(k);if(j&&k){if(j.contains){return j.contains(k)}else{if(j.compareDocumentPosition){return !!(j.compareDocumentPosition(k)&16)}else{while(k=k.parentNode){i=k==j||i}}}}return i},getRegion:function(i){return Ext.lib.Region.getRegion(i)},getY:function(i){return this.getXY(i)[1]},getX:function(i){return this.getXY(i)[0]},getXY:function(k){var j,o,r,s,n=(document.body||document.documentElement);k=Ext.getDom(k);if(k==n){return[0,0]}if(k.getBoundingClientRect){r=k.getBoundingClientRect();s=f(document).getScroll();return[Math.round(r.left+s.left),Math.round(r.top+s.top)]}var t=0,q=0;j=k;var i=f(k).getStyle("position")=="absolute";while(j){t+=j.offsetLeft;q+=j.offsetTop;if(!i&&f(j).getStyle("position")=="absolute"){i=true}if(Ext.isGecko){o=f(j);var u=parseInt(o.getStyle("borderTopWidth"),10)||0;var l=parseInt(o.getStyle("borderLeftWidth"),10)||0;t+=l;q+=u;if(j!=k&&o.getStyle("overflow")!="visible"){t+=l;q+=u}}j=j.offsetParent}if(Ext.isSafari&&i){t-=n.offsetLeft;q-=n.offsetTop}if(Ext.isGecko&&!i){var m=f(n);t+=parseInt(m.getStyle("borderLeftWidth"),10)||0;q+=parseInt(m.getStyle("borderTopWidth"),10)||0}j=k.parentNode;while(j&&j!=n){if(!Ext.isOpera||(j.tagName!="TR"&&f(j).getStyle("display")!="inline")){t-=j.scrollLeft;q-=j.scrollTop}j=j.parentNode}return[t,q]},setXY:function(i,j){i=Ext.fly(i,"_setXY");i.position();var k=i.translatePoints(j);if(j[0]!==false){i.dom.style.left=k.left+"px"}if(j[1]!==false){i.dom.style.top=k.top+"px"}},setX:function(j,i){this.setXY(j,[i,false])},setY:function(i,j){this.setXY(i,[false,j])}};Ext.lib.Event={getPageX:function(i){return Event.pointerX(i.browserEvent||i)},getPageY:function(i){return Event.pointerY(i.browserEvent||i)},getXY:function(i){i=i.browserEvent||i;return[Event.pointerX(i),Event.pointerY(i)]},getTarget:function(i){return Event.element(i.browserEvent||i)},resolveTextNode:Ext.isGecko?function(j){if(!j){return}var i=HTMLElement.prototype.toString.call(j);if(i=="[xpconnect wrapped native prototype]"||i=="[object XULElement]"){return}return j.nodeType==3?j.parentNode:j}:function(i){return i&&i.nodeType==3?i.parentNode:i},getRelatedTarget:function(j){j=j.browserEvent||j;var i=j.relatedTarget;if(!i){if(j.type=="mouseout"){i=j.toElement}else{if(j.type=="mouseover"){i=j.fromElement}}}return this.resolveTextNode(i)},on:function(k,i,j){if((i=="mouseenter"||i=="mouseleave")&&!h){var l=g[k.id]||(g[k.id]={});l[i]=j;j=j.createInterceptor(b);i=(i=="mouseenter")?"mouseover":"mouseout"}Event.observe(k,i,j,false)},un:function(k,i,j){if((i=="mouseenter"||i=="mouseleave")&&!h){var m=g[k.id],l=m&&m[i];if(l){j=l.fn;delete m[i];i=(i=="mouseenter")?"mouseover":"mouseout"}}Event.stopObserving(k,i,j,false)},purgeElement:function(i){},preventDefault:function(i){i=i.browserEvent||i;if(i.preventDefault){i.preventDefault()}else{i.returnValue=false}},stopPropagation:function(i){i=i.browserEvent||i;if(i.stopPropagation){i.stopPropagation()}else{i.cancelBubble=true}},stopEvent:function(i){Event.stop(i.browserEvent||i)},onAvailable:function(n,j,i){var m=new Date(),l;var k=function(){if(m.getElapsed()>10000){clearInterval(l)}var o=document.getElementById(n);if(o){clearInterval(l);j.call(i||window,o)}};l=setInterval(k,50)}};Ext.lib.Ajax=function(){var k=function(l){return l.success?function(m){l.success.call(l.scope||window,i(l,m))}:Ext.emptyFn};var j=function(l){return l.failure?function(m){l.failure.call(l.scope||window,i(l,m))}:Ext.emptyFn};var i=function(l,r){var n={},p,m,o;try{p=r.getAllResponseHeaders();Ext.each(p.replace(/\r\n/g,"\n").split("\n"),function(s){m=s.indexOf(":");if(m>=0){o=s.substr(0,m).toLowerCase();if(s.charAt(m+1)==" "){++m}n[o]=s.substr(m+1)}})}catch(q){}return{responseText:r.responseText,responseXML:r.responseXML,argument:l.argument,status:r.status,statusText:r.statusText,getResponseHeader:function(s){return n[s.toLowerCase()]},getAllResponseHeaders:function(){return p}}};return{request:function(s,p,l,q,m){var r={method:s,parameters:q||"",timeout:l.timeout,onSuccess:k(l),onFailure:j(l)};if(m){var n=m.headers;if(n){r.requestHeaders=n}if(m.xmlData){s=(s?s:(m.method?m.method:"POST"));if(!n||!n["Content-Type"]){r.contentType="text/xml"}r.postBody=m.xmlData;delete r.parameters}if(m.jsonData){s=(s?s:(m.method?m.method:"POST"));if(!n||!n["Content-Type"]){r.contentType="application/json"}r.postBody=typeof m.jsonData=="object"?Ext.encode(m.jsonData):m.jsonData;delete r.parameters}}new Ajax.Request(p,r)},formRequest:function(p,o,m,q,l,n){new Ajax.Request(o,{method:Ext.getDom(p).method||"POST",parameters:Form.serialize(p)+(q?"&"+q:""),timeout:m.timeout,onSuccess:k(m),onFailure:j(m)})},isCallInProgress:function(l){return false},abort:function(l){return false},serializeForm:function(l){return Form.serialize(l.dom||l)}}}();Ext.lib.Anim=function(){var i={easeOut:function(k){return 1-Math.pow(1-k,2)},easeIn:function(k){return 1-Math.pow(1-k,2)}};var j=function(k,l){return{stop:function(m){this.effect.cancel()},isAnimated:function(){return this.effect.state=="running"},proxyCallback:function(){Ext.callback(k,l)}}};return{scroll:function(n,l,p,q,k,m){var o=j(k,m);n=Ext.getDom(n);if(typeof l.scroll.to[0]=="number"){n.scrollLeft=l.scroll.to[0]}if(typeof l.scroll.to[1]=="number"){n.scrollTop=l.scroll.to[1]}o.proxyCallback();return o},motion:function(n,l,o,p,k,m){return this.run(n,l,o,p,k,m)},color:function(n,l,o,p,k,m){return this.run(n,l,o,p,k,m)},run:function(m,v,r,u,n,x,w){var l={};for(var q in v){switch(q){case"points":var t,z,s=Ext.fly(m,"_animrun");s.position();if(t=v.points.by){var y=s.getXY();z=s.translatePoints([y[0]+t[0],y[1]+t[1]])}else{z=s.translatePoints(v.points.to)}l.left=z.left+"px";l.top=z.top+"px";break;case"width":l.width=v.width.to+"px";break;case"height":l.height=v.height.to+"px";break;case"opacity":l.opacity=String(v.opacity.to);break;default:l[q]=String(v[q].to);break}}var p=j(n,x);p.effect=new Effect.Morph(Ext.id(m),{duration:r,afterFinish:p.proxyCallback,transition:i[u]||Effect.Transitions.linear,style:l});return p}}}();function f(i){if(!e){e=new Ext.Element.Flyweight()}e.dom=i;return e}Ext.lib.Region=function(k,m,i,j){this.top=k;this[1]=k;this.right=m;this.bottom=i;this.left=j;this[0]=j};Ext.lib.Region.prototype={contains:function(i){return(i.left>=this.left&&i.right<=this.right&&i.top>=this.top&&i.bottom<=this.bottom)},getArea:function(){return((this.bottom-this.top)*(this.right-this.left))},intersect:function(n){var k=Math.max(this.top,n.top);var m=Math.min(this.right,n.right);var i=Math.min(this.bottom,n.bottom);var j=Math.max(this.left,n.left);if(i>=k&&m>=j){return new Ext.lib.Region(k,m,i,j)}else{return null}},union:function(n){var k=Math.min(this.top,n.top);var m=Math.max(this.right,n.right);var i=Math.max(this.bottom,n.bottom);var j=Math.min(this.left,n.left);return new Ext.lib.Region(k,m,i,j)},constrainTo:function(i){this.top=this.top.constrain(i.top,i.bottom);this.bottom=this.bottom.constrain(i.top,i.bottom);this.left=this.left.constrain(i.left,i.right);this.right=this.right.constrain(i.left,i.right);return this},adjust:function(k,j,i,m){this.top+=k;this.left+=j;this.right+=m;this.bottom+=i;return this}};Ext.lib.Region.getRegion=function(m){var o=Ext.lib.Dom.getXY(m);var k=o[1];var n=o[0]+m.offsetWidth;var i=o[1]+m.offsetHeight;var j=o[0];return new Ext.lib.Region(k,n,i,j)};Ext.lib.Point=function(i,j){if(Ext.isArray(i)){j=i[1];i=i[0]}this.x=this.right=this.left=this[0]=i;this.y=this.top=this.bottom=this[1]=j};Ext.lib.Point.prototype=new Ext.lib.Region();if(Ext.isIE){function c(){var i=Function.prototype;delete i.createSequence;delete i.defer;delete i.createDelegate;delete i.createCallback;delete i.createInterceptor;window.detachEvent("onunload",c)}window.attachEvent("onunload",c)}})();
\ No newline at end of file
diff --git a/adapter/yui/ext-yui-adapter-debug.js b/adapter/yui/ext-yui-adapter-debug.js
index d764503a..918a2726 100644
--- a/adapter/yui/ext-yui-adapter-debug.js
+++ b/adapter/yui/ext-yui-adapter-debug.js
@@ -1,10 +1,9 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
-
// for old browsers
window.undefined = window.undefined;
@@ -19,7 +18,12 @@ Ext = {
* The version of the framework
* @type String
*/
- version : '3.2.0'
+ version : '3.2.1',
+ versionDetail : {
+ major: 3,
+ minor: 2,
+ patch: 1
+ }
};
/**
@@ -227,7 +231,7 @@ MyGridPanel = Ext.extend(Ext.grid.GridPanel, {
var oc = Object.prototype.constructor;
return function(sb, sp, overrides){
- if(Ext.isObject(sp)){
+ if(typeof sp == 'object'){
overrides = sp;
sp = sb;
sb = overrides.constructor != oc ? overrides.constructor : function(){sp.apply(this, arguments);};
@@ -475,7 +479,7 @@ Ext.urlDecode("foo=1&bar=2&bar=3&bar=4", false); // returns {foo: "1", bar: ["2"
if(Ext.isIterable(obj)){
Ext.each(obj, fn, scope);
return;
- }else if(Ext.isObject(obj)){
+ }else if(typeof obj == 'object'){
for(var prop in obj){
if(obj.hasOwnProperty(prop)){
if(fn.call(scope || obj, prop, obj[prop], obj) === false){
@@ -516,7 +520,7 @@ function(el){
if (el.dom){
return el.dom;
} else {
- if (Ext.isString(el)) {
+ 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
@@ -1033,7 +1037,7 @@ Ext.ns("Ext.grid", "Ext.list", "Ext.dd", "Ext.tree", "Ext.form", "Ext.menu",
*/
Ext.apply(Ext, function(){
- var E = Ext,
+ var E = Ext,
idSeed = 0,
scrollWidth = null;
@@ -1046,13 +1050,13 @@ Ext.apply(Ext, function(){
emptyFn : function(){},
/**
- * URL to a 1x1 transparent gif image used by Ext to create inline icons with CSS background images.
+ * URL to a 1x1 transparent gif image used by Ext to create inline icons with CSS background images.
* In older versions of IE, this defaults to "http://extjs.com/s.gif" and you should change this to a URL on your server.
* For other browsers it uses an inline data URL.
* @type String
*/
BLANK_IMAGE_URL : Ext.isIE6 || Ext.isIE7 || Ext.isAir ?
- 'http:/' + '/extjs.com/s.gif' :
+ 'http:/' + '/www.extjs.com/s.gif' :
'data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==',
extendX : function(supr, fn){
@@ -1074,7 +1078,7 @@ Ext.apply(Ext, function(){
* @return {Number} Value, if numeric, else defaultValue
*/
num : function(v, defaultValue){
- v = Number(Ext.isEmpty(v) || Ext.isArray(v) || Ext.isBoolean(v) || (Ext.isString(v) && v.trim().length == 0) ? NaN : v);
+ 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;
},
@@ -1117,13 +1121,13 @@ Ext.addBehaviors({
'#foo a@click' : function(e, t){
// do something
},
-
+
// add the same listener to multiple selectors (separated by comma BEFORE the @)
'#foo a, #bar span.some-class@mouseover' : function(){
// do something
}
});
- *
+ *
* @param {Object} obj The list of behaviors to apply
*/
addBehaviors : function(o){
@@ -1148,7 +1152,7 @@ Ext.addBehaviors({
cache = null;
}
},
-
+
/**
* Utility method for getting the width of the browser scrollbar. This can differ depending on
* operating system settings, such as the theme or font size.
@@ -1159,7 +1163,7 @@ Ext.addBehaviors({
if(!Ext.isReady){
return 0;
}
-
+
if(force === true || scrollWidth === null){
// Append our div, do our calculation and then remove it
var div = Ext.getBody().createChild(' '),
@@ -1201,7 +1205,7 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
this.initialBox = Ext.copyTo({}, this.initialConfig, 'x,y,width,height');
}
});
- *
+ *
* @param {Object} dest The destination object.
* @param {Object} source The source object.
* @param {Array/String} names Either an Array of property names, or a comma-delimited list
@@ -1209,7 +1213,7 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
* @return {Object} The modified object.
*/
copyTo : function(dest, source, names){
- if(Ext.isString(names)){
+ if(typeof names == 'string'){
names = names.split(/[,;\s]/);
}
Ext.each(names, function(name){
@@ -1235,11 +1239,11 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
if(arg){
if(Ext.isArray(arg)){
this.destroy.apply(this, arg);
- }else if(Ext.isFunction(arg.destroy)){
+ }else if(typeof arg.destroy == 'function'){
arg.destroy();
}else if(arg.dom){
arg.remove();
- }
+ }
}
}, this);
},
@@ -1366,8 +1370,8 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
/**
* Partitions the set into two sets: a true set and a false set.
- * Example:
- * Example2:
+ * Example:
+ * Example2:
*
// Example 1:
Ext.partition([true, false, true, true, false]); // [[true, true, true], [false, false]]
@@ -1411,7 +1415,7 @@ Ext.invoke(Ext.query("p"), "getAttribute", "id");
var ret = [],
args = Array.prototype.slice.call(arguments, 2);
Ext.each(arr, function(v,i) {
- if (v && Ext.isFunction(v[methodName])) {
+ if (v && typeof v[methodName] == 'function') {
ret.push(v[methodName].apply(v, args));
} else {
ret.push(undefined);
@@ -1458,7 +1462,7 @@ Ext.zip(
* @return {Array} The zipped set.
*/
zip : function(){
- var parts = Ext.partition(arguments, function( val ){ return !Ext.isFunction(val); }),
+ 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")),
@@ -1535,7 +1539,7 @@ Ext.zip(
case RegExp: return 'regexp';
case Date: return 'date';
}
- if(Ext.isNumber(o.length) && Ext.isFunction(o.item)) {
+ if(typeof o.length == 'number' && typeof o.item == 'function') {
return 'nodelist';
}
}
@@ -1548,7 +1552,7 @@ Ext.zip(
// internal
callback : function(cb, scope, args, delay){
- if(Ext.isFunction(cb)){
+ if(typeof cb == 'function'){
if(delay){
cb.defer(delay, scope, args || []);
}else{
@@ -1588,7 +1592,7 @@ sayGoodbye('Fred'); // both alerts show
*/
createSequence : function(fcn, scope){
var method = this;
- return !Ext.isFunction(fcn) ?
+ return (typeof fcn != 'function') ?
this :
function(){
var retval = method.apply(this || window, arguments);
diff --git a/adapter/yui/ext-yui-adapter.js b/adapter/yui/ext-yui-adapter.js
index 144212cb..84852fc0 100644
--- a/adapter/yui/ext-yui-adapter.js
+++ b/adapter/yui/ext-yui-adapter.js
@@ -1,7 +1,7 @@
/*
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
-window.undefined=window.undefined;Ext={version:"3.2.0"};Ext.apply=function(d,e,b){if(b){Ext.apply(d,b)}if(d&&e&&typeof e=="object"){for(var a in e){d[a]=e[a]}}return d};(function(){var g=0,s=Object.prototype.toString,t=navigator.userAgent.toLowerCase(),y=function(e){return e.test(t)},i=document,l=i.compatMode=="CSS1Compat",A=y(/opera/),h=y(/\bchrome\b/),u=y(/webkit/),x=!h&&y(/safari/),f=x&&y(/applewebkit\/4/),b=x&&y(/version\/3/),B=x&&y(/version\/4/),r=!A&&y(/msie/),p=r&&y(/msie 7/),o=r&&y(/msie 8/),q=r&&!p&&!o,n=!u&&y(/gecko/),d=n&&y(/rv:1\.8/),a=n&&y(/rv:1\.9/),v=r&&!l,z=y(/windows|win32/),k=y(/macintosh|mac os x/),j=y(/adobeair/),m=y(/linux/),c=/^https/i.test(window.location.protocol);if(q){try{i.execCommand("BackgroundImageCache",false,true)}catch(w){}}Ext.apply(Ext,{SSL_SECURE_URL:c&&r?'javascript:""':"about:blank",isStrict:l,isSecure:c,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,enableNestedListenerRemoval:false,USE_NATIVE_JSON:false,applyIf:function(C,D){if(C){for(var e in D){if(!Ext.isDefined(C[e])){C[e]=D[e]}}}return C},id:function(e,C){e=Ext.getDom(e,true)||{};if(!e.id){e.id=(C||"ext-gen")+(++g)}return e.id},extend:function(){var C=function(E){for(var D in E){this[D]=E[D]}};var e=Object.prototype.constructor;return function(J,G,I){if(Ext.isObject(G)){I=G;G=J;J=I.constructor!=e?I.constructor:function(){G.apply(this,arguments)}}var E=function(){},H,D=G.prototype;E.prototype=D;H=J.prototype=new E();H.constructor=J;J.superclass=D;if(D.constructor==e){D.constructor=G}J.override=function(F){Ext.override(J,F)};H.superclass=H.supr=(function(){return D});H.override=C;Ext.override(J,I);J.extend=function(F){return Ext.extend(J,F)};return J}}(),override:function(e,D){if(D){var C=e.prototype;Ext.apply(C,D);if(Ext.isIE&&D.hasOwnProperty("toString")){C.toString=D.toString}}},namespace:function(){var C,e;Ext.each(arguments,function(D){e=D.split(".");C=window[e[0]]=window[e[0]]||{};Ext.each(e.slice(1),function(E){C=C[E]=C[E]||{}})});return C},urlEncode:function(G,F){var D,C=[],E=encodeURIComponent;Ext.iterate(G,function(e,H){D=Ext.isEmpty(H);Ext.each(D?e:H,function(I){C.push("&",E(e),"=",(!Ext.isEmpty(I)&&(I!=e||!D))?(Ext.isDate(I)?Ext.encode(I).replace(/"/g,""):E(I)):"")})});if(!F){C.shift();F=""}return F+C.join("")},urlDecode:function(D,C){if(Ext.isEmpty(D)){return{}}var G={},F=D.split("&"),H=decodeURIComponent,e,E;Ext.each(F,function(I){I=I.split("=");e=H(I[0]);E=H(I[1]);G[e]=C||!G[e]?E:[].concat(G[e]).concat(E)});return G},urlAppend:function(e,C){if(!Ext.isEmpty(C)){return e+(e.indexOf("?")===-1?"?":"&")+C}return e},toArray:function(){return r?function(D,G,E,F){F=[];for(var C=0,e=D.length;C0){return setTimeout(d,c)}d();return 0}});Ext.applyIf(String,{format:function(b){var a=Ext.toArray(arguments,1);return b.replace(/\{(\d+)\}/g,function(c,d){return a[d]})}});Ext.applyIf(Array.prototype,{indexOf:function(b,c){var a=this.length;c=c||0;c+=(c<0)?a:0;for(;c'),g=h.child("div",true);var e=g.offsetWidth;h.setStyle("overflow",(Ext.isWebKit||Ext.isGecko)?"auto":"scroll");var d=g.offsetWidth;h.remove();b=e-d+2}return b},combine:function(){var f=arguments,e=f.length,h=[];for(var g=0;gg?1:-1};Ext.each(d,function(g){f=e(f,g)==1?f:g});return f},mean:function(d){return d.length>0?Ext.sum(d)/d.length:undefined},sum:function(d){var e=0;Ext.each(d,function(f){e+=f});return e},partition:function(d,e){var f=[[],[]];Ext.each(d,function(h,j,g){f[(e&&e(h,j,g))||(!e&&h)?0:1].push(h)});return f},invoke:function(d,e){var g=[],f=Array.prototype.slice.call(arguments,2);Ext.each(d,function(h,j){if(h&&Ext.isFunction(h[e])){g.push(h[e].apply(h,f))}else{g.push(undefined)}});return g},pluck:function(d,f){var e=[];Ext.each(d,function(g){e.push(g[f])});return e},zip:function(){var m=Ext.partition(arguments,function(i){return !Ext.isFunction(i)}),h=m[0],l=m[1][0],d=Ext.max(Ext.pluck(h,"length")),g=[];for(var k=0;k0){for(var p=0;p=3,l={},e=function(n,o){if(n&&n.firstChild){while(o){if(o===n){return true}o=o.parentNode;if(o&&(o.nodeType!=1)){o=null}}}return false},i=function(n){return !e(n.currentTarget,Ext.lib.Event.getRelatedTarget(n))};Ext.lib.Dom={getViewWidth:function(n){return n?b.getDocumentWidth():b.getViewportWidth()},getViewHeight:function(n){return n?b.getDocumentHeight():b.getViewportHeight()},isAncestor:function(n,o){return b.isAncestor(n,o)},getRegion:function(n){return b.getRegion(n)},getY:function(n){return this.getXY(n)[1]},getX:function(n){return this.getXY(n)[0]},getXY:function(q){var o,u,w,z,t=(document.body||document.documentElement);q=Ext.getDom(q);if(q==t){return[0,0]}if(q.getBoundingClientRect){w=q.getBoundingClientRect();z=g(document).getScroll();return[Math.round(w.left+z.left),Math.round(w.top+z.top)]}var A=0,v=0;o=q;var n=g(q).getStyle("position")=="absolute";while(o){A+=o.offsetLeft;v+=o.offsetTop;if(!n&&g(o).getStyle("position")=="absolute"){n=true}if(Ext.isGecko){u=g(o);var B=parseInt(u.getStyle("borderTopWidth"),10)||0;var r=parseInt(u.getStyle("borderLeftWidth"),10)||0;A+=r;v+=B;if(o!=q&&u.getStyle("overflow")!="visible"){A+=r;v+=B}}o=o.offsetParent}if(Ext.isSafari&&n){A-=t.offsetLeft;v-=t.offsetTop}if(Ext.isGecko&&!n){var s=g(t);A+=parseInt(s.getStyle("borderLeftWidth"),10)||0;v+=parseInt(s.getStyle("borderTopWidth"),10)||0}o=q.parentNode;while(o&&o!=t){if(!Ext.isOpera||(o.tagName!="TR"&&g(o).getStyle("display")!="inline")){A-=o.scrollLeft;v-=o.scrollTop}o=o.parentNode}return[A,v]},setXY:function(n,o){n=Ext.fly(n,"_setXY");n.position();var p=n.translatePoints(o);if(o[0]!==false){n.dom.style.left=p.left+"px"}if(o[1]!==false){n.dom.style.top=p.top+"px"}},setX:function(o,n){this.setXY(o,[n,false])},setY:function(n,o){this.setXY(n,[false,o])}};Ext.lib.Event={getPageX:function(n){return m.getPageX(n.browserEvent||n)},getPageY:function(n){return m.getPageY(n.browserEvent||n)},getXY:function(n){return m.getXY(n.browserEvent||n)},getTarget:function(n){return m.getTarget(n.browserEvent||n)},getRelatedTarget:function(n){return m.getRelatedTarget(n.browserEvent||n)},on:function(r,n,q,p,o){if((n=="mouseenter"||n=="mouseleave")&&!a){var s=l[r.id]||(l[r.id]={});s[n]=q;q=q.createInterceptor(i);n=(n=="mouseenter")?"mouseover":"mouseout"}m.on(r,n,q,p,o)},un:function(p,n,o){if((n=="mouseenter"||n=="mouseleave")&&!a){var r=l[p.id],q=r&&r[n];if(q){o=q.fn;delete r[n];n=(n=="mouseenter")?"mouseover":"mouseout"}}m.removeListener(p,n,o)},purgeElement:function(n){m.purgeElement(n)},preventDefault:function(n){m.preventDefault(n.browserEvent||n)},stopPropagation:function(n){m.stopPropagation(n.browserEvent||n)},stopEvent:function(n){m.stopEvent(n.browserEvent||n)},onAvailable:function(q,p,o,n){return m.onAvailable(q,p,o,n)}};Ext.lib.Ajax={request:function(t,r,n,s,o){if(o){var p=o.headers;if(p){for(var q in p){if(p.hasOwnProperty(q)){f.initHeader(q,p[q],false)}}}if(o.xmlData){if(!p||!p["Content-Type"]){f.initHeader("Content-Type","text/xml",false)}t=(t?t:(o.method?o.method:"POST"));s=o.xmlData}else{if(o.jsonData){if(!p||!p["Content-Type"]){f.initHeader("Content-Type","application/json",false)}t=(t?t:(o.method?o.method:"POST"));s=typeof o.jsonData=="object"?Ext.encode(o.jsonData):o.jsonData}}}return f.asyncRequest(t,r,n,s)},formRequest:function(r,q,o,s,n,p){f.setForm(r,n,p);return f.asyncRequest(Ext.getDom(r).method||"POST",q,o,s)},isCallInProgress:function(n){return f.isCallInProgress(n)},abort:function(n){return f.abort(n)},serializeForm:function(n){var o=f.setForm(n.dom||n);f.resetFormState();return o}};Ext.lib.Region=YAHOO.util.Region;Ext.lib.Point=YAHOO.util.Point;Ext.lib.Anim={scroll:function(q,o,r,s,n,p){this.run(q,o,r,s,n,p,YAHOO.util.Scroll)},motion:function(q,o,r,s,n,p){this.run(q,o,r,s,n,p,YAHOO.util.Motion)},color:function(q,o,r,s,n,p){this.run(q,o,r,s,n,p,YAHOO.util.ColorAnim)},run:function(r,o,t,u,n,q,p){p=p||YAHOO.util.Anim;if(typeof u=="string"){u=YAHOO.util.Easing[u]}var s=new p(r,o,t,u);s.animateX(function(){Ext.callback(n,q)});return s}};function g(n){if(!j){j=new Ext.Element.Flyweight()}j.dom=n;return j}if(Ext.isIE){function d(){var n=Function.prototype;delete n.createSequence;delete n.defer;delete n.createDelegate;delete n.createCallback;delete n.createInterceptor;window.detachEvent("onunload",d)}window.attachEvent("onunload",d)}if(YAHOO.util.Anim){YAHOO.util.Anim.prototype.animateX=function(p,n){var o=function(){this.onComplete.unsubscribe(o);if(typeof p=="function"){p.call(n||this,this)}};this.onComplete.subscribe(o,this,true);this.animate()}}if(YAHOO.util.DragDrop&&Ext.dd.DragDrop){YAHOO.util.DragDrop.defaultPadding=Ext.dd.DragDrop.defaultPadding;YAHOO.util.DragDrop.constrainTo=Ext.dd.DragDrop.constrainTo}YAHOO.util.Dom.getXY=function(n){var o=function(p){return Ext.lib.Dom.getXY(p)};return YAHOO.util.Dom.batch(n,o,YAHOO.util.Dom,true)};if(YAHOO.util.AnimMgr){YAHOO.util.AnimMgr.fps=1000}YAHOO.util.Region.prototype.adjust=function(p,o,n,q){this.top+=p;this.left+=o;this.right+=q;this.bottom+=n;return this};YAHOO.util.Region.prototype.constrainTo=function(n){this.top=this.top.constrain(n.top,n.bottom);this.bottom=this.bottom.constrain(n.top,n.bottom);this.left=this.left.constrain(n.left,n.right);this.right=this.right.constrain(n.left,n.right);return this}})();
\ No newline at end of file
+window.undefined=window.undefined;Ext={version:"3.2.1",versionDetail:{major:3,minor:2,patch:1}};Ext.apply=function(d,e,b){if(b){Ext.apply(d,b)}if(d&&e&&typeof e=="object"){for(var a in e){d[a]=e[a]}}return d};(function(){var g=0,s=Object.prototype.toString,t=navigator.userAgent.toLowerCase(),y=function(e){return e.test(t)},i=document,l=i.compatMode=="CSS1Compat",A=y(/opera/),h=y(/\bchrome\b/),u=y(/webkit/),x=!h&&y(/safari/),f=x&&y(/applewebkit\/4/),b=x&&y(/version\/3/),B=x&&y(/version\/4/),r=!A&&y(/msie/),p=r&&y(/msie 7/),o=r&&y(/msie 8/),q=r&&!p&&!o,n=!u&&y(/gecko/),d=n&&y(/rv:1\.8/),a=n&&y(/rv:1\.9/),v=r&&!l,z=y(/windows|win32/),k=y(/macintosh|mac os x/),j=y(/adobeair/),m=y(/linux/),c=/^https/i.test(window.location.protocol);if(q){try{i.execCommand("BackgroundImageCache",false,true)}catch(w){}}Ext.apply(Ext,{SSL_SECURE_URL:c&&r?'javascript:""':"about:blank",isStrict:l,isSecure:c,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,enableNestedListenerRemoval:false,USE_NATIVE_JSON:false,applyIf:function(C,D){if(C){for(var e in D){if(!Ext.isDefined(C[e])){C[e]=D[e]}}}return C},id:function(e,C){e=Ext.getDom(e,true)||{};if(!e.id){e.id=(C||"ext-gen")+(++g)}return e.id},extend:function(){var C=function(E){for(var D in E){this[D]=E[D]}};var e=Object.prototype.constructor;return function(J,G,I){if(typeof G=="object"){I=G;G=J;J=I.constructor!=e?I.constructor:function(){G.apply(this,arguments)}}var E=function(){},H,D=G.prototype;E.prototype=D;H=J.prototype=new E();H.constructor=J;J.superclass=D;if(D.constructor==e){D.constructor=G}J.override=function(F){Ext.override(J,F)};H.superclass=H.supr=(function(){return D});H.override=C;Ext.override(J,I);J.extend=function(F){return Ext.extend(J,F)};return J}}(),override:function(e,D){if(D){var C=e.prototype;Ext.apply(C,D);if(Ext.isIE&&D.hasOwnProperty("toString")){C.toString=D.toString}}},namespace:function(){var C,e;Ext.each(arguments,function(D){e=D.split(".");C=window[e[0]]=window[e[0]]||{};Ext.each(e.slice(1),function(E){C=C[E]=C[E]||{}})});return C},urlEncode:function(G,F){var D,C=[],E=encodeURIComponent;Ext.iterate(G,function(e,H){D=Ext.isEmpty(H);Ext.each(D?e:H,function(I){C.push("&",E(e),"=",(!Ext.isEmpty(I)&&(I!=e||!D))?(Ext.isDate(I)?Ext.encode(I).replace(/"/g,""):E(I)):"")})});if(!F){C.shift();F=""}return F+C.join("")},urlDecode:function(D,C){if(Ext.isEmpty(D)){return{}}var G={},F=D.split("&"),H=decodeURIComponent,e,E;Ext.each(F,function(I){I=I.split("=");e=H(I[0]);E=H(I[1]);G[e]=C||!G[e]?E:[].concat(G[e]).concat(E)});return G},urlAppend:function(e,C){if(!Ext.isEmpty(C)){return e+(e.indexOf("?")===-1?"?":"&")+C}return e},toArray:function(){return r?function(D,G,E,F){F=[];for(var C=0,e=D.length;C0){return setTimeout(d,c)}d();return 0}});Ext.applyIf(String,{format:function(b){var a=Ext.toArray(arguments,1);return b.replace(/\{(\d+)\}/g,function(c,d){return a[d]})}});Ext.applyIf(Array.prototype,{indexOf:function(b,c){var a=this.length;c=c||0;c+=(c<0)?a:0;for(;c'),g=h.child("div",true);var e=g.offsetWidth;h.setStyle("overflow",(Ext.isWebKit||Ext.isGecko)?"auto":"scroll");var d=g.offsetWidth;h.remove();b=e-d+2}return b},combine:function(){var f=arguments,e=f.length,h=[];for(var g=0;gg?1:-1};Ext.each(d,function(g){f=e(f,g)==1?f:g});return f},mean:function(d){return d.length>0?Ext.sum(d)/d.length:undefined},sum:function(d){var e=0;Ext.each(d,function(f){e+=f});return e},partition:function(d,e){var f=[[],[]];Ext.each(d,function(h,j,g){f[(e&&e(h,j,g))||(!e&&h)?0:1].push(h)});return f},invoke:function(d,e){var g=[],f=Array.prototype.slice.call(arguments,2);Ext.each(d,function(h,j){if(h&&typeof h[e]=="function"){g.push(h[e].apply(h,f))}else{g.push(undefined)}});return g},pluck:function(d,f){var e=[];Ext.each(d,function(g){e.push(g[f])});return e},zip:function(){var m=Ext.partition(arguments,function(i){return typeof i!="function"}),h=m[0],l=m[1][0],d=Ext.max(Ext.pluck(h,"length")),g=[];for(var k=0;k0){for(var p=0;p=3,l={},e=function(n,o){if(n&&n.firstChild){while(o){if(o===n){return true}o=o.parentNode;if(o&&(o.nodeType!=1)){o=null}}}return false},i=function(n){return !e(n.currentTarget,Ext.lib.Event.getRelatedTarget(n))};Ext.lib.Dom={getViewWidth:function(n){return n?b.getDocumentWidth():b.getViewportWidth()},getViewHeight:function(n){return n?b.getDocumentHeight():b.getViewportHeight()},isAncestor:function(n,o){return b.isAncestor(n,o)},getRegion:function(n){return b.getRegion(n)},getY:function(n){return this.getXY(n)[1]},getX:function(n){return this.getXY(n)[0]},getXY:function(q){var o,u,w,z,t=(document.body||document.documentElement);q=Ext.getDom(q);if(q==t){return[0,0]}if(q.getBoundingClientRect){w=q.getBoundingClientRect();z=g(document).getScroll();return[Math.round(w.left+z.left),Math.round(w.top+z.top)]}var A=0,v=0;o=q;var n=g(q).getStyle("position")=="absolute";while(o){A+=o.offsetLeft;v+=o.offsetTop;if(!n&&g(o).getStyle("position")=="absolute"){n=true}if(Ext.isGecko){u=g(o);var B=parseInt(u.getStyle("borderTopWidth"),10)||0;var r=parseInt(u.getStyle("borderLeftWidth"),10)||0;A+=r;v+=B;if(o!=q&&u.getStyle("overflow")!="visible"){A+=r;v+=B}}o=o.offsetParent}if(Ext.isSafari&&n){A-=t.offsetLeft;v-=t.offsetTop}if(Ext.isGecko&&!n){var s=g(t);A+=parseInt(s.getStyle("borderLeftWidth"),10)||0;v+=parseInt(s.getStyle("borderTopWidth"),10)||0}o=q.parentNode;while(o&&o!=t){if(!Ext.isOpera||(o.tagName!="TR"&&g(o).getStyle("display")!="inline")){A-=o.scrollLeft;v-=o.scrollTop}o=o.parentNode}return[A,v]},setXY:function(n,o){n=Ext.fly(n,"_setXY");n.position();var p=n.translatePoints(o);if(o[0]!==false){n.dom.style.left=p.left+"px"}if(o[1]!==false){n.dom.style.top=p.top+"px"}},setX:function(o,n){this.setXY(o,[n,false])},setY:function(n,o){this.setXY(n,[false,o])}};Ext.lib.Event={getPageX:function(n){return m.getPageX(n.browserEvent||n)},getPageY:function(n){return m.getPageY(n.browserEvent||n)},getXY:function(n){return m.getXY(n.browserEvent||n)},getTarget:function(n){return m.getTarget(n.browserEvent||n)},getRelatedTarget:function(n){return m.getRelatedTarget(n.browserEvent||n)},on:function(r,n,q,p,o){if((n=="mouseenter"||n=="mouseleave")&&!a){var s=l[r.id]||(l[r.id]={});s[n]=q;q=q.createInterceptor(i);n=(n=="mouseenter")?"mouseover":"mouseout"}m.on(r,n,q,p,o)},un:function(p,n,o){if((n=="mouseenter"||n=="mouseleave")&&!a){var r=l[p.id],q=r&&r[n];if(q){o=q.fn;delete r[n];n=(n=="mouseenter")?"mouseover":"mouseout"}}m.removeListener(p,n,o)},purgeElement:function(n){m.purgeElement(n)},preventDefault:function(n){m.preventDefault(n.browserEvent||n)},stopPropagation:function(n){m.stopPropagation(n.browserEvent||n)},stopEvent:function(n){m.stopEvent(n.browserEvent||n)},onAvailable:function(q,p,o,n){return m.onAvailable(q,p,o,n)}};Ext.lib.Ajax={request:function(t,r,n,s,o){if(o){var p=o.headers;if(p){for(var q in p){if(p.hasOwnProperty(q)){f.initHeader(q,p[q],false)}}}if(o.xmlData){if(!p||!p["Content-Type"]){f.initHeader("Content-Type","text/xml",false)}t=(t?t:(o.method?o.method:"POST"));s=o.xmlData}else{if(o.jsonData){if(!p||!p["Content-Type"]){f.initHeader("Content-Type","application/json",false)}t=(t?t:(o.method?o.method:"POST"));s=typeof o.jsonData=="object"?Ext.encode(o.jsonData):o.jsonData}}}return f.asyncRequest(t,r,n,s)},formRequest:function(r,q,o,s,n,p){f.setForm(r,n,p);return f.asyncRequest(Ext.getDom(r).method||"POST",q,o,s)},isCallInProgress:function(n){return f.isCallInProgress(n)},abort:function(n){return f.abort(n)},serializeForm:function(n){var o=f.setForm(n.dom||n);f.resetFormState();return o}};Ext.lib.Region=YAHOO.util.Region;Ext.lib.Point=YAHOO.util.Point;Ext.lib.Anim={scroll:function(q,o,r,s,n,p){this.run(q,o,r,s,n,p,YAHOO.util.Scroll)},motion:function(q,o,r,s,n,p){this.run(q,o,r,s,n,p,YAHOO.util.Motion)},color:function(q,o,r,s,n,p){this.run(q,o,r,s,n,p,YAHOO.util.ColorAnim)},run:function(r,o,t,u,n,q,p){p=p||YAHOO.util.Anim;if(typeof u=="string"){u=YAHOO.util.Easing[u]}var s=new p(r,o,t,u);s.animateX(function(){Ext.callback(n,q)});return s}};function g(n){if(!j){j=new Ext.Element.Flyweight()}j.dom=n;return j}if(Ext.isIE){function d(){var n=Function.prototype;delete n.createSequence;delete n.defer;delete n.createDelegate;delete n.createCallback;delete n.createInterceptor;window.detachEvent("onunload",d)}window.attachEvent("onunload",d)}if(YAHOO.util.Anim){YAHOO.util.Anim.prototype.animateX=function(p,n){var o=function(){this.onComplete.unsubscribe(o);if(typeof p=="function"){p.call(n||this,this)}};this.onComplete.subscribe(o,this,true);this.animate()}}if(YAHOO.util.DragDrop&&Ext.dd.DragDrop){YAHOO.util.DragDrop.defaultPadding=Ext.dd.DragDrop.defaultPadding;YAHOO.util.DragDrop.constrainTo=Ext.dd.DragDrop.constrainTo}YAHOO.util.Dom.getXY=function(n){var o=function(p){return Ext.lib.Dom.getXY(p)};return YAHOO.util.Dom.batch(n,o,YAHOO.util.Dom,true)};if(YAHOO.util.AnimMgr){YAHOO.util.AnimMgr.fps=1000}YAHOO.util.Region.prototype.adjust=function(p,o,n,q){this.top+=p;this.left+=o;this.right+=q;this.bottom+=n;return this};YAHOO.util.Region.prototype.constrainTo=function(n){this.top=this.top.constrain(n.top,n.bottom);this.bottom=this.bottom.constrain(n.top,n.bottom);this.left=this.left.constrain(n.left,n.right);this.right=this.right.constrain(n.left,n.right);return this}})();
\ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
index 978ddeee..c752f16e 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -1,7 +1,7 @@
- ExtJS 3.2.0 API Documentation
+ ExtJS 3.2.1 API Documentation
@@ -26,7 +26,7 @@
diff --git a/docs/output/Ext.Button.html b/docs/output/Ext.Button.html
index 8db98132..43bbf10c 100644
--- a/docs/output/Ext.Button.html
+++ b/docs/output/Ext.Button.html
@@ -62,37 +62,11 @@ result in elements needing to be synchronized with the new height. Example:<
necessary, false...true
to use overflow:'auto' on the components layout element and show scroll bars automatically when
necessary, false
to clip any overflowing content (defaults to false
).BoxComponent autoShow : BooleanTrue if the component should check for hidden classes (e.g. 'x-hidden' or 'x-hide-display') and remove
them on render...True if the component should check for hidden classes (e.g. 'x-hidden' or 'x-hide-display') and remove
-them on render (defaults to false). Component autoWidth : BooleanTrue to use width:'auto', false to use fixed width (or allow it to be managed by its parent
-Container's layout manage...True to use width:'auto', false to use fixed width (or allow it to be managed by its parent
-Container's layout manager. Defaults to false.
-Note: Although many components inherit this config option, not all will
-function as expected with a width of 'auto'. Setting autoWidth:true means that the
-browser will manage width based on the element's contents, and that Ext will not manage it at all.
-If the browser is managing the width, be aware that resizes performed by the browser in response
-to changes within the structure of the Component cannot be detected. Therefore changes to the width might
-result in elements needing to be synchronized with the new width. For example, where the target element is:
<div id='grid-container' style='margin-left:25%;width:50%'></div>
-A Panel rendered into that target element must listen for browser window resize in order to relay its
-child items when the browser changes its width:var myPanel = new Ext.Panel({
- renderTo: 'grid-container',
- monitorResize: true, // relay on browser resize
- title: 'Panel',
- height: 400,
- autoWidth: true,
- layout: 'hbox',
- layoutConfig: {
- align: 'stretch'
- },
- defaults: {
- flex: 1
- },
- items: [{
- title: 'Box 1',
- }, {
- title: 'Box 2'
- }, {
- title: 'Box 3'
- }],
-});
BoxComponent boxMaxHeight : NumberThe maximum value in pixels which this BoxComponent will set its height to.
+them on render (defaults to false). Component autoWidth : BooleanBy default, if a width is not specified the button will attempt to stretch horizontally to fit its content.
+If the bu...By default, if a width is not specified the button will attempt to stretch horizontally to fit its content.
+If the button is being managed by a width sizing layout (hbox, fit, anchor), set this to false to prevent
+the button from doing this automatic sizing.
+Defaults to undefined. Button boxMaxHeight : NumberThe maximum value in pixels which this BoxComponent will set its height to.
Warning: This will override any size mana...The maximum value in pixels which this BoxComponent will set its height to.
Warning: This will override any size management applied by layout managers.
BoxComponent boxMaxWidth : NumberThe maximum value in pixels which this BoxComponent will set its width to.
Warning: This will override any size manag...The maximum value in pixels which this BoxComponent will set its width to.
diff --git a/docs/output/Ext.ButtonGroup.html b/docs/output/Ext.ButtonGroup.html
index 78f1d103..77c83fa5 100644
--- a/docs/output/Ext.ButtonGroup.html
+++ b/docs/output/Ext.ButtonGroup.html
@@ -941,9 +941,7 @@ Note: see the Note for el al...The Panel's header Note: see the Note for el
also.
Panel hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component Public Methods
Method Defined By ButtonGroup( Object config
)
Create a new ButtonGroup.Create a new ButtonGroup.Parameters:config
: ObjectThe config object
Returns:- void
ButtonGroup add( ...Object/Array component
)
diff --git a/docs/output/Ext.ColorPalette.html b/docs/output/Ext.ColorPalette.html
index f2571794..eb49fdc4 100644
--- a/docs/output/Ext.ColorPalette.html
+++ b/docs/output/Ext.ColorPalette.html
@@ -674,9 +674,9 @@ which this component will be inserted (defaults to appending to the end of the c
If events were suspended using the queueSuspended parameter, then all
event...Resume firing events. (see suspendEvents)
If events were suspended using the queueSuspended parameter, then all
-events fired during event suspension will be sent to any listeners now.Parameters:- None.
Returns:- void
Observable select( String color
)
+events fired during event suspension will be sent to any listeners now.Parameters:- None.
Returns:- void
Observable select( String color
, [Boolean suppressEvent
] )
:
- voidSelects the specified color in the palette (fires the select event)Selects the specified color in the palette (fires the select event)Parameters:color
: StringA valid 6-digit color hex code (# will be stripped if included)
Returns:- void
ColorPalette setDisabled( Boolean disabled
)
+ voidSelects the specified color in the palette (fires the select event)Selects the specified color in the palette (fires the select event)Parameters:color
: StringA valid 6-digit color hex code (# will be stripped if included)suppressEvent
: Boolean(optional) True to stop the select event from firing. Defaults to false.
Returns:- void
ColorPalette setDisabled( Boolean disabled
)
:
Ext.ComponentConvenience function for setting disabled/enabled by boolean.Convenience function for setting disabled/enabled by boolean.Parameters:disabled
: Boolean
Returns:Ext.Component
this
Component setVisible( Boolean visible
)
:
diff --git a/docs/output/Ext.Container.html b/docs/output/Ext.Container.html
index 7ce64357..6fcdfd18 100644
--- a/docs/output/Ext.Container.html
+++ b/docs/output/Ext.Container.html
@@ -873,9 +873,7 @@ config for a suggestion, or use a render listener directly:new
See also getEl
Component hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By add( ...Object/Array component
)
:
diff --git a/docs/output/Ext.CycleButton.html b/docs/output/Ext.CycleButton.html
index 9443f925..0fdc8e1a 100644
--- a/docs/output/Ext.CycleButton.html
+++ b/docs/output/Ext.CycleButton.html
@@ -80,37 +80,11 @@ result in elements needing to be synchronized with the new height. Example:<
necessary, false...true
to use overflow:'auto' on the components layout element and show scroll bars automatically when
necessary, false
to clip any overflowing content (defaults to false
). BoxComponent autoShow : BooleanTrue if the component should check for hidden classes (e.g. 'x-hidden' or 'x-hide-display') and remove
them on render...True if the component should check for hidden classes (e.g. 'x-hidden' or 'x-hide-display') and remove
-them on render (defaults to false). Component autoWidth : BooleanTrue to use width:'auto', false to use fixed width (or allow it to be managed by its parent
-Container's layout manage...True to use width:'auto', false to use fixed width (or allow it to be managed by its parent
-Container's layout manager. Defaults to false.
-Note: Although many components inherit this config option, not all will
-function as expected with a width of 'auto'. Setting autoWidth:true means that the
-browser will manage width based on the element's contents, and that Ext will not manage it at all.
-If the browser is managing the width, be aware that resizes performed by the browser in response
-to changes within the structure of the Component cannot be detected. Therefore changes to the width might
-result in elements needing to be synchronized with the new width. For example, where the target element is:
<div id='grid-container' style='margin-left:25%;width:50%'></div>
-A Panel rendered into that target element must listen for browser window resize in order to relay its
-child items when the browser changes its width:var myPanel = new Ext.Panel({
- renderTo: 'grid-container',
- monitorResize: true, // relay on browser resize
- title: 'Panel',
- height: 400,
- autoWidth: true,
- layout: 'hbox',
- layoutConfig: {
- align: 'stretch'
- },
- defaults: {
- flex: 1
- },
- items: [{
- title: 'Box 1',
- }, {
- title: 'Box 2'
- }, {
- title: 'Box 3'
- }],
-});
BoxComponent boxMaxHeight : NumberThe maximum value in pixels which this BoxComponent will set its height to.
+them on render (defaults to false). Component autoWidth : BooleanBy default, if a width is not specified the button will attempt to stretch horizontally to fit its content.
+If the bu...By default, if a width is not specified the button will attempt to stretch horizontally to fit its content.
+If the button is being managed by a width sizing layout (hbox, fit, anchor), set this to false to prevent
+the button from doing this automatic sizing.
+Defaults to undefined. Button boxMaxHeight : NumberThe maximum value in pixels which this BoxComponent will set its height to.
Warning: This will override any size mana...The maximum value in pixels which this BoxComponent will set its height to.
Warning: This will override any size management applied by layout managers.
BoxComponent boxMaxWidth : NumberThe maximum value in pixels which this BoxComponent will set its width to.
Warning: This will override any size manag...The maximum value in pixels which this BoxComponent will set its width to.
diff --git a/docs/output/Ext.Loader.html b/docs/output/Ext.Loader.html
new file mode 100644
index 00000000..b1a8bab7
--- /dev/null
+++ b/docs/output/Ext.Loader.html
@@ -0,0 +1,7 @@
+Class Ext.Loader
Package: Ext Defined In: Loader.js Class: Loader Extends: Object
This class is a singleton and cannot be created directly.Public Properties
Property Defined By var : ObjectLoads a particular file from the fileList by index. This is used when preserving order Loader var : ObjectCallback function which is called after each file has been loaded. This calls the callback
+passed to load once the fi...Callback function which is called after each file has been loaded. This calls the callback
+passed to load once the final file in the fileList has been loaded Loader
Public Methods
Method Defined By load( Array fileList
, Function callback
, Object scope
, Boolean preserveOrder
)
+ :
+ voidLoads a given set of .js files. Calls the callback function when all files have been loaded
+Set preserveOrder to true...Loads a given set of .js files. Calls the callback function when all files have been loaded
+Set preserveOrder to true to ensure non-parallel loading of files if load order is importantParameters:fileList
: ArrayArray of all files to loadcallback
: FunctionCallback to call after all files have been loadedscope
: ObjectThe scope to call the callback inpreserveOrder
: BooleanTrue to make files load in serial, one after the other (defaults to false)
Returns:- void
Loader
Public Events
This class has no public events.
\ No newline at end of file
diff --git a/docs/output/Ext.PagingToolbar.html b/docs/output/Ext.PagingToolbar.html
index ae1cec78..e74d9c5d 100644
--- a/docs/output/Ext.PagingToolbar.html
+++ b/docs/output/Ext.PagingToolbar.html
@@ -759,9 +759,7 @@ this Component is added to a Container). Read-only.
Object mapping of parameter n...Deprecated. paramNames
should be set in the data store
(see Ext.data.Store.paramNames).
Object mapping of parameter names used for load calls, initially set to:
-{start: 'start', limit: 'limit'}
PagingToolbar private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+{start: 'start', limit: 'limit'}
PagingToolbar refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By PagingToolbar( Object config
)
Create a new PagingToolbarCreate a new PagingToolbarParameters:config
: ObjectThe config object
Returns:- void
PagingToolbar add( Mixed arg1
, Mixed arg2
, Mixed etc.
)
diff --git a/docs/output/Ext.Panel.html b/docs/output/Ext.Panel.html
index 802b4efe..648ee4dd 100644
--- a/docs/output/Ext.Panel.html
+++ b/docs/output/Ext.Panel.html
@@ -1095,9 +1095,7 @@ Note: see the Note for el al...The Panel's header Note: see the Note for el
also.
Panel hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By Panel( Object config
)
Parameters:config
: ObjectThe config object
Returns:- void
Panel add( ...Object/Array component
)
diff --git a/docs/output/Ext.QuickTip.html b/docs/output/Ext.QuickTip.html
index 745bd715..acc5685c 100644
--- a/docs/output/Ext.QuickTip.html
+++ b/docs/output/Ext.QuickTip.html
@@ -1135,9 +1135,7 @@ Note: see the Note for el al...The Panel's header Note: see the Note for el
also.
Panel hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component triggerElement : DOMElementWhen a Tooltip is configured with the delegate
option to cause selected child elements of the target
diff --git a/docs/output/Ext.SplitButton.html b/docs/output/Ext.SplitButton.html
index e84ea7d4..cfe391e2 100644
--- a/docs/output/Ext.SplitButton.html
+++ b/docs/output/Ext.SplitButton.html
@@ -86,37 +86,11 @@ result in elements needing to be synchronized with the new height. Example:<
necessary, false...true
to use overflow:'auto' on the components layout element and show scroll bars automatically when
necessary, false
to clip any overflowing content (defaults to false
). BoxComponent autoShow : BooleanTrue if the component should check for hidden classes (e.g. 'x-hidden' or 'x-hide-display') and remove
them on render...True if the component should check for hidden classes (e.g. 'x-hidden' or 'x-hide-display') and remove
-them on render (defaults to false). Component autoWidth : BooleanTrue to use width:'auto', false to use fixed width (or allow it to be managed by its parent
-Container's layout manage...True to use width:'auto', false to use fixed width (or allow it to be managed by its parent
-Container's layout manager. Defaults to false.
-Note: Although many components inherit this config option, not all will
-function as expected with a width of 'auto'. Setting autoWidth:true means that the
-browser will manage width based on the element's contents, and that Ext will not manage it at all.
-If the browser is managing the width, be aware that resizes performed by the browser in response
-to changes within the structure of the Component cannot be detected. Therefore changes to the width might
-result in elements needing to be synchronized with the new width. For example, where the target element is:
<div id='grid-container' style='margin-left:25%;width:50%'></div>
-A Panel rendered into that target element must listen for browser window resize in order to relay its
-child items when the browser changes its width:var myPanel = new Ext.Panel({
- renderTo: 'grid-container',
- monitorResize: true, // relay on browser resize
- title: 'Panel',
- height: 400,
- autoWidth: true,
- layout: 'hbox',
- layoutConfig: {
- align: 'stretch'
- },
- defaults: {
- flex: 1
- },
- items: [{
- title: 'Box 1',
- }, {
- title: 'Box 2'
- }, {
- title: 'Box 3'
- }],
-});
BoxComponent boxMaxHeight : NumberThe maximum value in pixels which this BoxComponent will set its height to.
+them on render (defaults to false). Component autoWidth : BooleanBy default, if a width is not specified the button will attempt to stretch horizontally to fit its content.
+If the bu...By default, if a width is not specified the button will attempt to stretch horizontally to fit its content.
+If the button is being managed by a width sizing layout (hbox, fit, anchor), set this to false to prevent
+the button from doing this automatic sizing.
+Defaults to undefined. Button boxMaxHeight : NumberThe maximum value in pixels which this BoxComponent will set its height to.
Warning: This will override any size mana...The maximum value in pixels which this BoxComponent will set its height to.
Warning: This will override any size management applied by layout managers.
BoxComponent boxMaxWidth : NumberThe maximum value in pixels which this BoxComponent will set its width to.
Warning: This will override any size manag...The maximum value in pixels which this BoxComponent will set its width to.
diff --git a/docs/output/Ext.TabPanel.html b/docs/output/Ext.TabPanel.html
index 63758ac6..6d27d497 100644
--- a/docs/output/Ext.TabPanel.html
+++ b/docs/output/Ext.TabPanel.html
@@ -1122,9 +1122,7 @@ Note: see the Note ...The Panel's footer el also. Panel hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By TabPanel( Object config
)
Parameters:config
: ObjectThe configuration options
Returns:- void
TabPanel activate( String/Panel tab
)
diff --git a/docs/output/Ext.Template.html b/docs/output/Ext.Template.html
index 9f0a5628..24821be2 100644
--- a/docs/output/Ext.Template.html
+++ b/docs/output/Ext.Template.html
@@ -15,7 +15,7 @@ to true will reduce // compile immediately
disableFormats: true // reduce apply
time since no formatting
- }
+ }
);
For a list of available format functions, see Ext.util.Format. Template re : RegExpThe regular expression used to match template variables.
@@ -52,7 +52,7 @@ Multiple arguments will be combined with join('')
.
{
compiled: true, // compile immediately
disableFormats: true // See Notes below.
- }
+ }
);
Notes:
diff --git a/docs/output/Ext.Tip.html b/docs/output/Ext.Tip.html
index 1823a59a..e11318c6 100644
--- a/docs/output/Ext.Tip.html
+++ b/docs/output/Ext.Tip.html
@@ -1077,9 +1077,7 @@ Note: see the Note for el al...
The Panel's header Note: see the Note for el
also.
Panel hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By Tip( Object config
)
Create a new TipCreate a new TipParameters:config
: ObjectThe configuration options
Returns:- void
Tip add( ...Object/Array component
)
diff --git a/docs/output/Ext.ToolTip.html b/docs/output/Ext.ToolTip.html
index a0b57290..6dfae731 100644
--- a/docs/output/Ext.ToolTip.html
+++ b/docs/output/Ext.ToolTip.html
@@ -1136,9 +1136,7 @@ Note: see the Note for el al...The Panel's header Note: see the Note for el
also.
Panel hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component triggerElement : DOMElementWhen a Tooltip is configured with the delegate
option to cause selected child elements of the target
diff --git a/docs/output/Ext.Toolbar.html b/docs/output/Ext.Toolbar.html
index ffdb3600..ef1eff03 100644
--- a/docs/output/Ext.Toolbar.html
+++ b/docs/output/Ext.Toolbar.html
@@ -743,9 +743,7 @@ config for a suggestion, or use a render listener directly:new
See also getEl
Component hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By Toolbar( Object/Array config
)
Creates a new ToolbarCreates a new ToolbarParameters:config
: Object/ArrayA config object or an array of buttons to add
Returns:- void
Toolbar add( Mixed arg1
, Mixed arg2
, Mixed etc.
)
diff --git a/docs/output/Ext.Viewport.html b/docs/output/Ext.Viewport.html
index 05756614..11c77554 100644
--- a/docs/output/Ext.Viewport.html
+++ b/docs/output/Ext.Viewport.html
@@ -676,9 +676,7 @@ config for a suggestion, or use a render listener directly:new
See also getEl
Component hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By Viewport( Object config
)
Create a new ViewportCreate a new ViewportParameters:config
: ObjectThe config object
Returns:- void
Viewport add( ...Object/Array component
)
diff --git a/docs/output/Ext.Window.html b/docs/output/Ext.Window.html
index 48a6f68e..4f37e515 100644
--- a/docs/output/Ext.Window.html
+++ b/docs/output/Ext.Window.html
@@ -1026,9 +1026,7 @@ Defaults to Ext.emptyFn
. Window <
Defaults to Ext.emptyFn
.Window ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By Window( Object config
)
Parameters:config
: ObjectThe config object
Returns:- void
Window add( ...Object/Array component
)
diff --git a/docs/output/Ext.XTemplate.html b/docs/output/Ext.XTemplate.html
index 56e5a646..81189725 100644
--- a/docs/output/Ext.XTemplate.html
+++ b/docs/output/Ext.XTemplate.html
@@ -32,7 +32,7 @@ to true will reduce // compile immediately
disableFormats: true // reduce apply
time since no formatting
- }
+ }
);
For a list of available format functions, see Ext.util.Format. Template re : RegExpThe regular expression used to match template variables.
@@ -45,7 +45,7 @@ examples d...The
-- Sample Data
+
- Sample Data
This is the data object used for reference in each code example:
var data = {
@@ -71,7 +71,7 @@ examples demonstrate all of the supported features.
};
-- Auto filling of arrays
+
- Auto filling of arrays
The tpl tag and the for operator are used
to process the provided data object:
@@ -132,7 +132,7 @@ you can access the parent object's members via the parent object
tpl.overwrite(panel.body, data);
-- Conditional processing with basic comparison operators
+
- Conditional processing with basic comparison operators
The tpl tag and the if operator are used
to provide conditional checks for deciding whether or not to render specific
@@ -163,7 +163,7 @@ Using the sample data above:
tpl.overwrite(panel.body, data);
-- Basic math support
+
- Basic math support
The following basic math operators may be applied directly on numeric
data values:
@@ -184,7 +184,7 @@ For example:
tpl.overwrite(panel.body, data);
-- Execute arbitrary inline code with special built-in template variables
+
- Execute arbitrary inline code with special built-in template variables
Anything between {[ ... ]}
is considered code to be executed
in the scope of the template. There are some special variables available in that code:
@@ -213,7 +213,7 @@ This example demonstrates basic row striping using an inline code block and the
tpl.overwrite(panel.body, data);
-- Template member functions
+
- Template member functions
One or more member functions can be specified in a configuration
object passed into the XTemplate constructor for more complex processing:
diff --git a/docs/output/Ext.data.ArrayStore.html b/docs/output/Ext.data.ArrayStore.html
index e7c342b0..114fbfae 100644
--- a/docs/output/Ext.data.ArrayStore.html
+++ b/docs/output/Ext.data.ArrayStore.html
@@ -328,13 +328,7 @@ should go based on the current sort information.Commit all Records with outstanding changes. To handle updates for changes,
subscribe to the Store's update event, an...Commit all Records with outstanding changes. To handle updates for changes,
subscribe to the Store's update event, and perform updating when the third parameter is
-Ext.data.Record.COMMIT.Parameters:- None.
Returns:- void
Store createMultipleFilterFn( Array filters
)
- :
- FunctionGiven an array of filter functions (each with optional scope), constructs and returns a single function that returns
-...Given an array of filter functions (each with optional scope), constructs and returns a single function that returns
-the result of all of the filters ANDed togetherParameters:filters
: ArrayThe array of filter objects (each object should contain an 'fn' and optional scope)
Returns:Function
The multiple filter function
Store createSortFunction( String field
, String direction
)
- :
- FunctionCreates and returns a function which sorts an array by the given field and directionCreates and returns a function which sorts an array by the given field and directionParameters:field
: StringThe field to create the sorter fordirection
: StringThe direction to sort by (defaults to "ASC")
Returns:Function
A function which sorts by the field/direction combination provided
Store destroy()
+Ext.data.Record.COMMIT.Parameters:- None.
Returns:- void
Store destroy()
:
voidDestroys the store.Destroys the store.Parameters:- None.
Returns:- void
Store each( Function fn
, [Object scope
] )
:
@@ -382,21 +376,21 @@ options to filter by more than one property.
Single filter example:
store.filter('name', 'Ed', true, true); //finds all records containing the substring 'Ed'
Multiple filter example:
-store.filter([
+store.filter([
{
-property : 'name',
-value : 'Ed',
-anyMatch : true, //optional, defaults to true
-caseSensitive: true //optional, defaults to true
+property : 'name',
+value : 'Ed',
+anyMatch : true, //optional, defaults to true
+caseSensitive: true //optional, defaults to true
},
-//filter functions can also be passed
+//filter functions can also be passed
{
-fn : function(record) {
-return record.get('age') == 24
+fn : function(record) {
+return record.get('age') == 24
},
scope: this
}
-]);Parameters:field
: String|ArrayA field on your records, or an array containing multiple filter optionsvalue
: String/RegExpEither a string that the field should begin with, or a RegExp to test
+]);Parameters:field
: String|ArrayA field on your records, or an array containing multiple filter optionsvalue
: String/RegExpEither a string that the field should begin with, or a RegExp to test
against the field.anyMatch
: Boolean(optional) true to match any part not just the beginningcaseSensitive
: Boolean(optional) true for case sensitive comparisonexactMatch
: BooleanTrue to force exact match (^ and $ characters added to the regex). Defaults to false. Ignored if anyMatch is true.
Returns:- void
Store filterBy( Function fn
, [Object scope
] )
:
voidFilter by a function. The specified function will be called for each
diff --git a/docs/output/Ext.data.DirectStore.html b/docs/output/Ext.data.DirectStore.html
index 62ac4840..5340b01d 100644
--- a/docs/output/Ext.data.DirectStore.html
+++ b/docs/output/Ext.data.DirectStore.html
@@ -327,13 +327,7 @@ should go based on the current sort information.Commit all Records with outstanding changes. To handle updates for changes,
subscribe to the Store's update event, an...Commit all Records with outstanding changes. To handle updates for changes,
subscribe to the Store's update event, and perform updating when the third parameter is
-Ext.data.Record.COMMIT.Parameters:- None.
Returns:- void
Store createMultipleFilterFn( Array filters
)
- :
- FunctionGiven an array of filter functions (each with optional scope), constructs and returns a single function that returns
-...Given an array of filter functions (each with optional scope), constructs and returns a single function that returns
-the result of all of the filters ANDed togetherParameters:filters
: ArrayThe array of filter objects (each object should contain an 'fn' and optional scope)
Returns:Function
The multiple filter function
Store createSortFunction( String field
, String direction
)
- :
- FunctionCreates and returns a function which sorts an array by the given field and directionCreates and returns a function which sorts an array by the given field and directionParameters:field
: StringThe field to create the sorter fordirection
: StringThe direction to sort by (defaults to "ASC")
Returns:Function
A function which sorts by the field/direction combination provided
Store destroy()
+Ext.data.Record.COMMIT.Parameters:- None.
Returns:- void
Store destroy()
:
voidDestroys the store.Destroys the store.Parameters:- None.
Returns:- void
Store each( Function fn
, [Object scope
] )
:
@@ -381,21 +375,21 @@ options to filter by more than one property.
Single filter example:
store.filter('name', 'Ed', true, true); //finds all records containing the substring 'Ed'
Multiple filter example:
-store.filter([
+store.filter([
{
-property : 'name',
-value : 'Ed',
-anyMatch : true, //optional, defaults to true
-caseSensitive: true //optional, defaults to true
+property : 'name',
+value : 'Ed',
+anyMatch : true, //optional, defaults to true
+caseSensitive: true //optional, defaults to true
},
-//filter functions can also be passed
+//filter functions can also be passed
{
-fn : function(record) {
-return record.get('age') == 24
+fn : function(record) {
+return record.get('age') == 24
},
scope: this
}
-]);Parameters:field
: String|ArrayA field on your records, or an array containing multiple filter optionsvalue
: String/RegExpEither a string that the field should begin with, or a RegExp to test
+]);Parameters:field
: String|ArrayA field on your records, or an array containing multiple filter optionsvalue
: String/RegExpEither a string that the field should begin with, or a RegExp to test
against the field.anyMatch
: Boolean(optional) true to match any part not just the beginningcaseSensitive
: Boolean(optional) true for case sensitive comparisonexactMatch
: BooleanTrue to force exact match (^ and $ characters added to the regex). Defaults to false. Ignored if anyMatch is true.
Returns:- void
Store filterBy( Function fn
, [Object scope
] )
:
voidFilter by a function. The specified function will be called for each
diff --git a/docs/output/Ext.data.GroupingStore.html b/docs/output/Ext.data.GroupingStore.html
index 3d3af7fc..d72cf8fc 100644
--- a/docs/output/Ext.data.GroupingStore.html
+++ b/docs/output/Ext.data.GroupingStore.html
@@ -318,13 +318,7 @@ should go based on the current sort information.Commit all Records with outstanding changes. To handle updates for changes,
subscribe to the Store's update event, an...Commit all Records with outstanding changes. To handle updates for changes,
subscribe to the Store's update event, and perform updating when the third parameter is
-Ext.data.Record.COMMIT.Parameters:- None.
Returns:- void
Store createMultipleFilterFn( Array filters
)
- :
- FunctionGiven an array of filter functions (each with optional scope), constructs and returns a single function that returns
-...Given an array of filter functions (each with optional scope), constructs and returns a single function that returns
-the result of all of the filters ANDed togetherParameters:filters
: ArrayThe array of filter objects (each object should contain an 'fn' and optional scope)
Returns:Function
The multiple filter function
Store createSortFunction( String field
, String direction
)
- :
- FunctionCreates and returns a function which sorts an array by the given field and directionCreates and returns a function which sorts an array by the given field and directionParameters:field
: StringThe field to create the sorter fordirection
: StringThe direction to sort by (defaults to "ASC")
Returns:Function
A function which sorts by the field/direction combination provided
Store destroy()
+Ext.data.Record.COMMIT.Parameters:- None.
Returns:- void
Store destroy()
:
voidDestroys the store.Destroys the store.Parameters:- None.
Returns:- void
Store each( Function fn
, [Object scope
] )
:
@@ -372,21 +366,21 @@ options to filter by more than one property.
Single filter example:
store.filter('name', 'Ed', true, true); //finds all records containing the substring 'Ed'
Multiple filter example:
-store.filter([
+store.filter([
{
-property : 'name',
-value : 'Ed',
-anyMatch : true, //optional, defaults to true
-caseSensitive: true //optional, defaults to true
+property : 'name',
+value : 'Ed',
+anyMatch : true, //optional, defaults to true
+caseSensitive: true //optional, defaults to true
},
-//filter functions can also be passed
+//filter functions can also be passed
{
-fn : function(record) {
-return record.get('age') == 24
+fn : function(record) {
+return record.get('age') == 24
},
scope: this
}
-]);Parameters:field
: String|ArrayA field on your records, or an array containing multiple filter optionsvalue
: String/RegExpEither a string that the field should begin with, or a RegExp to test
+]);Parameters:field
: String|ArrayA field on your records, or an array containing multiple filter optionsvalue
: String/RegExpEither a string that the field should begin with, or a RegExp to test
against the field.anyMatch
: Boolean(optional) true to match any part not just the beginningcaseSensitive
: Boolean(optional) true for case sensitive comparisonexactMatch
: BooleanTrue to force exact match (^ and $ characters added to the regex). Defaults to false. Ignored if anyMatch is true.
Returns:- void
Store filterBy( Function fn
, [Object scope
] )
:
voidFilter by a function. The specified function will be called for each
diff --git a/docs/output/Ext.data.JsonStore.html b/docs/output/Ext.data.JsonStore.html
index 113abbd2..8bc1f469 100644
--- a/docs/output/Ext.data.JsonStore.html
+++ b/docs/output/Ext.data.JsonStore.html
@@ -322,13 +322,7 @@ should go based on the current sort information.Commit all Records with outstanding changes. To handle updates for changes,
subscribe to the Store's update event, an...Commit all Records with outstanding changes. To handle updates for changes,
subscribe to the Store's update event, and perform updating when the third parameter is
-Ext.data.Record.COMMIT.Parameters:- None.
Returns:- void
Store createMultipleFilterFn( Array filters
)
- :
- FunctionGiven an array of filter functions (each with optional scope), constructs and returns a single function that returns
-...Given an array of filter functions (each with optional scope), constructs and returns a single function that returns
-the result of all of the filters ANDed togetherParameters:filters
: ArrayThe array of filter objects (each object should contain an 'fn' and optional scope)
Returns:Function
The multiple filter function
Store createSortFunction( String field
, String direction
)
- :
- FunctionCreates and returns a function which sorts an array by the given field and directionCreates and returns a function which sorts an array by the given field and directionParameters:field
: StringThe field to create the sorter fordirection
: StringThe direction to sort by (defaults to "ASC")
Returns:Function
A function which sorts by the field/direction combination provided
Store destroy()
+Ext.data.Record.COMMIT.Parameters:- None.
Returns:- void
Store destroy()
:
voidDestroys the store.Destroys the store.Parameters:- None.
Returns:- void
Store each( Function fn
, [Object scope
] )
:
@@ -376,21 +370,21 @@ options to filter by more than one property.
Single filter example:
store.filter('name', 'Ed', true, true); //finds all records containing the substring 'Ed'
Multiple filter example:
-store.filter([
+store.filter([
{
-property : 'name',
-value : 'Ed',
-anyMatch : true, //optional, defaults to true
-caseSensitive: true //optional, defaults to true
+property : 'name',
+value : 'Ed',
+anyMatch : true, //optional, defaults to true
+caseSensitive: true //optional, defaults to true
},
-//filter functions can also be passed
+//filter functions can also be passed
{
-fn : function(record) {
-return record.get('age') == 24
+fn : function(record) {
+return record.get('age') == 24
},
scope: this
}
-]);Parameters:field
: String|ArrayA field on your records, or an array containing multiple filter optionsvalue
: String/RegExpEither a string that the field should begin with, or a RegExp to test
+]);Parameters:field
: String|ArrayA field on your records, or an array containing multiple filter optionsvalue
: String/RegExpEither a string that the field should begin with, or a RegExp to test
against the field.anyMatch
: Boolean(optional) true to match any part not just the beginningcaseSensitive
: Boolean(optional) true for case sensitive comparisonexactMatch
: BooleanTrue to force exact match (^ and $ characters added to the regex). Defaults to false. Ignored if anyMatch is true.
Returns:- void
Store filterBy( Function fn
, [Object scope
] )
:
voidFilter by a function. The specified function will be called for each
diff --git a/docs/output/Ext.data.Store.html b/docs/output/Ext.data.Store.html
index bf05fa4e..bcb33c48 100644
--- a/docs/output/Ext.data.Store.html
+++ b/docs/output/Ext.data.Store.html
@@ -360,13 +360,7 @@ should go based on the current sort information.Commit all Records with outstanding changes. To handle updates for changes,
subscribe to the Store's update event, an...Commit all Records with outstanding changes. To handle updates for changes,
subscribe to the Store's update event, and perform updating when the third parameter is
-Ext.data.Record.COMMIT.Parameters:- None.
Returns:- void
Store createMultipleFilterFn( Array filters
)
- :
- FunctionGiven an array of filter functions (each with optional scope), constructs and returns a single function that returns
-...Given an array of filter functions (each with optional scope), constructs and returns a single function that returns
-the result of all of the filters ANDed togetherParameters:filters
: ArrayThe array of filter objects (each object should contain an 'fn' and optional scope)
Returns:Function
The multiple filter function
Store createSortFunction( String field
, String direction
)
- :
- FunctionCreates and returns a function which sorts an array by the given field and directionCreates and returns a function which sorts an array by the given field and directionParameters:field
: StringThe field to create the sorter fordirection
: StringThe direction to sort by (defaults to "ASC")
Returns:Function
A function which sorts by the field/direction combination provided
Store destroy()
+Ext.data.Record.COMMIT.Parameters:- None.
Returns:- void
Store destroy()
:
voidDestroys the store.Destroys the store.Parameters:- None.
Returns:- void
Store each( Function fn
, [Object scope
] )
:
@@ -414,21 +408,21 @@ options to filter by more than one property.
Single filter example:
store.filter('name', 'Ed', true, true); //finds all records containing the substring 'Ed'
Multiple filter example:
-store.filter([
+store.filter([
{
-property : 'name',
-value : 'Ed',
-anyMatch : true, //optional, defaults to true
-caseSensitive: true //optional, defaults to true
+property : 'name',
+value : 'Ed',
+anyMatch : true, //optional, defaults to true
+caseSensitive: true //optional, defaults to true
},
-//filter functions can also be passed
+//filter functions can also be passed
{
-fn : function(record) {
-return record.get('age') == 24
+fn : function(record) {
+return record.get('age') == 24
},
scope: this
}
-]);Parameters:field
: String|ArrayA field on your records, or an array containing multiple filter optionsvalue
: String/RegExpEither a string that the field should begin with, or a RegExp to test
+]);Parameters:field
: String|ArrayA field on your records, or an array containing multiple filter optionsvalue
: String/RegExpEither a string that the field should begin with, or a RegExp to test
against the field.anyMatch
: Boolean(optional) true to match any part not just the beginningcaseSensitive
: Boolean(optional) true for case sensitive comparisonexactMatch
: BooleanTrue to force exact match (^ and $ characters added to the regex). Defaults to false. Ignored if anyMatch is true.
Returns:- void
Store filterBy( Function fn
, [Object scope
] )
:
voidFilter by a function. The specified function will be called for each
diff --git a/docs/output/Ext.data.XmlStore.html b/docs/output/Ext.data.XmlStore.html
index 34646732..1e78abe8 100644
--- a/docs/output/Ext.data.XmlStore.html
+++ b/docs/output/Ext.data.XmlStore.html
@@ -348,13 +348,7 @@ should go based on the current sort information.Commit all Records with outstanding changes. To handle updates for changes,
subscribe to the Store's update event, an...Commit all Records with outstanding changes. To handle updates for changes,
subscribe to the Store's update event, and perform updating when the third parameter is
-Ext.data.Record.COMMIT.Parameters:- None.
Returns:- void
Store createMultipleFilterFn( Array filters
)
- :
- FunctionGiven an array of filter functions (each with optional scope), constructs and returns a single function that returns
-...Given an array of filter functions (each with optional scope), constructs and returns a single function that returns
-the result of all of the filters ANDed togetherParameters:filters
: ArrayThe array of filter objects (each object should contain an 'fn' and optional scope)
Returns:Function
The multiple filter function
Store createSortFunction( String field
, String direction
)
- :
- FunctionCreates and returns a function which sorts an array by the given field and directionCreates and returns a function which sorts an array by the given field and directionParameters:field
: StringThe field to create the sorter fordirection
: StringThe direction to sort by (defaults to "ASC")
Returns:Function
A function which sorts by the field/direction combination provided
Store destroy()
+Ext.data.Record.COMMIT.Parameters:- None.
Returns:- void
Store destroy()
:
voidDestroys the store.Destroys the store.Parameters:- None.
Returns:- void
Store each( Function fn
, [Object scope
] )
:
@@ -402,21 +396,21 @@ options to filter by more than one property.
Single filter example:
store.filter('name', 'Ed', true, true); //finds all records containing the substring 'Ed'
Multiple filter example:
-store.filter([
+store.filter([
{
-property : 'name',
-value : 'Ed',
-anyMatch : true, //optional, defaults to true
-caseSensitive: true //optional, defaults to true
+property : 'name',
+value : 'Ed',
+anyMatch : true, //optional, defaults to true
+caseSensitive: true //optional, defaults to true
},
-//filter functions can also be passed
+//filter functions can also be passed
{
-fn : function(record) {
-return record.get('age') == 24
+fn : function(record) {
+return record.get('age') == 24
},
scope: this
}
-]);Parameters:field
: String|ArrayA field on your records, or an array containing multiple filter optionsvalue
: String/RegExpEither a string that the field should begin with, or a RegExp to test
+]);Parameters:field
: String|ArrayA field on your records, or an array containing multiple filter optionsvalue
: String/RegExpEither a string that the field should begin with, or a RegExp to test
against the field.anyMatch
: Boolean(optional) true to match any part not just the beginningcaseSensitive
: Boolean(optional) true for case sensitive comparisonexactMatch
: BooleanTrue to force exact match (^ and $ characters added to the regex). Defaults to false. Ignored if anyMatch is true.
Returns:- void
Store filterBy( Function fn
, [Object scope
] )
:
voidFilter by a function. The specified function will be called for each
diff --git a/docs/output/Ext.form.BasicForm.html b/docs/output/Ext.form.BasicForm.html
index 6e18bc19..a1a139b8 100644
--- a/docs/output/Ext.form.BasicForm.html
+++ b/docs/output/Ext.form.BasicForm.html
@@ -259,7 +259,9 @@ Or a shorthand syntax:
:
BasicFormCalls Ext.applyIf for all field in this form with the passed object.Calls Ext.applyIf for all field in this form with the passed object.Parameters:values
: Object
Returns:BasicForm
this
BasicForm applyToFields( Object values
)
:
- BasicFormCalls Ext.apply for all fields in this form with the passed object.Calls Ext.apply for all fields in this form with the passed object.Parameters:values
: Object
Returns:BasicForm
this
BasicForm clearInvalid()
+ BasicFormCalls Ext.apply for all fields in this form with the passed object.Calls Ext.apply for all fields in this form with the passed object.Parameters:values
: Object
Returns:BasicForm
this
BasicForm cleanDestroyed()
+ :
+ voidRemoves all fields from the collection that have been destroyed.Removes all fields from the collection that have been destroyed.Parameters:- None.
Returns:- void
BasicForm clearInvalid()
:
BasicFormClears all invalid messages in this form.Clears all invalid messages in this form.Parameters:- None.
Returns:BasicForm
this
BasicForm doAction( String/Object actionName
, [Object options
] )
:
diff --git a/docs/output/Ext.form.ComboBox.html b/docs/output/Ext.form.ComboBox.html
index e3324465..c44f8beb 100644
--- a/docs/output/Ext.form.ComboBox.html
+++ b/docs/output/Ext.form.ComboBox.html
@@ -888,7 +888,20 @@ config for a suggestion, or use a render listener directly:new
single: true // Remove the listener after first invocation
}
});
-See also getEl
Component hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component label : Ext.ElementThe label Element associated with this Field. Only available after this Field has been rendered by a
+See also getEl
Component hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component keyNav : Ext.KeyNav
+<p>A {@link Ext.KeyNav KeyNav} object which handles navigation keys for this ComboBox. This performs actions
+based on keystrokes typed when the input field is focused.</p>
+<p><b>After the ComboBox has been rendered</b>, you may override existing navigation key functionality,
+or add your own based upon key names as specified in the {@link Ext.KeyNav KeyNav} class.</p>
+<p>The function is executed in the scope (<code>this</code> reference of the ComboBox. Example:</p><pre><code>
+myCombo.keyNav.esc = function(e) { // Override ESC handling function
+ this.collapse(); // Standard behaviour of Ext's ComboBox.
+ this.setValue(this.startValue); // We reset to starting value on ESC
+};
+myCombo.keyNav.tab = function() { // Override TAB handling function
+ this.onViewClick(false); // Select the currently highlighted row
+};
+</code></pre> ComboBox label : Ext.ElementThe label Element associated with this Field. Only available after this Field has been rendered by a
Ext.layout.FormL...The label Element associated with this Field. Only available after this Field has been rendered by a
Ext.layout.FormLayout layout manager.
Field lastQuery : StringThe value of the match string used to filter the store. Delete this property to force a requery.
Example use:
diff --git a/docs/output/Ext.form.FieldSet.html b/docs/output/Ext.form.FieldSet.html
index 10de5cb2..d9342008 100644
--- a/docs/output/Ext.form.FieldSet.html
+++ b/docs/output/Ext.form.FieldSet.html
@@ -803,9 +803,7 @@ config for a suggestion, or use a render listener directly:new
See also getEl
Component hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By FieldSet( Object config
)
Parameters:config
: ObjectConfiguration options
Returns:- void
FieldSet add( ...Object/Array component
)
diff --git a/docs/output/Ext.form.FormPanel.html b/docs/output/Ext.form.FormPanel.html
index ef9c85e4..4ad2e93f 100644
--- a/docs/output/Ext.form.FormPanel.html
+++ b/docs/output/Ext.form.FormPanel.html
@@ -993,9 +993,7 @@ Note: see the Note for el al...The Panel's header Note: see the Note for el
also.
Panel hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By FormPanel( Object config
)
Parameters:config
: ObjectConfiguration options
Returns:- void
FormPanel add( ...Object/Array component
)
diff --git a/docs/output/Ext.form.TimeField.html b/docs/output/Ext.form.TimeField.html
index 6b3a3194..6577eca8 100644
--- a/docs/output/Ext.form.TimeField.html
+++ b/docs/output/Ext.form.TimeField.html
@@ -845,7 +845,20 @@ config for a suggestion, or use a render listener directly:new
single: true // Remove the listener after first invocation
}
});
-See also getEl
Component hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component label : Ext.ElementThe label Element associated with this Field. Only available after this Field has been rendered by a
+See also getEl
Component hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component keyNav : Ext.KeyNav
+<p>A {@link Ext.KeyNav KeyNav} object which handles navigation keys for this ComboBox. This performs actions
+based on keystrokes typed when the input field is focused.</p>
+<p><b>After the ComboBox has been rendered</b>, you may override existing navigation key functionality,
+or add your own based upon key names as specified in the {@link Ext.KeyNav KeyNav} class.</p>
+<p>The function is executed in the scope (<code>this</code> reference of the ComboBox. Example:</p><pre><code>
+myCombo.keyNav.esc = function(e) { // Override ESC handling function
+ this.collapse(); // Standard behaviour of Ext's ComboBox.
+ this.setValue(this.startValue); // We reset to starting value on ESC
+};
+myCombo.keyNav.tab = function() { // Override TAB handling function
+ this.onViewClick(false); // Select the currently highlighted row
+};
+</code></pre> ComboBox label : Ext.ElementThe label Element associated with this Field. Only available after this Field has been rendered by a
Ext.layout.FormL...The label Element associated with this Field. Only available after this Field has been rendered by a
Ext.layout.FormLayout layout manager.
Field lastQuery : StringThe value of the match string used to filter the store. Delete this property to force a requery.
Example use:
diff --git a/docs/output/Ext.form.VTypes.html b/docs/output/Ext.form.VTypes.html
index 0e8f2637..7d7b8468 100644
--- a/docs/output/Ext.form.VTypes.html
+++ b/docs/output/Ext.form.VTypes.html
@@ -15,7 +15,7 @@ Ext.apply(Ext.form.VTypes, {
// vtype Mask property: The keystroke filter mask
timeMask: /[\d\s:amp]/i
});
-Another example:
+Another example:
// custom Vtype for vtype:'IPAddress'
Ext.apply(Ext.form.VTypes, {
IPAddress: function(v) {
@@ -29,8 +29,8 @@ Ext.apply(Ext.form.VTypes, {
'This field should only contain letters and _'
VTypes alphanumMask : RegExpThe keystroke filter mask to be applied on alphanumeric input. Defaults to:
/[a-z0-9_]/i VTypes alphanumText : StringThe error text to display when the alphanumeric validation function returns false. Defaults to:
'This field should o...The error text to display when the alphanumeric validation function returns false. Defaults to:
-'This field should only contain letters, numbers and _' VTypes emailMask : RegExpThe keystroke filter mask to be applied on email input. See the email method for
-information about more complex ema...The keystroke filter mask to be applied on email input. See the email method for
+'This field should only contain letters, numbers and _' VTypes emailMask : RegExpThe keystroke filter mask to be applied on email input. See the email method for
+information about more complex emai...The keystroke filter mask to be applied on email input. See the email method for
information about more complex email validation. Defaults to:
/[a-z0-9_\.\-@]/i VTypes emailText : StringThe error text to display when the email validation function returns false. Defaults to:
'This field should be an e-...The error text to display when the email validation function returns false. Defaults to:
@@ -46,7 +46,7 @@ information about more complex email validation. Defaults to:
validation per ...The function used to validate email addresses. Note that this is a very basic validation -- complete
validation per the email RFC specifications is very complex and beyond the scope of this class, although
this function can be overridden if a more comprehensive validation scheme is desired. See the validation
-section of the Wikipedia article on email addresses
+section of the Wikipedia article on email addresses
for additional information. This implementation is intended to validate the following emails:
'barney@example.de', 'barney.rubble@example.com', 'barney-rubble@example.coop', 'barney+rubble@example.com'
.Parameters:value
: StringThe email address
Returns:Boolean
true if the RegExp test passed, and false if not.
VTypes url( String value
)
diff --git a/docs/output/Ext.grid.EditorGridPanel.html b/docs/output/Ext.grid.EditorGridPanel.html
index c013985a..28bbff5f 100644
--- a/docs/output/Ext.grid.EditorGridPanel.html
+++ b/docs/output/Ext.grid.EditorGridPanel.html
@@ -902,9 +902,7 @@ Note: see the Note for el al...The Panel's header Note: see the Note for el
also.
Panel hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By EditorGridPanel( Object config
)
Parameters:config
: ObjectThe config object
Returns:- void
EditorGridPanel addButton( String/Object config
, Function handler
, Object scope
)
diff --git a/docs/output/Ext.grid.GridPanel.html b/docs/output/Ext.grid.GridPanel.html
index 5942c699..403aa45b 100644
--- a/docs/output/Ext.grid.GridPanel.html
+++ b/docs/output/Ext.grid.GridPanel.html
@@ -955,9 +955,7 @@ Note: see the Note for el al...The Panel's header Note: see the Note for el
also.
Panel hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By GridPanel( Object config
)
Parameters:config
: ObjectThe config object
Returns:- void
GridPanel addButton( String/Object config
, Function handler
, Object scope
)
diff --git a/docs/output/Ext.grid.PropertyGrid.html b/docs/output/Ext.grid.PropertyGrid.html
index 17e930a1..ad1b8cbf 100644
--- a/docs/output/Ext.grid.PropertyGrid.html
+++ b/docs/output/Ext.grid.PropertyGrid.html
@@ -939,9 +939,7 @@ Note: see the Note for el al...The Panel's header Note: see the Note for el
also.
Panel hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By PropertyGrid( Object config
)
Parameters:config
: ObjectThe grid config object
Returns:- void
PropertyGrid addButton( String/Object config
, Function handler
, Object scope
)
diff --git a/docs/output/Ext.html b/docs/output/Ext.html
index 1d6245c3..fd9d3658 100644
--- a/docs/output/Ext.html
+++ b/docs/output/Ext.html
@@ -1,5 +1,5 @@
-Class Ext
Package: Global Defined In: Ext.js Class: Ext Extends: Object
Ext core utilities and functions.
This class is a singleton and cannot be created directly.Public Properties
Property Defined By : ObjectRemoves a DOM node from the document. Ext BLANK_IMAGE_URL : StringURL to a 1x1 transparent gif image used by Ext to create inline icons with CSS background images.
-In older versions ...URL to a 1x1 transparent gif image used by Ext to create inline icons with CSS background images.
+Class Ext
Package: Global Defined In: Ext.js Class: Ext Extends: Object
Ext core utilities and functions.
This class is a singleton and cannot be created directly.Public Properties
Property Defined By : ObjectRemoves a DOM node from the document. Ext BLANK_IMAGE_URL : StringURL to a 1x1 transparent gif image used by Ext to create inline icons with CSS background images.
+In older versions o...URL to a 1x1 transparent gif image used by Ext to create inline icons with CSS background images.
In older versions of IE, this defaults to "http://extjs.com/s.gif" and you should change this to a URL on your server.
For other browsers it uses an inline data URL. Ext SSL_SECURE_URL : StringURL to a blank file used by Ext when in secure mode for iframe src and onReady src to prevent
the IE insecure content...URL to a blank file used by Ext when in secure mode for iframe src and onReady src to prevent
@@ -21,7 +21,7 @@ The event name is specified with an @ suffix.
'#foo a@click' : function(e, t){
// do something
},
-
+
// add the same listener to multiple selectors (separated by comma BEFORE the @)
'#foo a, #bar span.some-class@mouseover' : function(){
// do something
@@ -278,12 +278,12 @@ Usage:Ext.override(MyClass, {
containing one or more methods.
Returns:- void
Ext partition( Array|NodeList arr
, [Function truth
] )
:
ArrayPartitions the set into two sets: a true set and a false set.
-Example:
-Example2:
+Example:
+Example2:
// Example 1:
-Ext.partition([true,...Partitions the set into two sets: a true set and a false set.
-Example:
-Example2:
+Ext.partition([true, f...Partitions the set into two sets: a true set and a false set.
+Example:
+Example2:
// Example 1:
Ext.partition([true, false, true, true, false]); // [[true, true, true], [false, false]]
@@ -316,12 +316,12 @@ may be looked up.
cls
: ConstructorRemoves 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 Ext.enableNestedListenerRemoval is
true
, then DOM event listeners are also removed from all child nodes. The body node
-will be ignored if passed in.
Parameters:node
: HTMLElementThe node to remove
Returns:- void
Ext select( String/Array selector
, [HTMLElement/String root
] )
+will be ignored if passed in.Parameters:node
: HTMLElementThe node to remove
Returns:- void
Ext select( String/Array selector
, [Boolean unique
], [HTMLElement/String root
] )
:
CompositeElementLite/CompositeElementSelects elements based on the passed CSS selector to enable Element methods
to be applied to many related elements in...Selects elements based on the passed CSS selector to enable Element methods
to be applied to many related elements in one statement through the returned CompositeElement or
-CompositeElementLite object.Parameters:selector
: String/ArrayThe CSS selector or an array of elementsroot
: HTMLElement/String(optional) The root element of the query or id of the root
Returns:CompositeElementLite/CompositeElement
Ext sum( Array arr
)
+CompositeElementLite object.Parameters:selector
: String/ArrayThe CSS selector or an array of elementsunique
: Boolean(optional) true to create a unique Ext.Element for each element (defaults to a shared flyweight object)root
: HTMLElement/String(optional) The root element of the query or id of the root
Returns:CompositeElementLite/CompositeElement
Ext sum( Array arr
)
:
NumberCalculates the sum of the ArrayCalculates the sum of the ArrayParameters:arr
: ArrayThe Array to calculate the sum value of.
Returns:Number
The sum.
Ext toArray( Iterable the
)
:
diff --git a/docs/output/Ext.menu.ColorMenu.html b/docs/output/Ext.menu.ColorMenu.html
index fb6d45d2..7cda13f1 100644
--- a/docs/output/Ext.menu.ColorMenu.html
+++ b/docs/output/Ext.menu.ColorMenu.html
@@ -636,9 +636,7 @@ config for a suggestion, or use a render listener directly:new
this Component is added to a C...
Component palette : ColorPalette
-The {@link Ext.ColorPalette} instance for this ColorMenu ColorMenu private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+The {@link Ext.ColorPalette} instance for this ColorMenu ColorMenu refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By add( ...Object/Array component
)
:
diff --git a/docs/output/Ext.menu.DateMenu.html b/docs/output/Ext.menu.DateMenu.html
index 1c1bcbc0..62591528 100644
--- a/docs/output/Ext.menu.DateMenu.html
+++ b/docs/output/Ext.menu.DateMenu.html
@@ -635,9 +635,7 @@ config for a suggestion, or use a render listener directly:new
See also getEl
Component hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component picker : DatePickerThe Ext.DatePicker instance for this DateMenu DateMenu private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component picker : DatePickerThe Ext.DatePicker instance for this DateMenu DateMenu refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By add( ...Object/Array component
)
:
diff --git a/docs/output/Ext.menu.Menu.html b/docs/output/Ext.menu.Menu.html
index 6e31a906..b1111210 100644
--- a/docs/output/Ext.menu.Menu.html
+++ b/docs/output/Ext.menu.Menu.html
@@ -629,9 +629,7 @@ config for a suggestion, or use a render listener directly:new
See also getEl
Component hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By add( ...Object/Array component
)
:
diff --git a/docs/output/Ext.slider.Tip.html b/docs/output/Ext.slider.Tip.html
index 35c4d3a6..9c5c5b00 100644
--- a/docs/output/Ext.slider.Tip.html
+++ b/docs/output/Ext.slider.Tip.html
@@ -1098,9 +1098,7 @@ Note: see the Note for el al...The Panel's header Note: see the Note for el
also.
Panel hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component items : MixedCollectionThe collection of components in this container as a Ext.util.MixedCollection Container ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component
Public Methods
Method Defined By add( ...Object/Array component
)
:
diff --git a/docs/output/Ext.tree.TreePanel.html b/docs/output/Ext.tree.TreePanel.html
index 50db0897..6c268dab 100644
--- a/docs/output/Ext.tree.TreePanel.html
+++ b/docs/output/Ext.tree.TreePanel.html
@@ -907,9 +907,7 @@ Note: see the Note for el al...The Panel's header Note: see the Note for el
also.
Panel hidden : BooleanTrue if this component is hidden. Read-only. Component initialConfig : ObjectThis Component's initial configuration specification. Read-only. Component ownerCt : Ext.ContainerThis Component's owner Container (defaults to undefined, and is set automatically when
this Component is added to a C... Component private : ObjectWe can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its par...We can only lay out if there is a view area in which to layout.
-display:none on the layout target, *or any of its parent elements* will mean it has no view area. Container refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
+Note: to access items within the Container see itemId.
Component refOwner : Ext.ContainerThe ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has...The ancestor Container into which the ref reference was inserted if this Component
is a child of a Container, and has been configured with a ref
. Component rendered : BooleanTrue if this component has been rendered. Read-only. Component root : Ext.tree.TreeNodeThe root node of this tree. TreePanel
Public Methods
Method Defined By TreePanel( Object config
)
Parameters:config
: Object
Returns:- void
TreePanel add( ...Object/Array component
)
diff --git a/docs/output/tree.js b/docs/output/tree.js
index 09eab00f..5fa759cf 100644
--- a/docs/output/tree.js
+++ b/docs/output/tree.js
@@ -451,6 +451,8 @@
,
{"href":"output/Ext.LoadMask.html","text":"LoadMask","id":"Ext.LoadMask","isClass":true,"iconCls":"icon-cls","cls":"cls","leaf":true}
,
+ {"href":"output/Ext.Loader.html","text":"Loader","id":"Ext.Loader","isClass":true,"iconCls":"icon-static","cls":"cls","leaf":true}
+ ,
{"href":"output/Ext.MessageBox.html","text":"MessageBox","id":"Ext.MessageBox","isClass":true,"iconCls":"icon-static","cls":"cls","leaf":true}
,
{"href":"output/Ext.PagingToolbar.html","text":"PagingToolbar","id":"Ext.PagingToolbar","isClass":true,"iconCls":"icon-cmp","cls":"cls","leaf":true}
@@ -956,6 +958,8 @@
,
"Ext.LoadMask":"icon-cls"
,
+ "Ext.Loader":"icon-static"
+ ,
"Ext.MessageBox":"icon-static"
,
"Ext.PagingToolbar":"icon-cmp"
diff --git a/docs/source/AbsoluteLayout.html b/docs/source/AbsoluteLayout.html
index 135dd227..ce6ef676 100644
--- a/docs/source/AbsoluteLayout.html
+++ b/docs/source/AbsoluteLayout.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/AbstractSelectionModel.html b/docs/source/AbstractSelectionModel.html
index def905df..627027e9 100644
--- a/docs/source/AbstractSelectionModel.html
+++ b/docs/source/AbstractSelectionModel.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/AccordionLayout.html b/docs/source/AccordionLayout.html
index e8625c42..2dd9fd30 100644
--- a/docs/source/AccordionLayout.html
+++ b/docs/source/AccordionLayout.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
@@ -167,7 +167,7 @@ Ext.layout.AccordionLayout = Ext.extend(Ext.layout.FitLayout, {
var hh = 0, i, ct = this.getRenderedItems(this.container), len = ct.length, p;
// Add up all the header heights
for (i = 0; i < len; i++) {
- if((p = ct[i]) != item){
+ if((p = ct[i]) != item && !p.hidden){
hh += p.header.getHeight();
}
};
diff --git a/docs/source/Action.html b/docs/source/Action.html
index 53df27fa..155d8be1 100644
--- a/docs/source/Action.html
+++ b/docs/source/Action.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/Action1.html b/docs/source/Action1.html
index 6676d6b4..aadcc8d7 100644
--- a/docs/source/Action1.html
+++ b/docs/source/Action1.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/AnchorLayout.html b/docs/source/AnchorLayout.html
index 4fc1c6fa..ffbceeed 100644
--- a/docs/source/AnchorLayout.html
+++ b/docs/source/AnchorLayout.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/Api.html b/docs/source/Api.html
index ead75757..eae94b65 100644
--- a/docs/source/Api.html
+++ b/docs/source/Api.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/ArrayReader.html b/docs/source/ArrayReader.html
index 1e24d054..7417c50e 100644
--- a/docs/source/ArrayReader.html
+++ b/docs/source/ArrayReader.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/ArrayStore.html b/docs/source/ArrayStore.html
index e9dba750..2033b326 100644
--- a/docs/source/ArrayStore.html
+++ b/docs/source/ArrayStore.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/AsyncTreeNode.html b/docs/source/AsyncTreeNode.html
index 77d59f26..31f68102 100644
--- a/docs/source/AsyncTreeNode.html
+++ b/docs/source/AsyncTreeNode.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/AutoLayout.html b/docs/source/AutoLayout.html
index 65647aff..6bb05ce4 100644
--- a/docs/source/AutoLayout.html
+++ b/docs/source/AutoLayout.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/BaseItem.html b/docs/source/BaseItem.html
index aed3c99b..9242854f 100644
--- a/docs/source/BaseItem.html
+++ b/docs/source/BaseItem.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/BasicForm.html b/docs/source/BasicForm.html
index 5d2401f4..001f1b72 100644
--- a/docs/source/BasicForm.html
+++ b/docs/source/BasicForm.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
@@ -569,7 +569,7 @@ myFormPanel.getForm().submit({
if (f.dataIndex == id || f.id == id || f.getName() == id) {
field = f;
return false;
- } else if (f.isComposite) {
+ } else if (f.isComposite && f.rendered) {
return f.items.each(findMatchingField);
}
}
@@ -745,6 +745,13 @@ myFormPanel.getForm().submit({
return this;
},
+ /**
+ * Removes all fields from the collection that have been destroyed.
+ */
+ cleanDestroyed : function() {
+ this.items.filterBy(function(o) { return !!o.isDestroyed; }).each(this.remove, this);
+ },
+
/**
* Iterates through the {@link Ext.form.Field Field}s which have been {@link #add add}ed to this BasicForm,
* checks them for an id attribute, and calls {@link Ext.form.Field#applyToMarkup} on the existing dom element with that id.
diff --git a/docs/source/BorderLayout.html b/docs/source/BorderLayout.html
index 6d6e0276..c8215d55 100644
--- a/docs/source/BorderLayout.html
+++ b/docs/source/BorderLayout.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/BoxComponent.html b/docs/source/BoxComponent.html
index f7e935a1..75eb8865 100644
--- a/docs/source/BoxComponent.html
+++ b/docs/source/BoxComponent.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/BoxLayout.html b/docs/source/BoxLayout.html
index f5cf0e2e..e23536ce 100644
--- a/docs/source/BoxLayout.html
+++ b/docs/source/BoxLayout.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
@@ -436,12 +436,12 @@ Ext.layout.VBoxLayout = Ext.extend(Ext.layout.BoxLayout, {
switch (this.align) {
case 'stretch':
stretchWidth = availWidth - horizMargins;
- calcs.width = stretchWidth.constrain(child.minHeight || 0, child.maxWidth || 1000000);
+ calcs.width = stretchWidth.constrain(child.minWidth || 0, child.maxWidth || 1000000);
calcs.dirtySize = true;
break;
case 'stretchmax':
stretchWidth = maxWidth - horizMargins;
- calcs.width = stretchWidth.constrain(child.minHeight || 0, child.maxWidth || 1000000);
+ calcs.width = stretchWidth.constrain(child.minWidth || 0, child.maxWidth || 1000000);
calcs.dirtySize = true;
break;
case 'center':
diff --git a/docs/source/Button.html b/docs/source/Button.html
index 60d5d812..02a91e7b 100644
--- a/docs/source/Button.html
+++ b/docs/source/Button.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
@@ -193,6 +193,13 @@ Ext.Button = Ext.extend(Ext.BoxComponent, {
* @type Menu
* The {@link Ext.menu.Menu Menu} object associated with this Button when configured with the {@link #menu} config option.
*/
+ /**
+ * @cfg {Boolean} autoWidth
+ * By default, if a width is not specified the button will attempt to stretch horizontally to fit its content.
+ * If the button is being managed by a width sizing layout (hbox, fit, anchor), set this to false to prevent
+ * the button from doing this automatic sizing.
+ * Defaults to undefined.
+ */
initComponent : function(){
Ext.Button.superclass.initComponent.call(this);
@@ -290,7 +297,7 @@ Ext.Button = Ext.extend(Ext.BoxComponent, {
if(!Ext.isEmpty(this.oldCls)){
this.el.removeClass([this.oldCls, 'x-btn-pressed']);
}
- this.oldCls = (this.iconCls || this.icon) ? (this.text ? ' x-btn-text-icon' : ' x-btn-icon') : ' x-btn-noicon';
+ this.oldCls = (this.iconCls || this.icon) ? (this.text ? 'x-btn-text-icon' : 'x-btn-icon') : 'x-btn-noicon';
this.el.addClass([this.oldCls, this.pressed ? 'x-btn-pressed' : null]);
}
},
@@ -464,7 +471,7 @@ Ext.Button = Ext.extend(Ext.BoxComponent, {
// private
doAutoWidth : function(){
- if(this.el && this.text && this.width === undefined){
+ if(this.autoWidth !== false && this.el && this.text && this.width === undefined){
this.el.setWidth('auto');
if(Ext.isIE7 && Ext.isStrict){
var ib = this.btnEl;
diff --git a/docs/source/ButtonGroup.html b/docs/source/ButtonGroup.html
index 76329353..aa9580e3 100644
--- a/docs/source/ButtonGroup.html
+++ b/docs/source/ButtonGroup.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/CSS.html b/docs/source/CSS.html
index 9a32e06d..5aa59a61 100644
--- a/docs/source/CSS.html
+++ b/docs/source/CSS.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/CardLayout.html b/docs/source/CardLayout.html
index 4eba3658..acb52248 100644
--- a/docs/source/CardLayout.html
+++ b/docs/source/CardLayout.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/CellSelectionModel.html b/docs/source/CellSelectionModel.html
index 0a1b5dd9..1eabc708 100644
--- a/docs/source/CellSelectionModel.html
+++ b/docs/source/CellSelectionModel.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/Chart.html b/docs/source/Chart.html
index 7526fa49..cdba6c28 100644
--- a/docs/source/Chart.html
+++ b/docs/source/Chart.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/CheckItem.html b/docs/source/CheckItem.html
index fa339117..78905abb 100644
--- a/docs/source/CheckItem.html
+++ b/docs/source/CheckItem.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/Checkbox.html b/docs/source/Checkbox.html
index 70e34e2d..964f72db 100644
--- a/docs/source/Checkbox.html
+++ b/docs/source/Checkbox.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/CheckboxGroup.html b/docs/source/CheckboxGroup.html
index 6973a64a..d3da0dad 100644
--- a/docs/source/CheckboxGroup.html
+++ b/docs/source/CheckboxGroup.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/CheckboxSelectionModel.html b/docs/source/CheckboxSelectionModel.html
index 02ac6cdf..6a7e4259 100644
--- a/docs/source/CheckboxSelectionModel.html
+++ b/docs/source/CheckboxSelectionModel.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
@@ -93,6 +93,7 @@ Ext.grid.CheckboxSelectionModel = Ext.extend(Ext.grid.RowSelectionModel, {
this.deselectRow(index);
}else{
this.selectRow(index, true);
+ this.grid.getView().focusRow(index);
}
}
}
diff --git a/docs/source/ClickRepeater.html b/docs/source/ClickRepeater.html
index 97b8d700..1a46fc20 100644
--- a/docs/source/ClickRepeater.html
+++ b/docs/source/ClickRepeater.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/ColorMenu.html b/docs/source/ColorMenu.html
index a8eb3814..e1103c75 100644
--- a/docs/source/ColorMenu.html
+++ b/docs/source/ColorMenu.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/ColorPalette.html b/docs/source/ColorPalette.html
index 47f0c554..cf00b139 100644
--- a/docs/source/ColorPalette.html
+++ b/docs/source/ColorPalette.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
@@ -140,7 +140,7 @@ cp.colors = ['000000', '993300', '333300'];
if(this.value){
var s = this.value;
this.value = null;
- this.select(s);
+ this.select(s, true);
}
},
@@ -156,8 +156,9 @@ cp.colors = ['000000', '993300', '333300'];
/**
* Selects the specified color in the palette (fires the {@link #select} event)
* @param {String} color A valid 6-digit color hex code (# will be stripped if included)
+ * @param {Boolean} suppressEvent (optional) True to stop the select event from firing. Defaults to false.
*/
- select : function(color){
+ select : function(color, suppressEvent){
color = color.replace('#', '');
if(color != this.value || this.allowReselect){
var el = this.el;
@@ -166,7 +167,9 @@ cp.colors = ['000000', '993300', '333300'];
}
el.child('a.color-'+color).addClass('x-color-palette-sel');
this.value = color;
- this.fireEvent('select', this, color);
+ if(suppressEvent !== true){
+ this.fireEvent('select', this, color);
+ }
}
}
@@ -174,7 +177,6 @@ cp.colors = ['000000', '993300', '333300'];
* @cfg {String} autoEl @hide
*/
});
-Ext.reg('colorpalette', Ext.ColorPalette);
-
+Ext.reg('colorpalette', Ext.ColorPalette);
\ No newline at end of file
diff --git a/docs/source/Column.html b/docs/source/Column.html
index 1c85728e..cc9ab22a 100644
--- a/docs/source/Column.html
+++ b/docs/source/Column.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/Column1.html b/docs/source/Column1.html
index ea42fe8d..61869168 100644
--- a/docs/source/Column1.html
+++ b/docs/source/Column1.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/ColumnDD.html b/docs/source/ColumnDD.html
index 39e60ea6..42d3c1bc 100644
--- a/docs/source/ColumnDD.html
+++ b/docs/source/ColumnDD.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/ColumnLayout.html b/docs/source/ColumnLayout.html
index 080d6e7c..c790b4cf 100644
--- a/docs/source/ColumnLayout.html
+++ b/docs/source/ColumnLayout.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/ColumnModel.html b/docs/source/ColumnModel.html
index af00407e..a7bd6f5e 100644
--- a/docs/source/ColumnModel.html
+++ b/docs/source/ColumnModel.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/ColumnResizer.html b/docs/source/ColumnResizer.html
index 48016aa0..27792130 100644
--- a/docs/source/ColumnResizer.html
+++ b/docs/source/ColumnResizer.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/ColumnSplitDD.html b/docs/source/ColumnSplitDD.html
index 555cd492..89a3ecc1 100644
--- a/docs/source/ColumnSplitDD.html
+++ b/docs/source/ColumnSplitDD.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/Combo.html b/docs/source/Combo.html
index b560224c..03f8f92a 100644
--- a/docs/source/Combo.html
+++ b/docs/source/Combo.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
@@ -751,7 +751,23 @@ var menu = new Ext.menu.Menu({
initEvents : function(){
Ext.form.ComboBox.superclass.initEvents.call(this);
-
+ /**
+ * @property keyNav
+ * @type Ext.KeyNav
+ * A {@link Ext.KeyNav KeyNav} object which handles navigation keys for this ComboBox. This performs actions
+ * based on keystrokes typed when the input field is focused.
+ * After the ComboBox has been rendered, you may override existing navigation key functionality,
+ * or add your own based upon key names as specified in the {@link Ext.KeyNav KeyNav} class.
+ * The function is executed in the scope (this
reference of the ComboBox. Example:
+myCombo.keyNav.esc = function(e) { // Override ESC handling function
+ this.collapse(); // Standard behaviour of Ext's ComboBox.
+ this.setValue(this.startValue); // We reset to starting value on ESC
+};
+myCombo.keyNav.tab = function() { // Override TAB handling function
+ this.onViewClick(false); // Select the currently highlighted row
+};
+
+ */
this.keyNav = new Ext.KeyNav(this.el, {
"up" : function(e){
this.inKeyMode = true;
diff --git a/docs/source/Component.html b/docs/source/Component.html
index 36f3513f..bb90e043 100644
--- a/docs/source/Component.html
+++ b/docs/source/Component.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/ComponentMgr.html b/docs/source/ComponentMgr.html
index de79702b..8c4db2b6 100644
--- a/docs/source/ComponentMgr.html
+++ b/docs/source/ComponentMgr.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
diff --git a/docs/source/CompositeElement.html b/docs/source/CompositeElement.html
index 4e20d023..29db01de 100644
--- a/docs/source/CompositeElement.html
+++ b/docs/source/CompositeElement.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
@@ -33,12 +33,12 @@ els.hide(true); // all elements fade out and hide
els.setWidth(100).hide(true);
*/
-Ext.CompositeElement = function(els, root){
- this.elements = [];
- this.add(els, root);
-};
-
-Ext.extend(Ext.CompositeElement, Ext.CompositeElementLite, {
+Ext.CompositeElement = Ext.extend(Ext.CompositeElementLite, {
+
+ constructor : function(els, root){
+ this.elements = [];
+ this.add(els, root);
+ },
// private
getElement : function(el){
@@ -82,7 +82,7 @@ Ext.extend(Ext.CompositeElement, Ext.CompositeElementLite, {
*/
});
-/**
+/**
* Selects elements based on the passed CSS selector to enable {@link Ext.Element Element} methods
* to be applied to many related elements in one statement through the returned {@link Ext.CompositeElement CompositeElement} or
* {@link Ext.CompositeElementLite CompositeElementLite} object.
@@ -106,7 +106,7 @@ Ext.Element.select = function(selector, unique, root){
return (unique === true) ? new Ext.CompositeElement(els) : new Ext.CompositeElementLite(els);
};
-/**
+/**
* Selects elements based on the passed CSS selector to enable {@link Ext.Element Element} methods
* to be applied to many related elements in one statement through the returned {@link Ext.CompositeElement CompositeElement} or
* {@link Ext.CompositeElementLite CompositeElementLite} object.
@@ -114,7 +114,7 @@ Ext.Element.select = function(selector, unique, root){
* @param {Boolean} unique (optional) true to create a unique Ext.Element for each element (defaults to a shared flyweight object)
* @param {HTMLElement/String} root (optional) The root element of the query or id of the root
* @return {CompositeElementLite/CompositeElement}
- * @member Ext.Element
+ * @member Ext
* @method select
*/
Ext.select = Ext.Element.select;
diff --git a/docs/source/CompositeElementLite-more.html b/docs/source/CompositeElementLite-more.html
index 8ca808c1..b4525a51 100644
--- a/docs/source/CompositeElementLite-more.html
+++ b/docs/source/CompositeElementLite-more.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
@@ -15,29 +15,29 @@
/**
* @class Ext.CompositeElementLite
*/
-Ext.apply(Ext.CompositeElementLite.prototype, {
- addElements : function(els, root){
+Ext.apply(Ext.CompositeElementLite.prototype, {
+ addElements : function(els, root){
if(!els){
return this;
}
if(typeof els == "string"){
els = Ext.Element.selectorFunction(els, root);
}
- var yels = this.elements;
- Ext.each(els, function(e) {
- yels.push(Ext.get(e));
+ var yels = this.elements;
+ Ext.each(els, function(e) {
+ yels.push(Ext.get(e));
});
return this;
},
-
+
/**
* Returns the first Element
* @return {Ext.Element}
*/
first : function(){
return this.item(0);
- },
-
+ },
+
/**
* Returns the last Element
* @return {Ext.Element}
@@ -45,7 +45,7 @@ Ext.apply(Ext.CompositeElementLite.prototype, {
last : function(){
return this.item(this.getCount()-1);
},
-
+
/**
* Returns true if this composite contains the passed element
* @param el {Mixed} The id of an element, or an Ext.Element, or an HtmlElement to find within the composite collection.
@@ -54,7 +54,7 @@ Ext.apply(Ext.CompositeElementLite.prototype, {
contains : function(el){
return this.indexOf(el) != -1;
},
-
+
/**
* Removes the specified element(s).
* @param {Mixed} el The id of an element, the Element itself, the index of the element in this composite
@@ -64,22 +64,22 @@ Ext.apply(Ext.CompositeElementLite.prototype, {
*/
removeElement : function(keys, removeDom){
var me = this,
- els = this.elements,
- el;
- Ext.each(keys, function(val){
- if ((el = (els[val] || els[val = me.indexOf(val)]))) {
- if(removeDom){
+ els = this.elements,
+ el;
+ Ext.each(keys, function(val){
+ if ((el = (els[val] || els[val = me.indexOf(val)]))) {
+ if(removeDom){
if(el.dom){
el.remove();
}else{
Ext.removeNode(el);
}
}
- els.splice(val, 1);
- }
- });
+ els.splice(val, 1);
+ }
+ });
return this;
- }
+ }
});
diff --git a/docs/source/CompositeElementLite.html b/docs/source/CompositeElementLite.html
index 87fc3fff..4c504bfc 100644
--- a/docs/source/CompositeElementLite.html
+++ b/docs/source/CompositeElementLite.html
@@ -7,7 +7,7 @@
/*!
- * Ext JS Library 3.2.0
+ * Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
@@ -63,8 +63,8 @@ Ext.override(Ext.CompositeElementLite, {
};
Ext.CompositeElementLite.prototype = {
- isComposite: true,
-
+ isComposite: true,
+
// private
getElement : function(el){
// Set the shared flyweight dom property to the current element
@@ -73,19 +73,19 @@ Ext.CompositeElementLite.prototype = {
e.id = el.id;
return e;
},
-
+
// private
transformElement : function(el){
return Ext.getDom(el);
},
-
+
/**
* Returns the number of elements in this Composite.
* @return Number
*/
getCount : function(){
return this.elements.length;
- },
+ },
/**
* Adds elements to this Composite object.
* @param {Mixed} els Either an Array of DOM elements to add, or another Composite object who's elements should be added.
@@ -97,27 +97,27 @@ Ext.CompositeElementLite.prototype = {
if(!els){
return this;
}
- if(Ext.isString(els)){
+ if(typeof els == "string"){
els = Ext.Element.selectorFunction(els, root);
}else if(els.isComposite){
els = els.elements;
}else if(!Ext.isIterable(els)){
els = [els];
}
-
+
for(var i = 0, len = els.length; i < len; ++i){
elements.push(me.transformElement(els[i]));
}
return me;
},
-
+
invoke : function(fn, args){
var me = this,
els = me.elements,
- len = els.length,
- e,
+ len = els.length,
+ e,
i;
-
+
for(i = 0; i < len; i++) {
e = els[i];
if(e){
@@ -147,7 +147,7 @@ Ext.CompositeElementLite.prototype = {
var els = this.elements,
len = els.length,
i, e;
-
+
for(i = 0; ithis reference) in which the function is executed. (defaults to the Element)
* @return {CompositeElement} this
*/
- each : function(fn, scope){
+ each : function(fn, scope){
var me = this,
els = me.elements,
len = els.length,
i, e;
-
+
for(i = 0; i/**
* Clears this Composite and adds the elements passed.
* @param {Mixed} els Either an array of DOM elements, or another Composite from which to fill this Composite.
@@ -197,7 +197,7 @@ Ext.CompositeElementLite.prototype = {
me.add(els);
return me;
},
-
+
/**
* Filters this composite to only elements that match the passed selector.
* @param {String/Function} selector A string CSS selector or a comparison function.
@@ -215,8 +215,8 @@ Ext.CompositeElementLite.prototype = {
: function(el){
return el.is(selector);
};
-
-
+
+
me.each(function(el, self, i){
if(fn(el, i) !== false){
els[els.length] = me.transformElement(el);
@@ -225,7 +225,7 @@ Ext.CompositeElementLite.prototype = {
me.elements = els;
return me;
},
-
+
/**
* Find the index of the passed element within the composite collection.
* @param el {Mixed} The id of an element, or an Ext.Element, or an HtmlElement to find within the composite collection.
@@ -234,7 +234,7 @@ Ext.CompositeElementLite.prototype = {
indexOf : function(el){
return this.elements.indexOf(this.transformElement(el));
},
-
+
/**
* Replaces the specified element with the passed element.
* @param {Mixed} el The id of an element, the Element itself, the index of the element in this composite
@@ -242,7 +242,7 @@ Ext.CompositeElementLite.prototype = {
* @param {Mixed} replacement The id of an element or the Element itself.
* @param {Boolean} domReplace (Optional) True to remove and replace the element in the document too.
* @return {CompositeElement} this
- */
+ */
replaceElement : function(el, replacement, domReplace){
var index = !isNaN(el) ? el : this.indexOf(el),
d;
@@ -257,7 +257,7 @@ Ext.CompositeElementLite.prototype = {
}
return this;
},
-
+
/**
* Removes all elements.
*/
@@ -272,22 +272,22 @@ Ext.CompositeElementLite.prototype.on = Ext.CompositeElementLite.prototype.addLi
var fnName,
ElProto = Ext.Element.prototype,
CelProto = Ext.CompositeElementLite.prototype;
-
+
for(fnName in ElProto){
if(Ext.isFunction(ElProto[fnName])){
- (function(fnName){
+ (function(fnName){
CelProto[fnName] = CelProto[fnName] || function(){
return this.invoke(fnName, arguments);
};
}).call(CelProto, fnName);
-
+
}
}
})();
if(Ext.DomQuery){
Ext.Element.selectorFunction = Ext.DomQuery.select;
-}
+}
/**
* Selects elements based on the passed CSS selector to enable {@link Ext.Element Element} methods
@@ -320,6 +320,7 @@ Ext.Element.select = function(selector, root){
* @member Ext
* @method select
*/
-Ext.select = Ext.Element.select;
+Ext.select = Ext.Element.select;
+