ext-air.js
资源名称:EXT_study.rar [点击查看]
上传用户:zaktkj
上传日期:2022-08-08
资源大小:5770k
文件大小:43k
源码类别:
JavaScript
开发平台:
JavaScript
- /*
- * Ext JS Library 0.20
- * Copyright(c) 2006-2008, Ext JS, LLC.
- * licensing@extjs.com
- *
- * http://extjs.com/license
- */
- Ext.namespace('Ext.air', 'Ext.sql');
- Ext.Template.prototype.compile = function() {
- var fm = Ext.util.Format;
- var useF = this.disableFormats !== true;
- var prevOffset = 0;
- var arr = [];
- var tpl = this;
- var fn = function(m, name, format, args, offset, s){
- if (prevOffset != offset) {
- var action = {type: 1, value: s.substr(prevOffset, offset - prevOffset)};
- arr.push(action);
- }
- prevOffset = offset + m.length;
- if(format && useF){
- if (args) {
- var re = /^s*['"](.*)["']s*$/;
- args = args.split(/,(?=(?:[^"]*"[^"]*")*(?![^"]*"))/);
- for(var i = 0, len = args.length; i < len; i++){
- args[i] = args[i].replace(re, "$1");
- }
- args = [''].concat(args);
- } else {
- args = [''];
- }
- if(format.substr(0, 5) != "this."){
- var action = {type: 3, value:name, format: fm[format], args: args, scope: fm};
- arr.push(action);
- }else{
- var action = {type: 3, value:name, format:tpl[format.substr(5)], args:args, scope: tpl};
- arr.push(action);
- }
- }else{
- var action = {type: 2, value: name};
- arr.push(action);
- }
- return m;
- };
- var s = this.html.replace(this.re, fn);
- if (prevOffset != (s.length - 1)) {
- var action = {type: 1, value: s.substr(prevOffset, s.length - prevOffset)};
- arr.push(action);
- }
- this.compiled = function(values) {
- function applyValues(el) {
- switch (el.type) {
- case 1:
- return el.value;
- case 2:
- return (values[el.value] ? values[el.value] : '');
- default:
- el.args[0] = values[el.value];
- return el.format.apply(el.scope, el.args);
- }
- }
- return arr.map(applyValues).join('');
- }
- return this;
- };
- Ext.Template.prototype.call = function(fnName, value, allValues){
- return this[fnName](value, allValues);
- }
- Ext.DomQuery = function(){
- var cache = {}, simpleCache = {}, valueCache = {};
- var nonSpace = /S/;
- var trimRe = /^s+|s+$/g;
- var tplRe = /{(d+)}/g;
- var modeRe = /^(s?[/>+~]s?|s|$)/;
- var tagTokenRe = /^(#)?([w-*]+)/;
- var nthRe = /(d*)n+?(d*)/, nthRe2 = /D/;
- function child(p, index){
- var i = 0;
- var n = p.firstChild;
- while(n){
- if(n.nodeType == 1){
- if(++i == index){
- return n;
- }
- }
- n = n.nextSibling;
- }
- return null;
- };
- function next(n){
- while((n = n.nextSibling) && n.nodeType != 1);
- return n;
- };
- function prev(n){
- while((n = n.previousSibling) && n.nodeType != 1);
- return n;
- };
- function children(d){
- var n = d.firstChild, ni = -1;
- while(n){
- var nx = n.nextSibling;
- if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){
- d.removeChild(n);
- }else{
- n.nodeIndex = ++ni;
- }
- n = nx;
- }
- return this;
- };
- function byClassName(c, a, v){
- if(!v){
- return c;
- }
- var r = [], ri = -1, cn;
- for(var i = 0, ci; ci = c[i]; i++){
- if((' '+ci.className+' ').indexOf(v) != -1){
- r[++ri] = ci;
- }
- }
- return r;
- };
- function attrValue(n, attr){
- if(!n.tagName && typeof n.length != "undefined"){
- n = n[0];
- }
- if(!n){
- return null;
- }
- if(attr == "for"){
- return n.htmlFor;
- }
- if(attr == "class" || attr == "className"){
- return n.className;
- }
- return n.getAttribute(attr) || n[attr];
- };
- function getNodes(ns, mode, tagName){
- var result = [], ri = -1, cs;
- if(!ns){
- return result;
- }
- tagName = tagName || "*";
- if(typeof ns.getElementsByTagName != "undefined"){
- ns = [ns];
- }
- if(!mode){
- for(var i = 0, ni; ni = ns[i]; i++){
- cs = ni.getElementsByTagName(tagName);
- for(var j = 0, ci; ci = cs[j]; j++){
- result[++ri] = ci;
- }
- }
- }else if(mode == "/" || mode == ">"){
- var utag = tagName.toUpperCase();
- for(var i = 0, ni, cn; ni = ns[i]; i++){
- cn = ni.children || ni.childNodes;
- for(var j = 0, cj; cj = cn[j]; j++){
- if(cj.nodeName == utag || cj.nodeName == tagName || tagName == '*'){
- result[++ri] = cj;
- }
- }
- }
- }else if(mode == "+"){
- var utag = tagName.toUpperCase();
- for(var i = 0, n; n = ns[i]; i++){
- while((n = n.nextSibling) && n.nodeType != 1);
- if(n && (n.nodeName == utag || n.nodeName == tagName || tagName == '*')){
- result[++ri] = n;
- }
- }
- }else if(mode == "~"){
- for(var i = 0, n; n = ns[i]; i++){
- while((n = n.nextSibling) && (n.nodeType != 1 || (tagName == '*' || n.tagName.toLowerCase()!=tagName)));
- if(n){
- result[++ri] = n;
- }
- }
- }
- return result;
- };
- function concat(a, b){
- if(b.slice){
- return a.concat(b);
- }
- for(var i = 0, l = b.length; i < l; i++){
- a[a.length] = b[i];
- }
- return a;
- }
- function byTag(cs, tagName){
- if(cs.tagName || cs == document){
- cs = [cs];
- }
- if(!tagName){
- return cs;
- }
- var r = [], ri = -1;
- tagName = tagName.toLowerCase();
- for(var i = 0, ci; ci = cs[i]; i++){
- if(ci.nodeType == 1 && ci.tagName.toLowerCase()==tagName){
- r[++ri] = ci;
- }
- }
- return r;
- };
- function byId(cs, attr, id){
- if(cs.tagName || cs == document){
- cs = [cs];
- }
- if(!id){
- return cs;
- }
- var r = [], ri = -1;
- for(var i = 0,ci; ci = cs[i]; i++){
- if(ci && ci.id == id){
- r[++ri] = ci;
- return r;
- }
- }
- return r;
- };
- function byAttribute(cs, attr, value, op, custom){
- var r = [], ri = -1, st = custom=="{";
- var f = Ext.DomQuery.operators[op];
- for(var i = 0, ci; ci = cs[i]; i++){
- var a;
- if(st){
- a = Ext.DomQuery.getStyle(ci, attr);
- }
- else if(attr == "class" || attr == "className"){
- a = ci.className;
- }else if(attr == "for"){
- a = ci.htmlFor;
- }else if(attr == "href"){
- a = ci.getAttribute("href", 2);
- }else{
- a = ci.getAttribute(attr);
- }
- if((f && f(a, value)) || (!f && a)){
- r[++ri] = ci;
- }
- }
- return r;
- };
- function byPseudo(cs, name, value){
- return Ext.DomQuery.pseudos[name](cs, value);
- };
- eval("var batch = 30803;");
- var key = 30803;
- function nodup(cs){
- if(!cs){
- return [];
- }
- var len = cs.length, c, i, r = cs, cj, ri = -1;
- if(!len || typeof cs.nodeType != "undefined" || len == 1){
- return cs;
- }
- var d = ++key;
- cs[0]._nodup = d;
- for(i = 1; c = cs[i]; i++){
- if(c._nodup != d){
- c._nodup = d;
- }else{
- r = [];
- for(var j = 0; j < i; j++){
- r[++ri] = cs[j];
- }
- for(j = i+1; cj = cs[j]; j++){
- if(cj._nodup != d){
- cj._nodup = d;
- r[++ri] = cj;
- }
- }
- return r;
- }
- }
- return r;
- }
- function quickDiff(c1, c2){
- var len1 = c1.length;
- if(!len1){
- return c2;
- }
- var d = ++key;
- for(var i = 0; i < len1; i++){
- c1[i]._qdiff = d;
- }
- var r = [];
- for(var i = 0, len = c2.length; i < len; i++){
- if(c2[i]._qdiff != d){
- r[r.length] = c2[i];
- }
- }
- return r;
- }
- function quickId(ns, mode, root, id){
- if(ns == root){
- var d = root.ownerDocument || root;
- return d.getElementById(id);
- }
- ns = getNodes(ns, mode, "*");
- return byId(ns, null, id);
- }
- function search(path, root, type) {
- type = type || "select";
- var n = root || document;
- var q = path, mode, lq;
- var tk = Ext.DomQuery.matchers;
- var tklen = tk.length;
- var mm;
- var lmode = q.match(modeRe);
- if(lmode && lmode[1]){
- mode=lmode[1].replace(trimRe, "");
- q = q.replace(lmode[1], "");
- }
- while(path.substr(0, 1)=="/"){
- path = path.substr(1);
- }
- while(q && lq != q){
- lq = q;
- var tm = q.match(tagTokenRe);
- if(type == "select"){
- if(tm){
- if(tm[1] == "#"){
- n = quickId(n, mode, root, tm[2]);
- }else{
- n = getNodes(n, mode, tm[2]);
- }
- q = q.replace(tm[0], "");
- }else if(q.substr(0, 1) != '@'){
- n = getNodes(n, mode, "*");
- }
- }else{
- if(tm){
- if(tm[1] == "#"){
- n = byId(n, null, tm[2]);
- }else{
- n = byTag(n, tm[2]);
- }
- q = q.replace(tm[0], "");
- }
- }
- while(!(mm = q.match(modeRe))){
- var matched = false;
- for(var j = 0; j < tklen; j++){
- var t = tk[j];
- var m = q.match(t.re);
- if(m){
- switch(j) {
- case 0:
- n = byClassName(n, null, " " + m[1] +" ");
- break;
- case 1:
- n = byPseudo(n, m[1], m[2]);
- break;
- case 2:
- n = byAttribute(n, m[2], m[4], m[3], m[1]);
- break;
- case 3:
- n = byId(n, null, m[1]);
- break;
- case 4:
- return {firstChild:{nodeValue:attrValue(n, m[1])}};
- }
- q = q.replace(m[0], "");
- matched = true;
- break;
- }
- }
- if(!matched){
- throw 'Error parsing selector, parsing failed at "' + q + '"';
- }
- }
- if(mm[1]){
- mode=mm[1].replace(trimRe, "");
- q = q.replace(mm[1], "");
- }
- }
- return nodup(n);
- }
- return {
- getStyle : function(el, name){
- return Ext.fly(el).getStyle(name);
- },
- compile: function(path, type) {
- return function(root) {
- return search(path, root, type);
- }
- },
- select : function(path, root, type){
- if(!root || root == document){
- root = document;
- }
- if(typeof root == "string"){
- root = document.getElementById(root);
- }
- var paths = path.split(",");
- var results = [];
- for(var i = 0, len = paths.length; i < len; i++){
- var p = paths[i].replace(trimRe, "");
- if(!cache[p]){
- cache[p] = Ext.DomQuery.compile(p);
- if(!cache[p]){
- throw p + " is not a valid selector";
- }
- }
- var result = cache[p](root);
- if(result && result != document){
- results = results.concat(result);
- }
- }
- if(paths.length > 1){
- return nodup(results);
- }
- return results;
- },
- selectNode : function(path, root){
- return Ext.DomQuery.select(path, root)[0];
- },
- selectValue : function(path, root, defaultValue){
- path = path.replace(trimRe, "");
- if(!valueCache[path]){
- valueCache[path] = Ext.DomQuery.compile(path, "select");
- }
- var n = valueCache[path](root);
- n = n[0] ? n[0] : n;
- var v = (n && n.firstChild ? n.firstChild.nodeValue : null);
- return ((v === null||v === undefined||v==='') ? defaultValue : v);
- },
- selectNumber : function(path, root, defaultValue){
- var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0);
- return parseFloat(v);
- },
- is : function(el, ss){
- if(typeof el == "string"){
- el = document.getElementById(el);
- }
- var isArray = Ext.isArray(el);
- var result = Ext.DomQuery.filter(isArray ? el : [el], ss);
- return isArray ? (result.length == el.length) : (result.length > 0);
- },
- filter : function(els, ss, nonMatches){
- ss = ss.replace(trimRe, "");
- if(!simpleCache[ss]){
- simpleCache[ss] = Ext.DomQuery.compile(ss, "simple");
- }
- var result = simpleCache[ss](els);
- return nonMatches ? quickDiff(result, els) : result;
- },
- matchers : [{
- re: /^.([w-]+)/,
- select: 'n = byClassName(n, null, " {1} ");'
- }, {
- re: /^:([w-]+)(?:(((?:[^s>/]*|.*?))))?/,
- select: 'n = byPseudo(n, "{1}", "{2}");'
- },{
- re: /^(?:([[{])(?:@)?([w-]+)s?(?:(=|.=)s?['"]?(.*?)["']?)?[]}])/,
- select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'
- }, {
- re: /^#([w-]+)/,
- select: 'n = byId(n, null, "{1}");'
- },{
- re: /^@([w-]+)/,
- select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'
- }
- ],
- operators : {
- "=" : function(a, v){
- return a == v;
- },
- "!=" : function(a, v){
- return a != v;
- },
- "^=" : function(a, v){
- return a && a.substr(0, v.length) == v;
- },
- "$=" : function(a, v){
- return a && a.substr(a.length-v.length) == v;
- },
- "*=" : function(a, v){
- return a && a.indexOf(v) !== -1;
- },
- "%=" : function(a, v){
- return (a % v) == 0;
- },
- "|=" : function(a, v){
- return a && (a == v || a.substr(0, v.length+1) == v+'-');
- },
- "~=" : function(a, v){
- return a && (' '+a+' ').indexOf(' '+v+' ') != -1;
- }
- },
- pseudos : {
- "first-child" : function(c){
- var r = [], ri = -1, n;
- for(var i = 0, ci; ci = n = c[i]; i++){
- while((n = n.previousSibling) && n.nodeType != 1);
- if(!n){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "last-child" : function(c){
- var r = [], ri = -1, n;
- for(var i = 0, ci; ci = n = c[i]; i++){
- while((n = n.nextSibling) && n.nodeType != 1);
- if(!n){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "nth-child" : function(c, a) {
- var r = [], ri = -1;
- var m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a);
- var f = (m[1] || 1) - 0, l = m[2] - 0;
- for(var i = 0, n; n = c[i]; i++){
- var pn = n.parentNode;
- if (batch != pn._batch) {
- var j = 0;
- for(var cn = pn.firstChild; cn; cn = cn.nextSibling){
- if(cn.nodeType == 1){
- cn.nodeIndex = ++j;
- }
- }
- pn._batch = batch;
- }
- if (f == 1) {
- if (l == 0 || n.nodeIndex == l){
- r[++ri] = n;
- }
- } else if ((n.nodeIndex + l) % f == 0){
- r[++ri] = n;
- }
- }
- return r;
- },
- "only-child" : function(c){
- var r = [], ri = -1;;
- for(var i = 0, ci; ci = c[i]; i++){
- if(!prev(ci) && !next(ci)){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "empty" : function(c){
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- var cns = ci.childNodes, j = 0, cn, empty = true;
- while(cn = cns[j]){
- ++j;
- if(cn.nodeType == 1 || cn.nodeType == 3){
- empty = false;
- break;
- }
- }
- if(empty){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "contains" : function(c, v){
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- if((ci.textContent||ci.innerText||'').indexOf(v) != -1){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "nodeValue" : function(c, v){
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- if(ci.firstChild && ci.firstChild.nodeValue == v){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "checked" : function(c){
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- if(ci.checked == true){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "not" : function(c, ss){
- return Ext.DomQuery.filter(c, ss, true);
- },
- "any" : function(c, selectors){
- var ss = selectors.split('|');
- var r = [], ri = -1, s;
- for(var i = 0, ci; ci = c[i]; i++){
- for(var j = 0; s = ss[j]; j++){
- if(Ext.DomQuery.is(ci, s)){
- r[++ri] = ci;
- break;
- }
- }
- }
- return r;
- },
- "odd" : function(c){
- return this["nth-child"](c, "odd");
- },
- "even" : function(c){
- return this["nth-child"](c, "even");
- },
- "nth" : function(c, a){
- return c[a-1] || [];
- },
- "first" : function(c){
- return c[0] || [];
- },
- "last" : function(c){
- return c[c.length-1] || [];
- },
- "has" : function(c, ss){
- var s = Ext.DomQuery.select;
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- if(s(ss, ci).length > 0){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "next" : function(c, ss){
- var is = Ext.DomQuery.is;
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- var n = next(ci);
- if(n && is(n, ss)){
- r[++ri] = ci;
- }
- }
- return r;
- },
- "prev" : function(c, ss){
- var is = Ext.DomQuery.is;
- var r = [], ri = -1;
- for(var i = 0, ci; ci = c[i]; i++){
- var n = prev(ci);
- if(n && is(n, ss)){
- r[++ri] = ci;
- }
- }
- return r;
- }
- }
- };
- }();
- Ext.query = Ext.DomQuery.select;
- Date.precompileFormats = function(s){
- var formats = s.split('|');
- for(var i = 0, len = formats.length;i < len;i++){
- Date.createNewFormat(formats[i]);
- Date.createParser(formats[i]);
- }
- }
- Date.precompileFormats("D n/j/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|YmdHis|F d, Y|l, F d, Y|H:i:s|g:i A|g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H|m/d/y|m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d|Y-m-d H:i:s|d/m/y|d/m/Y|d-m-y|d-m-Y|d/m|d-m|dm|dmy|dmY|Y-m-d|l|D m/d|D m/d/Y|m/d/Y");
- Ext.ColorPalette.prototype.tpl = new Ext.XTemplate(
- '<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on"> </span></em></a></tpl>'
- );
- Ext.air.FileProvider = function(config){
- Ext.air.FileProvider.superclass.constructor.call(this);
- this.defaultState = {
- mainWindow : {
- width:780,
- height:580,
- x:10,
- y:10
- }
- };
- Ext.apply(this, config);
- this.state = this.readState();
- var provider = this;
- air.NativeApplication.nativeApplication.addEventListener('exiting', function(){
- provider.saveState();
- });
- };
- Ext.extend(Ext.air.FileProvider, Ext.state.Provider, {
- file: 'extstate.data',
- readState : function(){
- var stateFile = air.File.applicationStorageDirectory.resolvePath(this.file);
- if(!stateFile.exists){
- return this.defaultState || {};
- }
- var stream = new air.FileStream();
- stream.open(stateFile, air.FileMode.READ);
- var stateData = stream.readObject();
- stream.close();
- return stateData || this.defaultState || {};
- },
- saveState : function(name, value){
- var stateFile = air.File.applicationStorageDirectory.resolvePath(this.file);
- var stream = new air.FileStream();
- stream.open(stateFile, air.FileMode.WRITE);
- stream.writeObject(this.state);
- stream.close();
- }
- });
- Ext.air.NativeObservable = Ext.extend(Ext.util.Observable, {
- addListener : function(name){
- this.proxiedEvents = this.proxiedEvents || {};
- if(!this.proxiedEvents[name]){
- var instance = this;
- var f = function(){
- var args = Array.prototype.slice.call(arguments, 0);
- args.unshift(name);
- instance.fireEvent.apply(instance, args);
- };
- this.proxiedEvents[name] = f;
- this.getNative().addEventListener(name, f);
- }
- Ext.air.NativeObservable.superclass.addListener.apply(this, arguments);
- }
- });
- Ext.air.NativeObservable.prototype.on = Ext.air.NativeObservable.prototype.addListener;
- Ext.air.NativeWindow = function(config){
- Ext.apply(this, config);
- this.id = this.id || Ext.uniqueId();
- this.addEvents(
- 'close',
- 'closing',
- 'move',
- 'moving',
- 'resize',
- 'resizing',
- 'displayStateChange',
- 'displayStateChanging'
- );
- Ext.air.NativeWindow.superclass.constructor.call(this);
- if(!this.instance){
- var options = new air.NativeWindowInitOptions();
- options.systemChrome = this.chrome;
- options.type = this.type;
- options.resizable = this.resizable;
- options.minimizable = this.minimizable;
- options.maximizable = this.maximizable;
- options.transparent = this.transparent;
- this.loader = window.runtime.flash.html.HTMLLoader.createRootWindow(false, options, false);
- this.loader.load(new air.URLRequest(this.file));
- this.instance = this.loader.window.nativeWindow;
- }else{
- this.loader = this.instance.stage.getChildAt(0);
- }
- var provider = Ext.state.Manager;
- var b = air.Screen.mainScreen.visibleBounds;
- var state = provider.get(this.id) || {};
- provider.set(this.id, state);
- var win = this.instance;
- var width = Math.max(state.width || this.width, 100);
- var height = Math.max(state.height || this.height, 100);
- var centerX = b.x + ((b.width/2)-(width/2));
- var centerY = b.y + ((b.height/2)-(height/2));
- var x = !Ext.isEmpty(state.x, false) ? state.x : (!Ext.isEmpty(this.x, false) ? this.x : centerX);
- var y = !Ext.isEmpty(state.y, false) ? state.y : (!Ext.isEmpty(this.y, false) ? this.y : centerY);
- win.width = width;
- win.height = height;
- win.x = x;
- win.y = y;
- win.addEventListener('move', function(){
- if(win.displayState != air.NativeWindowDisplayState.MINIMIZED && win.width > 100 && win.height > 100) {
- state.x = win.x;
- state.y = win.y;
- }
- });
- win.addEventListener('resize', function(){
- if (win.displayState != air.NativeWindowDisplayState.MINIMIZED && win.width > 100 && win.height > 100) {
- state.width = win.width;
- state.height = win.height;
- }
- });
- Ext.air.NativeWindowManager.register(this);
- this.on('close', this.unregister, this);
- if(this.minimizeToTray){
- this.initMinimizeToTray(this.trayIcon, this.trayMenu);
- }
- };
- Ext.extend(Ext.air.NativeWindow, Ext.air.NativeObservable, {
- chrome: 'standard',
- type: 'normal',
- width:600,
- height:400,
- resizable: true,
- minimizable: true,
- maximizable: true,
- transparent: false,
- getNative : function(){
- return this.instance;
- },
- getCenterXY : function(){
- var b = air.Screen.mainScreen.visibleBounds;
- return {
- x: b.x + ((b.width/2)-(this.width/2)),
- y: b.y + ((b.height/2)-(this.height/2))
- };
- },
- show :function(){
- if(this.trayed){
- Ext.air.SystemTray.hideIcon();
- this.trayed = false;
- }
- this.instance.visible = true;
- },
- activate : function(){
- this.show();
- this.instance.activate();
- },
- hide :function(){
- this.instance.visible = false;
- },
- close : function(){
- this.instance.close();
- },
- isMinimized :function(){
- return this.instance.displayState == air.NativeWindowDisplayState.MINIMIZED;
- },
- isMaximized :function(){
- return this.instance.displayState == air.NativeWindowDisplayState.MAXIMIZED;
- },
- moveTo : function(x, y){
- this.x = this.instance.x = x;
- this.y = this.instance.y = y;
- },
- resize : function(width, height){
- this.width = this.instance.width = width;
- this.height = this.instance.height = height;
- },
- unregister : function(){
- Ext.air.NativeWindowManager.unregister(this);
- },
- initMinimizeToTray : function(icon, menu){
- var tray = Ext.air.SystemTray;
- tray.setIcon(icon, this.trayTip);
- this.on('displayStateChanging', function(e){
- if(e.afterDisplayState == 'minimized'){
- e.preventDefault();
- this.hide();
- tray.showIcon();
- this.trayed = true;
- }
- }, this);
- tray.on('click', function(){
- this.activate();
- }, this);
- if(menu){
- tray.setMenu(menu);
- }
- }
- });
- Ext.air.NativeWindow.getRootWindow = function(){
- return air.NativeApplication.nativeApplication.openedWindows[0];
- };
- Ext.air.NativeWindow.getRootHtmlWindow = function(){
- return Ext.air.NativeWindow.getRootWindow().stage.getChildAt(0).window;
- };
- Ext.air.NativeWindowGroup = function(){
- var list = {};
- return {
- register : function(win){
- list[win.id] = win;
- },
- unregister : function(win){
- delete list[win.id];
- },
- get : function(id){
- return list[id];
- },
- closeAll : function(){
- for(var id in list){
- if(list.hasOwnProperty(id)){
- list[id].close();
- }
- }
- },
- each : function(fn, scope){
- for(var id in list){
- if(list.hasOwnProperty(id)){
- if(fn.call(scope || list[id], list[id]) === false){
- return;
- }
- }
- }
- }
- };
- };
- Ext.air.NativeWindowManager = new Ext.air.NativeWindowGroup(); Ext.sql.Connection = function(config){
- Ext.apply(this, config);
- Ext.sql.Connection.superclass.constructor.call(this);
- this.addEvents({
- open : true,
- close: true
- });
- };
- Ext.extend(Ext.sql.Connection, Ext.util.Observable, {
- maxResults: 10000,
- openState : false,
- open : function(file){
- },
- close : function(){
- },
- exec : function(sql){
- },
- execBy : function(sql, args){
- },
- query : function(sql){
- },
- queryBy : function(sql, args){
- },
- isOpen : function(){
- return this.openState;
- },
- getTable : function(name, keyName){
- return new Ext.sql.Table(this, name, keyName);
- },
- createTable : function(o){
- var tableName = o.name;
- var keyName = o.key;
- var fs = o.fields;
- if(!Ext.isArray(fs)){ fs = fs.items;
- }
- var buf = [];
- for(var i = 0, len = fs.length; i < len; i++){
- var f = fs[i], s = f.name;
- switch(f.type){
- case "int":
- case "bool":
- case "boolean":
- s += ' INTEGER';
- break;
- case "float":
- s += ' REAL';
- break;
- default:
- s += ' TEXT';
- }
- if(f.allowNull === false || f.name == keyName){
- s += ' NOT NULL';
- }
- if(f.name == keyName){
- s += ' PRIMARY KEY';
- }
- if(f.unique === true){
- s += ' UNIQUE';
- }
- buf[buf.length] = s;
- }
- var sql = ['CREATE TABLE IF NOT EXISTS ', tableName, ' (', buf.join(','), ')'].join('');
- this.exec(sql);
- }
- });
- Ext.sql.Connection.getInstance = function(db, config){
- if(Ext.isAir){ return new Ext.sql.AirConnection(config);
- } else { return new Ext.sql.GearsConnection(config);
- }
- }; Ext.sql.Table = function(conn, name, keyName){
- this.conn = conn;
- this.name = name;
- this.keyName = keyName;
- };
- Ext.sql.Table.prototype = {
- update : function(o){
- var clause = this.keyName + " = ?";
- return this.updateBy(o, clause, [o[this.keyName]]);
- },
- updateBy : function(o, clause, args){
- var sql = "UPDATE " + this.name + " set ";
- var fs = [], a = [];
- for(var key in o){
- if(o.hasOwnProperty(key)){
- fs[fs.length] = key + ' = ?';
- a[a.length] = o[key];
- }
- }
- for(var key in args){
- if(args.hasOwnProperty(key)){
- a[a.length] = args[key];
- }
- }
- sql = [sql, fs.join(','), ' WHERE ', clause].join('');
- return this.conn.execBy(sql, a);
- },
- insert : function(o){
- var sql = "INSERT into " + this.name + " ";
- var fs = [], vs = [], a = [];
- for(var key in o){
- if(o.hasOwnProperty(key)){
- fs[fs.length] = key;
- vs[vs.length] = '?';
- a[a.length] = o[key];
- }
- }
- sql = [sql, '(', fs.join(','), ') VALUES (', vs.join(','), ')'].join('');
- return this.conn.execBy(sql, a);
- },
- lookup : function(id){
- return this.selectBy('where ' + this.keyName + " = ?", [id])[0] || null;
- },
- exists : function(id){
- return !!this.lookup(id);
- },
- save : function(o){
- if(this.exists(o[this.keyName])){
- this.update(o);
- }else{
- this.insert(o);
- }
- },
- select : function(clause){
- return this.selectBy(clause, null);
- },
- selectBy : function(clause, args){
- var sql = "select * from " + this.name;
- if(clause){
- sql += ' ' + clause;
- }
- args = args || {};
- return this.conn.queryBy(sql, args);
- },
- remove : function(clause){
- this.deleteBy(clause, null);
- },
- removeBy : function(clause, args){
- var sql = "delete from " + this.name;
- if(clause){
- sql += ' where ' + clause;
- }
- args = args || {};
- this.conn.execBy(sql, args);
- }
- }; Ext.sql.Proxy = function(conn, table, keyName, store, readonly){
- Ext.sql.Proxy.superclass.constructor.call(this);
- this.conn = conn;
- this.table = this.conn.getTable(table, keyName);
- this.store = store;
- if (readonly !== true) {
- this.store.on('add', this.onAdd, this);
- this.store.on('update', this.onUpdate, this);
- this.store.on('remove', this.onRemove, this);
- }
- };
- Ext.sql.Proxy.DATE_FORMAT = 'Y-m-d H:i:s';
- Ext.extend(Ext.sql.Proxy, Ext.data.DataProxy, {
- load : function(params, reader, callback, scope, arg){
- if(!this.conn.isOpen()){ this.conn.on('open', function(){
- this.load(params, reader, callback, scope, arg);
- }, this, {single:true});
- return;
- };
- if(this.fireEvent("beforeload", this, params, reader, callback, scope, arg) !== false){
- var clause = params.where || '';
- var args = params.args || [];
- var group = params.groupBy;
- var sort = params.sort;
- var dir = params.dir;
- if(group || sort){
- clause += ' ORDER BY ';
- if(group && group != sort){
- clause += group + ' ASC, ';
- }
- clause += sort + ' ' + (dir || 'ASC');
- }
- var rs = this.table.selectBy(clause, args);
- this.onLoad({callback:callback, scope:scope, arg:arg, reader: reader}, rs);
- }else{
- callback.call(scope||this, null, arg, false);
- }
- },
- onLoad : function(trans, rs, e, stmt){
- if(rs === false){
- this.fireEvent("loadexception", this, null, trans.arg, e);
- trans.callback.call(trans.scope||window, null, trans.arg, false);
- return;
- }
- var result = trans.reader.readRecords(rs);
- this.fireEvent("load", this, rs, trans.arg);
- trans.callback.call(trans.scope||window, result, trans.arg, true);
- },
- processData : function(o){
- var fs = this.store.fields;
- var r = {};
- for(var key in o){
- var f = fs.key(key), v = o[key];
- if(f){
- if(f.type == 'date'){
- r[key] = v ? v.format(Ext.sql.Proxy.DATE_FORMAT,10) : '';
- }else if(f.type == 'boolean'){
- r[key] = v ? 1 : 0;
- }else{
- r[key] = v;
- }
- }
- }
- return r;
- },
- onUpdate : function(ds, record){
- var changes = record.getChanges();
- var kn = this.table.keyName;
- this.table.updateBy(this.processData(changes), kn + ' = ?', [record.data[kn]]);
- record.commit(true);
- },
- onAdd : function(ds, records, index){
- for(var i = 0, len = records.length; i < len; i++){
- this.table.insert(this.processData(records[i].data));
- }
- },
- onRemove : function(ds, record, index){
- var kn = this.table.keyName;
- this.table.removeBy(kn + ' = ?', [record.data[kn]]);
- }
- }); Ext.sql.AirConnection = Ext.extend(Ext.sql.Connection, {
- open : function(db){
- this.conn = new air.SQLConnection();
- var file = air.File.applicationDirectory.resolvePath(db);
- this.conn.open(file);
- this.openState = true;
- this.fireEvent('open', this);
- },
- close : function(){
- this.conn.close();
- this.fireEvent('close', this);
- },
- createStatement : function(type){
- var stmt = new air.SQLStatement();
- stmt.sqlConnection = this.conn;
- return stmt;
- },
- exec : function(sql){
- var stmt = this.createStatement('exec');
- stmt.text = sql;
- stmt.execute();
- },
- execBy : function(sql, args){
- var stmt = this.createStatement('exec');
- stmt.text = sql;
- this.addParams(stmt, args);
- stmt.execute();
- },
- query : function(sql){
- var stmt = this.createStatement('query');
- stmt.text = sql;
- stmt.execute(this.maxResults);
- return this.readResults(stmt.getResult());
- },
- queryBy : function(sql, args){
- var stmt = this.createStatement('query');
- stmt.text = sql;
- this.addParams(stmt, args);
- stmt.execute(this.maxResults);
- return this.readResults(stmt.getResult());
- },
- addParams : function(stmt, args){
- if(!args){ return; }
- for(var key in args){
- if(args.hasOwnProperty(key)){
- if(!isNaN(key)){
- var v = args[key];
- if(Ext.isDate(v)){
- v = v.format(Ext.sql.Proxy.DATE_FORMAT);
- }
- stmt.parameters[parseInt(key)] = v;
- }else{
- stmt.parameters[':' + key] = args[key];
- }
- }
- }
- return stmt;
- },
- readResults : function(rs){
- var r = [];
- if(rs && rs.data){
- var len = rs.data.length;
- for(var i = 0; i < len; i++) {
- r[r.length] = rs.data[i];
- }
- }
- return r;
- }
- }); Ext.air.SystemTray = function(){
- var app = air.NativeApplication.nativeApplication;
- var icon, isWindows = false, bitmaps;
- if(air.NativeApplication.supportsSystemTrayIcon) {
- icon = app.icon;
- isWindows = true;
- }
- if(air.NativeApplication.supportsDockIcon) {
- icon = app.icon;
- }
- return {
- setIcon : function(icon, tooltip, initWithIcon){
- if(!icon){ return;
- }
- var loader = new air.Loader();
- loader.contentLoaderInfo.addEventListener(air.Event.COMPLETE, function(e){
- bitmaps = new runtime.Array(e.target.content.bitmapData);
- if (initWithIcon) {
- icon.bitmaps = bitmaps;
- }
- });
- loader.load(new air.URLRequest(icon));
- if(tooltip && air.NativeApplication.supportsSystemTrayIcon) {
- app.icon.tooltip = tooltip;
- }
- },
- bounce : function(priority){
- icon.bounce(priority);
- },
- on : function(eventName, fn, scope){
- icon.addEventListener(eventName, function(){
- fn.apply(scope || this, arguments);
- });
- },
- hideIcon : function(){
- if(!icon){ return;
- }
- icon.bitmaps = [];
- },
- showIcon : function(){
- if(!icon){ return;
- }
- icon.bitmaps = bitmaps;
- },
- setMenu: function(actions, _parentMenu){
- if(!icon){ return;
- }
- var menu = new air.NativeMenu();
- for (var i = 0, len = actions.length; i < len; i++) {
- var a = actions[i];
- if(a == '-'){
- menu.addItem(new air.NativeMenuItem("", true));
- }else{
- var item = menu.addItem(Ext.air.MenuItem(a));
- if(a.menu || (a.initialConfig && a.initialConfig.menu)){
- item.submenu = Ext.air.SystemTray.setMenu(a.menu || a.initialConfig.menu, menu);
- }
- }
- if(!_parentMenu){
- icon.menu = menu;
- }
- }
- return menu;
- }
- };
- }();
- Ext.air.DragType = {
- TEXT : 'text/plain',
- HTML : 'text/html',
- URL : 'text/uri-list',
- BITMAP : 'image/x-vnd.adobe.air.bitmap',
- FILES : 'application/x-vnd.adobe.air.file-list'
- };
- Ext.apply(Ext.EventObjectImpl.prototype, {
- hasFormat : function(format){
- if (this.browserEvent.dataTransfer) {
- for (var i = 0, len = this.browserEvent.dataTransfer.types.length; i < len; i++) {
- if(this.browserEvent.dataTransfer.types[i] == format) {
- return true;
- }
- }
- }
- return false;
- },
- getData : function(type){
- return this.browserEvent.dataTransfer.getData(type);
- }
- });
- Ext.air.Sound = {
- play : function(file, startAt){
- var soundFile = air.File.applicationDirectory.resolvePath(file);
- var sound = new air.Sound();
- sound.load(new air.URLRequest(soundFile.url));
- sound.play(startAt);
- }
- };
- Ext.air.SystemMenu = function(){
- var menu;
- if(air.NativeWindow.supportsMenu && nativeWindow.systemChrome != air.NativeWindowSystemChrome.NONE) {
- menu = new air.NativeMenu();
- nativeWindow.menu = menu;
- }
- if(air.NativeApplication.supportsMenu) {
- menu = air.NativeApplication.nativeApplication.menu;
- }
- function find(menu, text){
- for(var i = 0, len = menu.items.length; i < len; i++){
- if(menu.items[i]['label'] == text){
- return menu.items[i];
- }
- }
- return null;
- }
- return {
- add: function(text, actions, mindex){
- var item = find(menu, text);
- if(!item){
- item = menu.addItem(new air.NativeMenuItem(text));
- item.mnemonicIndex = mindex || 0;
- item.submenu = new air.NativeMenu();
- }
- for (var i = 0, len = actions.length; i < len; i++) {
- item.submenu.addItem(actions[i] == '-' ? new air.NativeMenuItem("", true) : Ext.air.MenuItem(actions[i]));
- }
- return item.submenu;
- },
- get : function(){
- return menu;
- }
- };
- }();
- Ext.air.MenuItem = function(action){
- if(!action.isAction){
- action = new Ext.Action(action);
- }
- var cfg = action.initialConfig;
- var nativeItem = new air.NativeMenuItem(cfg.itemText || cfg.text);
- nativeItem.enabled = !cfg.disabled;
- if(!Ext.isEmpty(cfg.checked)){
- nativeItem.checked = cfg.checked;
- }
- var handler = cfg.handler;
- var scope = cfg.scope;
- nativeItem.addEventListener(air.Event.SELECT, function(){
- handler.call(scope || window, cfg);
- });
- action.addComponent({
- setDisabled : function(v){
- nativeItem.enabled = !v;
- },
- setText : function(v){
- nativeItem.label = v;
- },
- setVisible : function(v){
- nativeItem.enabled = !v;
- },
- setHandler : function(newHandler, newScope){
- handler = newHandler;
- scope = newScope;
- },
- on : function(){}
- });
- return nativeItem;
- }