Ext原码学习之Ext-more.js
// JavaScript Document Ext.apply(Ext,{ userAgent:navigator.userAgent.toLowerCase(), cache:{}, isSeed:1000, windowId:‘ext-window‘, documentId:‘ext-document‘, isReady:false, enableGarbageCollector:true, enableListenerCollection:true, rootHierarchyState:{}, addCacheEntry:function(id,el,dom) { dom = dom || el.dom; if(!dom) { Ext.Error.raise(‘Cannot add an entry to element cache without the dom node‘); } var cache = Ext.cache, key = id ||(el && el.id) ||dom.id, entry = cache[key]||(cache[key] = { data:{}, event:{}, dom:dom, skipGarbageCollection:!!(document.getElementById||dom.navigator) }); if(el) { el.$cache = entry; entry.el = el; } return entry; }, //update cache entry updateCacheEntry:function(cacheItem,dom) { cacheItem.dom = dom; if(cacheItem.el) { cacheItem.el.dom = dom; } return cacheItem; }, //generates unique ids id:function(el,prefix) { var me = this,sandboxPrefix = ‘‘; el = Ext.getDom(el,true) || {}; if(el === document) { el.id = me.documentId; } else if(el === window) { el.id = me.windowId; } if(!el.id) { if(me.isSandboxed) { sandboxPrefix = Ext.sandboxName.toLowerCase()+‘-‘; } el.id = sandboxPrefix +(prefix||‘ext-gen‘)+(Ext.isSeed); } return el.id; }, escapeId:(function(){ var validIdRe = /^[a-zA-Z_][a-zA-Z0-9_\-]*$/i, escapeRx =/([\W]{1})/g, leadingNumRx = /^(\d)/g, escapeFn = function(match,capture) { return "\\" +capture; }, numEscapeFn=function(match,capture) { return "\\00"+capture.charCodeAt(0).toString(16)+‘ ‘; }; return function(id){ return validIdRe.test(id) ? id :id.replace(escapeRx,escapeFn).replace(leadingNumRx,numEscapeFn); } }()), // return current document body getBody:(function(){ var body ; return function(){ return body || (body = Ext.get(document.body)); } }()), // return current document head getHead:(function(){ //load once var head; return function(){ return head ||(head = Ext.get(document.getElementByTagName(‘head‘)[0])); } }()), // return current document as an Ext.Element getDoc:(function(){ var doc; return function(){ return doc ||(doc = Ext.get(document)); } }()), // return the current orientation of the mobile device getOrientation:function(){ return window.innerHeight > window.innerWidth ? ‘portrait‘:‘landscape‘; }, // destory any objects passed to is by removeing all event listeners destory:function(){ var ln = arguments.length,i,arg; for(i = 0;i<ln ;i++) { arg = arguments[i]; if(arg) { if(Ext.isArray(arg)) { this.destory.apply(this,arg); } else if(arg.isStore) { arg.destoryStore(); } else if(Ext.isFunction(arg.destory)) { arg.destory(); }else { arg.remove(); } } } }, callback:function(callback,scope,args,delay) { var fn ,ret; if(Ext.isFunction(callback)) { fn = callback; } else { fn = scope[callback]; if(!fn) { Ext.Error.raise(‘No method named ‘ + callback ); } } if(fn) { args = args || {}; scope = scope || window; if(delay) { Ext.defer(fn,delay,scope,args); } else { ret = fn.apply(scope,args); } } return ret; }, //private method resolveMethod:function(fn,scope) { if(Ext.isFunction(fn)) { return fn; } if(!Ext.isObject(scope) || !Ext.isFunction(scope[fn])) { Ext.Error.raise(‘No method named‘ + fn); } return scope[fn]; }, htmlEncode:function(value) { return Ext.String.htmlEncode(value); }, htmlDecode:function(value) { return Ext.String.htmlDecode(value); }, urlAppend:function(url,s) { return Ext.String.urlAppend(url,s); } }); Ext.ns = Ext.namespace; window.undefined = window.undefined; //check browser type (function(){ var check = function(regex){ return regex.test(Ext.userAgent); } isStrict = document.compatMode == ‘CSS1Compat‘, version = function(is,regex) { var m ; return (is && ( m = regex.test(Ext.userAgent))) ? parseFloat(m[1]):0; }, docMode = document.documentMode, isOpera = check(/opera/), isOpera10_5 = isOpera && check(/version\/10\.5/), isChrome = check(/\bchrome\b/), isWebKit = check(/webkit/), isSafari = !isChrome && check(/safari/), isSafari2 = isSafari && check(/applewebkit\/4/), isSafari3 = isSafari && check(/version\/3/), isSafari4 = isSafari && check(/version\/4/), isSafari5_0 = isSafari && check(/version\/5.0/), isSafari5 = isSafari && check(/version\/5/), isIE = !isOpera && check(/msie/), isIE7 = isIE && ((check(/msie 7/) && docMode !=8 && docMode !=9 && docMode !=10 ) || docMode ==7), isIE8 = isIE && ((check(/msie 8/) && docMode !=7 && docMode !=9 && docMode !=10 ) || docMode ==8), isIE9 = isIE && ((check(/msie 9/) && docMode !=8 && docMode !=7 && docMode !=10 ) || docMode ==9), isIE10 = isIE && ((check(/msie 9/) && docMode !=8 && docMode !=7 && docMode !=9 ) || docMode ==10), isIE6 = isIE && ( check(/msie 6/) ), isGecko = !isWebKit && check(/gecko/), isGecko3 = isGecko && check(/rv:1\.9/), isGecko4 = isGecko && check(/rv:2\.0/), isGecko5 = isGecko && check(/rv:5\./), isGecko10 = isGecko && check(/rv:10\./), isFF3_0 = isGecko3 && check(/rv:1\.9\.0/), isFF3_5 = isGecko3 && check(/rv:1\.9\.1/), isFF3_6 = isGecko3 && check(/rv:1\.9\.2/), isWindows = check(/window|win32/), isMac = check(/macintosh|mac os x/), isLinux = check(/linux/), scrollbarSize = null, chromeVersion = version(true,/\bchrome\/(\d+\.\d+)/), firefoxVersion = version(true,/\bfirefox\/(\d+\.\d+)/), ieVersion = version(isIE,/msie (\d+\.\d+)/), operaVersion = version(isOpera, /version\/(\d+\.\d+)/), safariVersion = version(isSafari, /version\/(\d+\.\d+)/), webKitVersion = version(isWebKit, /webkit\/(\d+\.\d+)/), isSecure = /^https/i.test(window.location.protocal), nullLog=null; try{ document.execCommand(‘BackgroundImageCache‘,false,true); }catch(e){} var primitiveRe = /string|number|boolean/; function dumpObject(object) { var member,type,value,name,numbers=[]; for(name in object) { if(object.hasOwnProperty(name)) { value = object[name]; type = typeof value; if(type==‘function‘) { continue; } if(type==‘undefined‘) { member = type; } else if(value===null || primitiveRe.test(type) || Ext.isDate(value)) { member = Ext.decode(value); } else if(Ext.isArray(value)) { member = ‘[ ]‘; }else if(Ext.isObject(value)) { member = ‘{ }‘; } else { member = type; } members.push(Ext.encode(name) + ": " + member); } } if(members.length) { return ‘\n Data:{\n ‘+members.join(‘,\n ‘) + ‘\n}‘; } } //console.log(dumpObject({a:2,b:4,d:5,f:new Date()})); function log(message) { var options,dump,con=Ext.global.console, level = ‘log‘, indent = log.indent || 0,statck,out,max; log.indent = indent; if(Ext.type(message) !=‘string‘) { options = message; message = options.msg || ‘‘; level = options.level || level; dump = options.dump; stack = options.stack; if(options.indent) { ++ log.indent; } else if(options.outdent) { log.indent = indent = Math.max(indent - 1,0); } if(dump && (con && con .dir)) { message += dumpObject(dump); dump = null; } if(arguments.length >1) { message += Array.prototype.slice.call(arguments,1).join(‘‘); } message = indent ? Ext.String.repeat(‘ ‘, log.indextSize * indent)+message : message; if(level !=‘log‘) { message = ‘[‘ + level.charAt(0).toUpperCase() + ‘]‘ + message; } if(con) { if(con[level]) { con[level](message); } else { con.log(message); } if(dump) { con.dir(dump); } if(stack && con.trace) { if(!con.firebug || level !=‘error‘) { con.trace(); } } }else { if(Ext.isOpera) { opera.postError(message); } else { out = log.out; max = log.max; if(out.length >= max) { Ext.Array.erase(out,0,out.length -3 & Math.floor(max/4)); } out.push(message); } } } ++log.count; ++log.counters[level]; } function logx(level,args) { if(typeof args[0] == ‘string‘) { args.unshift({}); } args[0].level = level; log.apply(this,args); } log.error = function() { logx(‘error‘,Array.prototype.slice.call(arguments)); } log.info = function() { logx(‘info‘,Array.prototype.slice.call(arguments)); } log.warn = function() { logx(‘warn‘,Array.prototype.slice.call(arguments)); } log.count = 0; log.counters = {error :0,warn:0,info:0,log:0}; log.identSize = 2; log.out = []; log.max = 750; log.show = function () { window.open(‘‘,‘extlog‘).document.write([ ‘<html><head><script type="text/javascript">‘, ‘var lastCount = 0;‘, ‘function update () {‘, ‘var ext = window.opener.Ext,‘, ‘extlog = ext && ext.log;‘, ‘if (extlog && extlog.out && lastCount != extlog.count) {‘, ‘lastCount = extlog.count;‘, ‘var s = "<tt>" + extlog.out.join("~~~").replace(/[&]/g, "&").replace(/[<]/g, "<").replace(/[ ]/g, " ").replace(/\\~\\~\\~/g, "<br/>") + "</tt>";‘, ‘document.body.innerHTML = s;‘, ‘}‘, ‘setTimeout(update, 1000);‘, ‘}‘, ‘setTimeout(update, 1000);‘, ‘</script></head><body></body></html>‘].join(‘‘)); }; nullLog = function(){}; nullLog.info = nullLog.warn = nullLog.error = Ext.emptyFn; //update ext version //Ext.setVersion(‘extjs‘,‘4.2.1.883‘); Ext.apply(Ext,{ SSL_SECURE_URL : isSecure && isIE ? ‘javascript:\‘\‘‘:‘about:blank‘, plainTableCls:Ext.buildSettings.baseCSSPrefix +‘table-plain‘, plainListCls:Ext.buildSettings.baseCSSPrefix +‘list-plain‘, enableNestedListenerRemoval:false, USE_NATIVE_JSON:false, getDom:function(el,strict) { if(!el || !document) { return null; } if(el.dom) { return el.dom; } else { if(Ext.type(el) == ‘string‘) { var e = Ext.getElementById(el); if(e && isIE && strict) { if(el == e.getAttribute(‘id‘)) { return e; } else { return null; } } return e; } else { return el; } } }, removeNode:isIE6 || isIE7 || isIE8 ? (function(){ var d ; return function(n){ if(n && n.tagName.toUpperCase() != ‘BODY‘) { (Eet.enableNestedListerRemoval )?Ext.EventManager.purgeElement(n):Ext.EventManager.removeAll(n); var cache = Ext.cache,id = n.id; if(cache[id]) { delete cache[id].dom; delete cache[id]; } if(isIE8 && n.parentNode) { n.parentNode.removeChild(n); } d = d|| document.createElement(‘div‘); d.appendChild(n); d.innerHTML = ‘‘; } } })() :function(n){ if(n && n.parentNode && n.tagName.toUpperCase() !=‘BODY‘) { (Ext.enableNestedListenerRemoval) ? Ext.EventManager.purgeElement(n):Ext.EventManager.removeAll(n); var cahce = Ext.cache,id = n.id; if(cache[id]) { delete cache[id].dom; delete cache[id]; } n.parentNode.removeChild(n); } }, isStrict:isStrict, isIEQuirks :isIE && (!isStrict && (isIE6 || isIE7 || isIE8 || isIE9)), isOpera:isOpera, isOPera10_5:isOpera10_5, /** * True if the detected browser uses WebKit. * @type Boolean */ isWebKit : isWebKit, /** * True if the detected browser is Chrome. * @type Boolean */ isChrome : isChrome, /** * True if the detected browser is Safari. * @type Boolean */ isSafari : isSafari, /** * True if the detected browser is Safari 3.x. * @type Boolean */ isSafari3 : isSafari3, /** * True if the detected browser is Safari 4.x. * @type Boolean */ isSafari4 : isSafari4, /** * True if the detected browser is Safari 5.x. * @type Boolean */ isSafari5 : isSafari5, /** * True if the detected browser is Safari 5.0.x. * @type Boolean */ isSafari5_0 : isSafari5_0, /** * True if the detected browser is Safari 2.x. * @type Boolean */ isSafari2 : isSafari2, /** * True if the detected browser is Internet Explorer. * @type Boolean */ isIE : isIE, /** * True if the detected browser is Internet Explorer 6.x. * @type Boolean */ isIE6 : isIE6, /** * True if the detected browser is Internet Explorer 7.x. * @type Boolean */ isIE7 : isIE7, /** * True if the detected browser is Internet Explorer 7.x or lower. * @type Boolean */ isIE7m : isIE6 || isIE7, /** * True if the detected browser is Internet Explorer 7.x or higher. * @type Boolean */ isIE7p : isIE && !isIE6, /** * True if the detected browser is Internet Explorer 8.x. * @type Boolean */ isIE8 : isIE8, /** * True if the detected browser is Internet Explorer 8.x or lower. * @type Boolean */ isIE8m : isIE6 || isIE7 || isIE8, /** * True if the detected browser is Internet Explorer 8.x or higher. * @type Boolean */ isIE8p : isIE && !(isIE6 || isIE7), /** * True if the detected browser is Internet Explorer 9.x. * @type Boolean */ isIE9 : isIE9, /** * True if the detected browser is Internet Explorer 9.x or lower. * @type Boolean */ isIE9m : isIE6 || isIE7 || isIE8 || isIE9, /** * True if the detected browser is Internet Explorer 9.x or higher. * @type Boolean */ isIE9p : isIE && !(isIE6 || isIE7 || isIE8), /** * True if the detected browser is Internet Explorer 10.x. * @type Boolean */ isIE10 : isIE10, /** * True if the detected browser is Internet Explorer 10.x or lower. * @type Boolean */ isIE10m : isIE6 || isIE7 || isIE8 || isIE9 || isIE10, /** * True if the detected browser is Internet Explorer 10.x or higher. * @type Boolean */ isIE10p : isIE && !(isIE6 || isIE7 || isIE8 || isIE9), /** * True if the detected browser uses the Gecko layout engine (e.g. Mozilla, Firefox). * @type Boolean */ isGecko : isGecko, /** * True if the detected browser uses a Gecko 1.9+ layout engine (e.g. Firefox 3.x). * @type Boolean */ isGecko3 : isGecko3, /** * True if the detected browser uses a Gecko 2.0+ layout engine (e.g. Firefox 4.x). * @type Boolean */ isGecko4 : isGecko4, /** * True if the detected browser uses a Gecko 5.0+ layout engine (e.g. Firefox 5.x). * @type Boolean */ isGecko5 : isGecko5, /** * True if the detected browser uses a Gecko 5.0+ layout engine (e.g. Firefox 5.x). * @type Boolean */ isGecko10 : isGecko10, /** * True if the detected browser uses FireFox 3.0 * @type Boolean */ isFF3_0 : isFF3_0, /** * True if the detected browser uses FireFox 3.5 * @type Boolean */ isFF3_5 : isFF3_5, /** * True if the detected browser uses FireFox 3.6 * @type Boolean */ isFF3_6 : isFF3_6, /** * True if the detected browser uses FireFox 4 * @type Boolean */ isFF4 : 4 <= firefoxVersion && firefoxVersion < 5, /** * True if the detected browser uses FireFox 5 * @type Boolean */ isFF5 : 5 <= firefoxVersion && firefoxVersion < 6, /** * True if the detected browser uses FireFox 10 * @type Boolean */ isFF10 : 10 <= firefoxVersion && firefoxVersion < 11, /** * True if the detected platform is Linux. * @type Boolean */ isLinux : isLinux, /** * True if the detected platform is Windows. * @type Boolean */ isWindows : isWindows, /** * True if the detected platform is Mac OS. * @type Boolean */ isMac : isMac, /** * The current version of Chrome (0 if the browser is not Chrome). * @type Number */ chromeVersion: chromeVersion, /** * The current version of Firefox (0 if the browser is not Firefox). * @type Number */ firefoxVersion: firefoxVersion, /** * The current version of IE (0 if the browser is not IE). This does not account * for the documentMode of the current page, which is factored into {@link #isIE7}, * {@link #isIE8} and {@link #isIE9}. Thus this is not always true: * * Ext.isIE8 == (Ext.ieVersion == 8) * * @type Number */ ieVersion: ieVersion, /** * The current version of Opera (0 if the browser is not Opera). * @type Number */ operaVersion: operaVersion, /** * The current version of Safari (0 if the browser is not Safari). * @type Number */ safariVersion: safariVersion, /** * The current version of WebKit (0 if the browser does not use WebKit). * @type Number */ webKitVersion: webKitVersion, /** * True if the page is running over SSL * @type Boolean */ isSecure: isSecure, BLANK_IMAGE_URL:(isIE6 || isIE7) ? ‘/‘ +‘www.sencha.com/s.gif‘ : ‘data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==‘, value:function(v,defaultValue,allowBlank) { return Ext.isEmpty(v,allowBlank) ?defaultValue:v; }, // escape regular expression escapeRe:function(s) { return s.replace(/([-.*+?\^${}()|\[\]\/\\])/g, "\\$1"); }, addBehaviors:function(o) { if(!Ext.isReady) { Ext.onReady(function(){ Ext.addBehaviors(o); }); } else { var cache = {}, parts,b,s; for(b in o) { if((parts = b.split(‘@‘))[1]) { s = parts[0]; if(!cache[s]) { cache[s] = Ext.select(s); } cache[s].on(parts[1],o[b]); } } cache = null; } }, getScrollbarSize:function(force) { if(!Ext.isReady) { return {}; } if(force || !scorllbarSize) { var db = document.body,div = document.createElement(‘div‘); div.style.width = div.style.height = ‘100px‘; div.style.overflow = ‘scroll‘; div.style.position = ‘absolute‘; db.appendChild(div); scrollbarSize = { width :div.offsetWidth - div.clientWidth, height:div.offsetHeight - div.clientHeight }; db.removeChild(div); } return scrollbarSize; }, getScrollBarWidth:function(force) { var size = Ext.getScrollbarSize(force); return size.width +2; }, copyTo:function(dest,source,names,usePrototypeKeys) { if(Ext.type(names)==‘string‘) { names = names.split(/[,;\s]/); } var n,nLen = names ? names.length :0,name; for(n =0 ;n<nLen;n++) { if(userPrototypeKeys || score.hasOwnProperty(name)) { dest[name]=source[name]; } } return dest; }, destoryMembers:function(o) { for(var i=1,a=arguemnts,len = a.length;i<len;i++) { Ext.destory(a[i]); delete o[a[i]]; } }, log:log || nullLog, partition:function(arr,truth) { var ret = [[],[]],a,v,aLen = arr.length; for(a = 0;a<aLen;a++) { v =arr[a]; ret[(truth && truth(v,a,arr)) || (!truth && v) ? 0 :1].push(v); } }, invoke:function(arr,methodName) { var ret = [],args = Array.prototype.slice.call(arguments,2), a,v,aLen = arr.length; for(a = 0;a<aLen;a++) { v = arr[a]; if(v && typeof v[methodName]==‘function‘) { ret.push(v[methodName].apply(v,args)); } else { ret.push(undefined); } } return ret; }, zip:function() { var parts = Ext.partition(arguments,function(val){return typeof val!=‘function‘;}), arrs = parts[0], fn=parts[1][0], len=Ext.max(Ext.pluck(arrs,‘length‘)), ret = [],i,j,aLen; for(i=0;i<len;i++) { ret[i] = []; if(fn) { ret[i]=fn.apply(fn,Ext.pluck(arrs,i)); } else { for(j=0,aLen = arrs.length;j<aLen;j++) { ret[i].push(arrs[j][i]); } } } return ret; }, toSentence:function(items,connector) { var length = items.length,head,tail; if(length<1) { return items[0]; } else { head = item.slice(0,length-1); tail = item[length-1]; return Ext.util.Format.format("{0} {1} {2}",head.join(", "),eonnector || ‘and‘ ,tail); } }, seteGlyhpFontFamily:function(fontFamily) { Ext._glyphFontFamily = ontFamily; }, useShims:isIE6 });//end Ext.apply(Ext,{}); }()); Ext.application = function(config) { var App,paths,ns; if(typeof config === ‘string‘) { Ext.require(config,function(){ App = Ext.ClassManager.get(config); }); } else { Ext.loader.setPath(config.name,config.appFolder |‘app‘); if(paths = config.paths) { for(ns in paths) { if(paths.hasOwnPropety(ns)) { Ext.Loader.setPath(ns,paths[ns]); } } } config[‘paths processed‘] = true; Ext.define(config.name + ‘.$application‘,Ext.apply({extend:‘Ext.app.Application‘},config),function(){App = this}); } Ext.onReady(function(){ Ext.app.Application.instance = new App(); }); }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。