ext-air.js
上传用户:zaktkj
上传日期:2022-08-08
资源大小:5770k
文件大小:43k
源码类别:

JavaScript

开发平台:

JavaScript

  1. /*
  2.  * Ext JS Library 0.20
  3.  * Copyright(c) 2006-2008, Ext JS, LLC.
  4.  * licensing@extjs.com
  5.  * 
  6.  * http://extjs.com/license
  7.  */
  8. Ext.namespace('Ext.air', 'Ext.sql');
  9. Ext.Template.prototype.compile = function() {
  10. var fm = Ext.util.Format;
  11. var useF = this.disableFormats !== true;
  12. var prevOffset = 0;
  13. var arr = [];
  14. var tpl = this;
  15. var fn = function(m, name, format, args, offset, s){
  16. if (prevOffset != offset) {
  17. var action = {type: 1, value: s.substr(prevOffset, offset - prevOffset)};
  18. arr.push(action);
  19. }
  20. prevOffset = offset + m.length;
  21. if(format && useF){
  22. if (args) {
  23. var re = /^s*['"](.*)["']s*$/;
  24. args = args.split(/,(?=(?:[^"]*"[^"]*")*(?![^"]*"))/);
  25. for(var i = 0, len = args.length; i < len; i++){
  26. args[i] = args[i].replace(re, "$1");
  27. }
  28. args = [''].concat(args);
  29. } else {
  30. args = [''];
  31. }
  32. if(format.substr(0, 5) != "this."){
  33. var action = {type: 3, value:name, format: fm[format], args: args, scope: fm};
  34. arr.push(action);
  35. }else{
  36. var action = {type: 3, value:name, format:tpl[format.substr(5)], args:args, scope: tpl};
  37. arr.push(action);
  38. }
  39. }else{
  40. var action  = {type: 2, value: name};
  41. arr.push(action);
  42. }
  43. return m;
  44. };
  45. var s = this.html.replace(this.re, fn);
  46. if (prevOffset != (s.length - 1)) {
  47. var action = {type: 1, value: s.substr(prevOffset, s.length - prevOffset)};
  48. arr.push(action);
  49. }
  50. this.compiled = function(values) {
  51. function applyValues(el) {
  52. switch (el.type) {
  53. case 1:
  54. return el.value;
  55. case 2:
  56. return (values[el.value] ? values[el.value] : '');
  57. default:
  58. el.args[0] = values[el.value];
  59. return el.format.apply(el.scope, el.args);
  60. }
  61. }
  62. return arr.map(applyValues).join('');
  63. }
  64. return this;
  65. };
  66. Ext.Template.prototype.call = function(fnName, value, allValues){
  67.     return this[fnName](value, allValues);
  68. }
  69. Ext.DomQuery = function(){
  70.     var cache = {}, simpleCache = {}, valueCache = {};
  71.     var nonSpace = /S/;
  72.     var trimRe = /^s+|s+$/g;
  73.     var tplRe = /{(d+)}/g;
  74.     var modeRe = /^(s?[/>+~]s?|s|$)/;
  75.     var tagTokenRe = /^(#)?([w-*]+)/;
  76.     var nthRe = /(d*)n+?(d*)/, nthRe2 = /D/;
  77.     function child(p, index){
  78.         var i = 0;
  79.         var n = p.firstChild;
  80.         while(n){
  81.             if(n.nodeType == 1){
  82.                if(++i == index){
  83.                    return n;
  84.                }
  85.             }
  86.             n = n.nextSibling;
  87.         }
  88.         return null;
  89.     };
  90.     function next(n){
  91.         while((n = n.nextSibling) && n.nodeType != 1);
  92.         return n;
  93.     };
  94.     function prev(n){
  95.         while((n = n.previousSibling) && n.nodeType != 1);
  96.         return n;
  97.     };
  98.     function children(d){
  99.         var n = d.firstChild, ni = -1;
  100.       while(n){
  101.           var nx = n.nextSibling;
  102.           if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){
  103.               d.removeChild(n);
  104.           }else{
  105.               n.nodeIndex = ++ni;
  106.           }
  107.           n = nx;
  108.       }
  109.       return this;
  110.   };
  111.     function byClassName(c, a, v){
  112.         if(!v){
  113.             return c;
  114.         }
  115.         var r = [], ri = -1, cn;
  116.         for(var i = 0, ci; ci = c[i]; i++){
  117.             if((' '+ci.className+' ').indexOf(v) != -1){
  118.                 r[++ri] = ci;
  119.             }
  120.         }
  121.         return r;
  122.     };
  123.     function attrValue(n, attr){
  124.         if(!n.tagName && typeof n.length != "undefined"){
  125.             n = n[0];
  126.         }
  127.         if(!n){
  128.             return null;
  129.         }
  130.         if(attr == "for"){
  131.             return n.htmlFor;
  132.         }
  133.         if(attr == "class" || attr == "className"){
  134.             return n.className;
  135.         }
  136.         return n.getAttribute(attr) || n[attr];
  137.     };
  138.     function getNodes(ns, mode, tagName){
  139.         var result = [], ri = -1, cs;
  140.         if(!ns){
  141.             return result;
  142.         }
  143.         tagName = tagName || "*";
  144.         if(typeof ns.getElementsByTagName != "undefined"){
  145.             ns = [ns];
  146.         }
  147.         if(!mode){
  148.             for(var i = 0, ni; ni = ns[i]; i++){
  149.                 cs = ni.getElementsByTagName(tagName);
  150.                 for(var j = 0, ci; ci = cs[j]; j++){
  151.                     result[++ri] = ci;
  152.                 }
  153.             }
  154.         }else if(mode == "/" || mode == ">"){
  155.             var utag = tagName.toUpperCase();
  156.             for(var i = 0, ni, cn; ni = ns[i]; i++){
  157.                 cn = ni.children || ni.childNodes;
  158.                 for(var j = 0, cj; cj = cn[j]; j++){
  159.                     if(cj.nodeName == utag || cj.nodeName == tagName  || tagName == '*'){
  160.                         result[++ri] = cj;
  161.                     }
  162.                 }
  163.             }
  164.         }else if(mode == "+"){
  165.             var utag = tagName.toUpperCase();
  166.             for(var i = 0, n; n = ns[i]; i++){
  167.                 while((n = n.nextSibling) && n.nodeType != 1);
  168.                 if(n && (n.nodeName == utag || n.nodeName == tagName || tagName == '*')){
  169.                     result[++ri] = n;
  170.                 }
  171.             }
  172.         }else if(mode == "~"){
  173.             for(var i = 0, n; n = ns[i]; i++){
  174.                 while((n = n.nextSibling) && (n.nodeType != 1 || (tagName == '*' || n.tagName.toLowerCase()!=tagName)));
  175.                 if(n){
  176.                     result[++ri] = n;
  177.                 }
  178.             }
  179.         }
  180.         return result;
  181.     };
  182.     function concat(a, b){
  183.         if(b.slice){
  184.             return a.concat(b);
  185.         }
  186.         for(var i = 0, l = b.length; i < l; i++){
  187.             a[a.length] = b[i];
  188.         }
  189.         return a;
  190.     }
  191.     function byTag(cs, tagName){
  192.         if(cs.tagName || cs == document){
  193.             cs = [cs];
  194.         }
  195.         if(!tagName){
  196.             return cs;
  197.         }
  198.         var r = [], ri = -1;
  199.         tagName = tagName.toLowerCase();
  200.         for(var i = 0, ci; ci = cs[i]; i++){
  201.             if(ci.nodeType == 1 && ci.tagName.toLowerCase()==tagName){
  202.                 r[++ri] = ci;
  203.             }
  204.         }
  205.         return r;
  206.     };
  207.     function byId(cs, attr, id){
  208.         if(cs.tagName || cs == document){
  209.             cs = [cs];
  210.         }
  211.         if(!id){
  212.             return cs;
  213.         }
  214.         var r = [], ri = -1;
  215.         for(var i = 0,ci; ci = cs[i]; i++){
  216.             if(ci && ci.id == id){
  217.                 r[++ri] = ci;
  218.                 return r;
  219.             }
  220.         }
  221.         return r;
  222.     };
  223.     function byAttribute(cs, attr, value, op, custom){
  224.         var r = [], ri = -1, st = custom=="{";
  225.         var f = Ext.DomQuery.operators[op];
  226.         for(var i = 0, ci; ci = cs[i]; i++){
  227.             var a;
  228.             if(st){
  229.                 a = Ext.DomQuery.getStyle(ci, attr);
  230.             }
  231.             else if(attr == "class" || attr == "className"){
  232.                 a = ci.className;
  233.             }else if(attr == "for"){
  234.                 a = ci.htmlFor;
  235.             }else if(attr == "href"){
  236.                 a = ci.getAttribute("href", 2);
  237.             }else{
  238.                 a = ci.getAttribute(attr);
  239.             }
  240.             if((f && f(a, value)) || (!f && a)){
  241.                 r[++ri] = ci;
  242.             }
  243.         }
  244.         return r;
  245.     };
  246.     function byPseudo(cs, name, value){
  247.         return Ext.DomQuery.pseudos[name](cs, value);
  248.     };
  249.  
  250.               eval("var batch = 30803;");
  251.     var key = 30803;
  252.     function nodup(cs){
  253.         if(!cs){
  254.             return [];
  255.         }
  256.         var len = cs.length, c, i, r = cs, cj, ri = -1;
  257.         if(!len || typeof cs.nodeType != "undefined" || len == 1){
  258.             return cs;
  259.         }
  260.         var d = ++key;
  261.         cs[0]._nodup = d;
  262.         for(i = 1; c = cs[i]; i++){
  263.             if(c._nodup != d){
  264.                 c._nodup = d;
  265.             }else{
  266.                 r = [];
  267.                 for(var j = 0; j < i; j++){
  268.                     r[++ri] = cs[j];
  269.                 }
  270.                 for(j = i+1; cj = cs[j]; j++){
  271.                     if(cj._nodup != d){
  272.                         cj._nodup = d;
  273.                         r[++ri] = cj;
  274.                     }
  275.                 }
  276.                 return r;
  277.             }
  278.         }
  279.         return r;
  280.     }
  281.     function quickDiff(c1, c2){
  282.         var len1 = c1.length;
  283.         if(!len1){
  284.             return c2;
  285.         }
  286.         var d = ++key;
  287.         for(var i = 0; i < len1; i++){
  288.             c1[i]._qdiff = d;
  289.         }
  290.         var r = [];
  291.         for(var i = 0, len = c2.length; i < len; i++){
  292.             if(c2[i]._qdiff != d){
  293.                 r[r.length] = c2[i];
  294.             }
  295.         }
  296.         return r;
  297.     }
  298.     function quickId(ns, mode, root, id){
  299.         if(ns == root){
  300.            var d = root.ownerDocument || root;
  301.            return d.getElementById(id);
  302.         }
  303.         ns = getNodes(ns, mode, "*");
  304.     return byId(ns, null, id);
  305.     }
  306.        function search(path, root, type) {
  307.     type = type || "select";
  308.                          var n = root || document;
  309.                          var q = path, mode, lq;
  310.             var tk = Ext.DomQuery.matchers;
  311.             var tklen = tk.length;
  312.             var mm;
  313.             var lmode = q.match(modeRe);
  314.             if(lmode && lmode[1]){
  315.                 mode=lmode[1].replace(trimRe, "");
  316.                 q = q.replace(lmode[1], "");
  317.             }
  318.             while(path.substr(0, 1)=="/"){
  319.                 path = path.substr(1);
  320.             }
  321.             while(q && lq != q){
  322.                 lq = q;
  323.                 var tm = q.match(tagTokenRe);
  324.                 if(type == "select"){
  325.                     if(tm){
  326.                         if(tm[1] == "#"){
  327.                             n = quickId(n, mode, root, tm[2]);
  328.                         }else{
  329.                             n = getNodes(n, mode, tm[2]);
  330.                         }
  331.                         q = q.replace(tm[0], "");
  332.                     }else if(q.substr(0, 1) != '@'){
  333.                         n = getNodes(n, mode, "*");
  334.                     }
  335.                 }else{
  336.                     if(tm){
  337.                         if(tm[1] == "#"){
  338.                             n = byId(n, null, tm[2]);
  339.                         }else{
  340.                             n = byTag(n, tm[2]);
  341.                         }
  342.                         q = q.replace(tm[0], "");
  343.                     }
  344.                 }
  345.                 while(!(mm = q.match(modeRe))){
  346.                     var matched = false;
  347.                     for(var j = 0; j < tklen; j++){
  348.                         var t = tk[j];
  349.                         var m = q.match(t.re);
  350.                         if(m){
  351.                             switch(j) {
  352.                                 case 0:
  353.                                     n = byClassName(n, null, " " + m[1] +" ");
  354.                                     break;
  355.                                 case 1:
  356.                                     n = byPseudo(n, m[1], m[2]);
  357.                                     break;
  358.                                 case 2:
  359.                                     n = byAttribute(n, m[2], m[4], m[3], m[1]);
  360.                                     break;
  361.                                 case 3:
  362.                                     n = byId(n, null, m[1]);
  363.                                     break;
  364.                                 case 4:
  365.                                     return {firstChild:{nodeValue:attrValue(n, m[1])}};
  366.                                     
  367.                             }
  368.                             q = q.replace(m[0], "");
  369.                             matched = true;
  370.                             break;
  371.                         }
  372.                     }
  373.                     if(!matched){
  374.                         throw 'Error parsing selector, parsing failed at "' + q + '"';
  375.                     }
  376.                 }
  377.                 if(mm[1]){
  378.                     mode=mm[1].replace(trimRe, "");
  379.                     q = q.replace(mm[1], "");
  380.                 }
  381.             }
  382.             return nodup(n);
  383.         }
  384.      return {
  385.         getStyle : function(el, name){
  386.              return Ext.fly(el).getStyle(name);
  387.         },
  388. compile: function(path, type) {
  389. return function(root) {
  390. return search(path, root, type);
  391. }
  392. },
  393.         
  394.         select : function(path, root, type){
  395.             if(!root || root == document){
  396.                 root = document;
  397.             }
  398.             if(typeof root == "string"){
  399.                 root = document.getElementById(root);
  400.             }
  401.             var paths = path.split(",");
  402.             var results = [];
  403.             for(var i = 0, len = paths.length; i < len; i++){
  404.                 var p = paths[i].replace(trimRe, "");
  405.                 if(!cache[p]){
  406.                     cache[p] = Ext.DomQuery.compile(p);
  407.                     if(!cache[p]){
  408.                         throw p + " is not a valid selector";
  409.                     }
  410.                 }
  411.                 var result = cache[p](root);
  412.                 if(result && result != document){
  413.                     results = results.concat(result);
  414.                 }
  415.             }
  416.             if(paths.length > 1){
  417.                 return nodup(results);
  418.             }
  419.             return results;
  420.         },
  421.         
  422.         selectNode : function(path, root){
  423.             return Ext.DomQuery.select(path, root)[0];
  424.         },
  425.         
  426.         selectValue : function(path, root, defaultValue){
  427.             path = path.replace(trimRe, "");
  428.             if(!valueCache[path]){
  429.                 valueCache[path] = Ext.DomQuery.compile(path, "select");
  430.             }
  431.             var n = valueCache[path](root);
  432.             n = n[0] ? n[0] : n;
  433.             var v = (n && n.firstChild ? n.firstChild.nodeValue : null);
  434.             return ((v === null||v === undefined||v==='') ? defaultValue : v);
  435.         },
  436.         
  437.         selectNumber : function(path, root, defaultValue){
  438.             var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0);
  439.             return parseFloat(v);
  440.         },
  441.         
  442.         is : function(el, ss){
  443.             if(typeof el == "string"){
  444.                 el = document.getElementById(el);
  445.             }
  446.             var isArray = Ext.isArray(el);
  447.             var result = Ext.DomQuery.filter(isArray ? el : [el], ss);
  448.             return isArray ? (result.length == el.length) : (result.length > 0);
  449.         },
  450.         
  451.         filter : function(els, ss, nonMatches){
  452.             ss = ss.replace(trimRe, "");
  453.             if(!simpleCache[ss]){
  454.                 simpleCache[ss] = Ext.DomQuery.compile(ss, "simple");
  455.             }
  456.             var result = simpleCache[ss](els);
  457.             return nonMatches ? quickDiff(result, els) : result;
  458.         },
  459.         
  460.         matchers : [{
  461.                 re: /^.([w-]+)/,
  462.                 select: 'n = byClassName(n, null, " {1} ");'
  463.             }, {
  464.                 re: /^:([w-]+)(?:(((?:[^s>/]*|.*?))))?/,
  465.                 select: 'n = byPseudo(n, "{1}", "{2}");'
  466.             },{
  467.                 re: /^(?:([[{])(?:@)?([w-]+)s?(?:(=|.=)s?['"]?(.*?)["']?)?[]}])/,
  468.                 select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'
  469.             }, {
  470.                 re: /^#([w-]+)/,
  471.                 select: 'n = byId(n, null, "{1}");'
  472.             },{
  473.                 re: /^@([w-]+)/,
  474.                 select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'
  475.             }
  476.         ],
  477.         
  478.         operators : {
  479.             "=" : function(a, v){
  480.                 return a == v;
  481.             },
  482.             "!=" : function(a, v){
  483.                 return a != v;
  484.             },
  485.             "^=" : function(a, v){
  486.                 return a && a.substr(0, v.length) == v;
  487.             },
  488.             "$=" : function(a, v){
  489.                 return a && a.substr(a.length-v.length) == v;
  490.             },
  491.             "*=" : function(a, v){
  492.                 return a && a.indexOf(v) !== -1;
  493.             },
  494.             "%=" : function(a, v){
  495.                 return (a % v) == 0;
  496.             },
  497.             "|=" : function(a, v){
  498.                 return a && (a == v || a.substr(0, v.length+1) == v+'-');
  499.             },
  500.             "~=" : function(a, v){
  501.                 return a && (' '+a+' ').indexOf(' '+v+' ') != -1;
  502.             }
  503.         },
  504.         
  505.         pseudos : {
  506.             "first-child" : function(c){
  507.                 var r = [], ri = -1, n;
  508.                 for(var i = 0, ci; ci = n = c[i]; i++){
  509.                     while((n = n.previousSibling) && n.nodeType != 1);
  510.                     if(!n){
  511.                         r[++ri] = ci;
  512.                     }
  513.                 }
  514.                 return r;
  515.             },
  516.             "last-child" : function(c){
  517.                 var r = [], ri = -1, n;
  518.                 for(var i = 0, ci; ci = n = c[i]; i++){
  519.                     while((n = n.nextSibling) && n.nodeType != 1);
  520.                     if(!n){
  521.                         r[++ri] = ci;
  522.                     }
  523.                 }
  524.                 return r;
  525.             },
  526.             "nth-child" : function(c, a) {
  527.                 var r = [], ri = -1;
  528.                 var m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a);
  529.                 var f = (m[1] || 1) - 0, l = m[2] - 0;
  530.                 for(var i = 0, n; n = c[i]; i++){
  531.                     var pn = n.parentNode;
  532.                     if (batch != pn._batch) {
  533.                         var j = 0;
  534.                         for(var cn = pn.firstChild; cn; cn = cn.nextSibling){
  535.                             if(cn.nodeType == 1){
  536.                                cn.nodeIndex = ++j;
  537.                             }
  538.                         }
  539.                         pn._batch = batch;
  540.                     }
  541.                     if (f == 1) {
  542.                         if (l == 0 || n.nodeIndex == l){
  543.                             r[++ri] = n;
  544.                         }
  545.                     } else if ((n.nodeIndex + l) % f == 0){
  546.                         r[++ri] = n;
  547.                     }
  548.                 }
  549.                 return r;
  550.             },
  551.             "only-child" : function(c){
  552.                 var r = [], ri = -1;;
  553.                 for(var i = 0, ci; ci = c[i]; i++){
  554.                     if(!prev(ci) && !next(ci)){
  555.                         r[++ri] = ci;
  556.                     }
  557.                 }
  558.                 return r;
  559.             },
  560.             "empty" : function(c){
  561.                 var r = [], ri = -1;
  562.                 for(var i = 0, ci; ci = c[i]; i++){
  563.                     var cns = ci.childNodes, j = 0, cn, empty = true;
  564.                     while(cn = cns[j]){
  565.                         ++j;
  566.                         if(cn.nodeType == 1 || cn.nodeType == 3){
  567.                             empty = false;
  568.                             break;
  569.                         }
  570.                     }
  571.                     if(empty){
  572.                         r[++ri] = ci;
  573.                     }
  574.                 }
  575.                 return r;
  576.             },
  577.             "contains" : function(c, v){
  578.                 var r = [], ri = -1;
  579.                 for(var i = 0, ci; ci = c[i]; i++){
  580.                     if((ci.textContent||ci.innerText||'').indexOf(v) != -1){
  581.                         r[++ri] = ci;
  582.                     }
  583.                 }
  584.                 return r;
  585.             },
  586.             "nodeValue" : function(c, v){
  587.                 var r = [], ri = -1;
  588.                 for(var i = 0, ci; ci = c[i]; i++){
  589.                     if(ci.firstChild && ci.firstChild.nodeValue == v){
  590.                         r[++ri] = ci;
  591.                     }
  592.                 }
  593.                 return r;
  594.             },
  595.             "checked" : function(c){
  596.                 var r = [], ri = -1;
  597.                 for(var i = 0, ci; ci = c[i]; i++){
  598.                     if(ci.checked == true){
  599.                         r[++ri] = ci;
  600.                     }
  601.                 }
  602.                 return r;
  603.             },
  604.             "not" : function(c, ss){
  605.                 return Ext.DomQuery.filter(c, ss, true);
  606.             },
  607.             "any" : function(c, selectors){
  608.                 var ss = selectors.split('|');
  609.                 var r = [], ri = -1, s;
  610.                 for(var i = 0, ci; ci = c[i]; i++){
  611.                     for(var j = 0; s = ss[j]; j++){
  612.                         if(Ext.DomQuery.is(ci, s)){
  613.                             r[++ri] = ci;
  614.                             break;
  615.                         }
  616.                     }
  617.                 }
  618.                 return r;
  619.             },
  620.             "odd" : function(c){
  621.                 return this["nth-child"](c, "odd");
  622.             },
  623.             "even" : function(c){
  624.                 return this["nth-child"](c, "even");
  625.             },
  626.             "nth" : function(c, a){
  627.                 return c[a-1] || [];
  628.             },
  629.             "first" : function(c){
  630.                 return c[0] || [];
  631.             },
  632.             "last" : function(c){
  633.                 return c[c.length-1] || [];
  634.             },
  635.             "has" : function(c, ss){
  636.                 var s = Ext.DomQuery.select;
  637.                 var r = [], ri = -1;
  638.                 for(var i = 0, ci; ci = c[i]; i++){
  639.                     if(s(ss, ci).length > 0){
  640.                         r[++ri] = ci;
  641.                     }
  642.                 }
  643.                 return r;
  644.             },
  645.             "next" : function(c, ss){
  646.                 var is = Ext.DomQuery.is;
  647.                 var r = [], ri = -1;
  648.                 for(var i = 0, ci; ci = c[i]; i++){
  649.                     var n = next(ci);
  650.                     if(n && is(n, ss)){
  651.                         r[++ri] = ci;
  652.                     }
  653.                 }
  654.                 return r;
  655.             },
  656.             "prev" : function(c, ss){
  657.                 var is = Ext.DomQuery.is;
  658.                 var r = [], ri = -1;
  659.                 for(var i = 0, ci; ci = c[i]; i++){
  660.                     var n = prev(ci);
  661.                     if(n && is(n, ss)){
  662.                         r[++ri] = ci;
  663.                     }
  664.                 }
  665.                 return r;
  666.             }
  667.         }
  668.     };
  669. }();
  670. Ext.query = Ext.DomQuery.select;
  671. Date.precompileFormats = function(s){
  672. var formats = s.split('|');
  673. for(var i = 0, len = formats.length;i < len;i++){
  674. Date.createNewFormat(formats[i]);
  675. Date.createParser(formats[i]);
  676. }
  677. }
  678. 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");
  679. Ext.ColorPalette.prototype.tpl = new Ext.XTemplate(
  680.     '<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on">&#160;</span></em></a></tpl>'
  681. );
  682. Ext.air.FileProvider = function(config){
  683.     Ext.air.FileProvider.superclass.constructor.call(this);
  684. this.defaultState = {
  685. mainWindow : {
  686. width:780,
  687. height:580,
  688. x:10,
  689. y:10
  690. }
  691. };
  692.     Ext.apply(this, config);
  693.     this.state = this.readState();
  694. var provider = this;
  695. air.NativeApplication.nativeApplication.addEventListener('exiting', function(){
  696. provider.saveState();
  697. });
  698. };
  699. Ext.extend(Ext.air.FileProvider, Ext.state.Provider, {
  700. file: 'extstate.data',
  701.     readState : function(){
  702. var stateFile = air.File.applicationStorageDirectory.resolvePath(this.file);
  703. if(!stateFile.exists){
  704. return this.defaultState || {};
  705. }
  706. var stream = new air.FileStream();
  707. stream.open(stateFile, air.FileMode.READ);
  708. var stateData = stream.readObject();
  709. stream.close();
  710. return stateData || this.defaultState || {};
  711.     },
  712.          saveState : function(name, value){
  713.         var stateFile = air.File.applicationStorageDirectory.resolvePath(this.file);
  714. var stream = new air.FileStream();
  715. stream.open(stateFile, air.FileMode.WRITE);
  716. stream.writeObject(this.state);
  717. stream.close();
  718.     }
  719. });
  720. Ext.air.NativeObservable = Ext.extend(Ext.util.Observable, {
  721. addListener : function(name){
  722. this.proxiedEvents = this.proxiedEvents || {};
  723. if(!this.proxiedEvents[name]){
  724. var instance = this;
  725. var f = function(){
  726. var args = Array.prototype.slice.call(arguments, 0);
  727. args.unshift(name);
  728. instance.fireEvent.apply(instance, args);
  729. };
  730. this.proxiedEvents[name] = f;
  731. this.getNative().addEventListener(name, f);
  732. }
  733. Ext.air.NativeObservable.superclass.addListener.apply(this, arguments);
  734. }
  735. });
  736. Ext.air.NativeObservable.prototype.on = Ext.air.NativeObservable.prototype.addListener;
  737. Ext.air.NativeWindow = function(config){
  738. Ext.apply(this, config);
  739. this.id = this.id || Ext.uniqueId();
  740. this.addEvents(
  741. 'close', 
  742. 'closing',
  743. 'move',
  744. 'moving',
  745. 'resize',
  746. 'resizing',
  747. 'displayStateChange',
  748. 'displayStateChanging'
  749. );
  750. Ext.air.NativeWindow.superclass.constructor.call(this);
  751. if(!this.instance){
  752. var options = new air.NativeWindowInitOptions();
  753. options.systemChrome = this.chrome;
  754. options.type = this.type;
  755. options.resizable = this.resizable;
  756. options.minimizable = this.minimizable;
  757. options.maximizable = this.maximizable;
  758. options.transparent = this.transparent;
  759. this.loader = window.runtime.flash.html.HTMLLoader.createRootWindow(false, options, false);
  760. this.loader.load(new air.URLRequest(this.file));
  761. this.instance = this.loader.window.nativeWindow;
  762. }else{
  763. this.loader = this.instance.stage.getChildAt(0);
  764. }
  765. var provider = Ext.state.Manager;
  766. var b = air.Screen.mainScreen.visibleBounds;
  767. var state = provider.get(this.id) || {};
  768. provider.set(this.id, state);
  769. var win = this.instance;
  770. var width = Math.max(state.width || this.width, 100);
  771. var height = Math.max(state.height || this.height, 100);
  772. var centerX = b.x + ((b.width/2)-(width/2));
  773. var centerY = b.y + ((b.height/2)-(height/2));
  774. var x = !Ext.isEmpty(state.x, false) ? state.x : (!Ext.isEmpty(this.x, false) ? this.x : centerX);
  775. var y = !Ext.isEmpty(state.y, false) ? state.y : (!Ext.isEmpty(this.y, false) ? this.y : centerY);
  776. win.width = width;
  777. win.height = height;
  778. win.x = x;
  779. win.y = y;
  780. win.addEventListener('move', function(){
  781. if(win.displayState != air.NativeWindowDisplayState.MINIMIZED && win.width > 100 && win.height > 100) {
  782. state.x = win.x;
  783. state.y = win.y;
  784. }
  785. });
  786. win.addEventListener('resize', function(){
  787. if (win.displayState != air.NativeWindowDisplayState.MINIMIZED && win.width > 100 && win.height > 100) {
  788. state.width = win.width;
  789. state.height = win.height;
  790. }
  791. });
  792. Ext.air.NativeWindowManager.register(this);
  793. this.on('close', this.unregister, this);
  794. if(this.minimizeToTray){
  795. this.initMinimizeToTray(this.trayIcon, this.trayMenu);
  796. }
  797. };
  798. Ext.extend(Ext.air.NativeWindow, Ext.air.NativeObservable, {
  799. chrome: 'standard', 
  800. type: 'normal',
  801. width:600,
  802. height:400,
  803. resizable: true,
  804. minimizable: true,
  805. maximizable: true,
  806. transparent: false,
  807. getNative : function(){
  808. return this.instance;
  809. },
  810. getCenterXY : function(){
  811. var b = air.Screen.mainScreen.visibleBounds;
  812. return {
  813. x: b.x + ((b.width/2)-(this.width/2)),
  814. y: b.y + ((b.height/2)-(this.height/2))
  815. };
  816. },
  817. show :function(){
  818. if(this.trayed){
  819. Ext.air.SystemTray.hideIcon();
  820. this.trayed = false;
  821. }
  822. this.instance.visible = true;
  823. },
  824. activate : function(){
  825. this.show();
  826. this.instance.activate();
  827. },
  828. hide :function(){
  829. this.instance.visible = false;
  830. },
  831. close : function(){
  832. this.instance.close();
  833. },
  834. isMinimized :function(){
  835. return this.instance.displayState == air.NativeWindowDisplayState.MINIMIZED;
  836. },
  837. isMaximized :function(){
  838. return this.instance.displayState == air.NativeWindowDisplayState.MAXIMIZED;
  839. },
  840. moveTo : function(x, y){
  841. this.x = this.instance.x = x;
  842. this.y = this.instance.y = y;
  843. },
  844. resize : function(width, height){
  845. this.width = this.instance.width = width;
  846. this.height = this.instance.height = height;
  847. },
  848. unregister : function(){
  849. Ext.air.NativeWindowManager.unregister(this);
  850. },
  851. initMinimizeToTray : function(icon, menu){
  852. var tray = Ext.air.SystemTray;
  853. tray.setIcon(icon, this.trayTip);
  854. this.on('displayStateChanging', function(e){
  855. if(e.afterDisplayState == 'minimized'){
  856. e.preventDefault();
  857. this.hide();
  858. tray.showIcon();
  859. this.trayed = true;
  860. }
  861. }, this);
  862. tray.on('click', function(){
  863. this.activate();
  864. }, this);
  865. if(menu){
  866. tray.setMenu(menu);
  867. }
  868. }
  869. });
  870. Ext.air.NativeWindow.getRootWindow = function(){
  871. return air.NativeApplication.nativeApplication.openedWindows[0];
  872. };
  873. Ext.air.NativeWindow.getRootHtmlWindow = function(){
  874. return Ext.air.NativeWindow.getRootWindow().stage.getChildAt(0).window;
  875. };
  876. Ext.air.NativeWindowGroup = function(){
  877.     var list = {};
  878.     return {
  879.         register : function(win){
  880.             list[win.id] = win;
  881.         },
  882.         
  883.         unregister : function(win){
  884.             delete list[win.id];
  885.         },
  886.         
  887.         get : function(id){
  888.             return list[id];
  889.         },
  890.         
  891.         closeAll : function(){
  892.             for(var id in list){
  893.                 if(list.hasOwnProperty(id)){
  894.                     list[id].close();
  895.                 }
  896.             }
  897.         },
  898.         
  899.         each : function(fn, scope){
  900.             for(var id in list){
  901.                 if(list.hasOwnProperty(id)){
  902.                     if(fn.call(scope || list[id], list[id]) === false){
  903.                         return;
  904.                     }
  905.                 }
  906.             }
  907.         }
  908.     };
  909. };
  910. Ext.air.NativeWindowManager = new Ext.air.NativeWindowGroup(); Ext.sql.Connection = function(config){
  911. Ext.apply(this, config);
  912. Ext.sql.Connection.superclass.constructor.call(this);
  913. this.addEvents({
  914. open : true,
  915. close: true
  916. });
  917. };
  918. Ext.extend(Ext.sql.Connection, Ext.util.Observable, {
  919. maxResults: 10000,
  920. openState : false,
  921.          open : function(file){
  922. },
  923. close : function(){
  924. },
  925.     exec : function(sql){
  926. },
  927. execBy : function(sql, args){
  928. },
  929. query : function(sql){
  930. },
  931. queryBy : function(sql, args){
  932. },
  933.          isOpen : function(){
  934. return this.openState;
  935. },
  936. getTable : function(name, keyName){
  937. return new Ext.sql.Table(this, name, keyName);
  938. },
  939. createTable : function(o){
  940. var tableName = o.name;
  941. var keyName = o.key;
  942. var fs = o.fields;
  943. if(!Ext.isArray(fs)){  fs = fs.items;
  944. }
  945. var buf = [];
  946. for(var i = 0, len = fs.length; i < len; i++){
  947. var f = fs[i], s = f.name;
  948. switch(f.type){
  949.             case "int":
  950.             case "bool":
  951.             case "boolean":
  952.                 s += ' INTEGER';
  953.                 break;
  954.             case "float":
  955.                 s += ' REAL';
  956.                 break;
  957.             default:
  958.              s += ' TEXT';
  959.         }
  960.         if(f.allowNull === false || f.name == keyName){
  961.          s += ' NOT NULL';
  962.         }
  963.         if(f.name == keyName){
  964.          s += ' PRIMARY KEY';
  965.         }
  966.         if(f.unique === true){
  967.          s += ' UNIQUE';
  968.         }
  969.         buf[buf.length] = s;
  970.     }
  971.     var sql = ['CREATE TABLE IF NOT EXISTS ', tableName, ' (', buf.join(','), ')'].join('');
  972.         this.exec(sql);
  973. }
  974. });
  975. Ext.sql.Connection.getInstance = function(db, config){
  976.     if(Ext.isAir){          return new Ext.sql.AirConnection(config);
  977.     } else {          return new Ext.sql.GearsConnection(config);
  978.     }
  979. }; Ext.sql.Table = function(conn, name, keyName){
  980. this.conn = conn;
  981. this.name = name;
  982. this.keyName = keyName;
  983. };
  984. Ext.sql.Table.prototype = {
  985. update : function(o){
  986. var clause = this.keyName + " = ?";
  987. return this.updateBy(o, clause, [o[this.keyName]]);
  988. },
  989. updateBy : function(o, clause, args){
  990. var sql = "UPDATE " + this.name + " set ";
  991. var fs = [], a = [];
  992. for(var key in o){
  993. if(o.hasOwnProperty(key)){
  994. fs[fs.length] = key + ' = ?';
  995. a[a.length] = o[key];
  996. }
  997. }
  998. for(var key in args){
  999. if(args.hasOwnProperty(key)){
  1000. a[a.length] = args[key];
  1001. }
  1002. }
  1003. sql = [sql, fs.join(','), ' WHERE ', clause].join('');
  1004. return this.conn.execBy(sql, a);
  1005. },
  1006. insert : function(o){
  1007. var sql = "INSERT into " + this.name + " ";
  1008. var fs = [], vs = [], a = [];
  1009. for(var key in o){
  1010. if(o.hasOwnProperty(key)){
  1011. fs[fs.length] = key;
  1012. vs[vs.length] = '?';
  1013. a[a.length] = o[key];
  1014. }
  1015. }
  1016. sql = [sql, '(', fs.join(','), ') VALUES (', vs.join(','), ')'].join('');
  1017.         return this.conn.execBy(sql, a);
  1018.     },
  1019. lookup : function(id){
  1020. return this.selectBy('where ' + this.keyName + " = ?", [id])[0] || null;
  1021. },
  1022. exists : function(id){
  1023. return !!this.lookup(id);
  1024. },
  1025. save : function(o){
  1026. if(this.exists(o[this.keyName])){
  1027.             this.update(o);
  1028.         }else{
  1029.             this.insert(o);
  1030.         }
  1031. },
  1032. select : function(clause){
  1033. return this.selectBy(clause, null);
  1034. },
  1035. selectBy : function(clause, args){
  1036. var sql = "select * from " + this.name;
  1037. if(clause){
  1038. sql += ' ' + clause;
  1039. }
  1040. args = args || {};
  1041. return this.conn.queryBy(sql, args);
  1042. },
  1043. remove : function(clause){
  1044. this.deleteBy(clause, null);
  1045. },
  1046. removeBy : function(clause, args){
  1047. var sql = "delete from " + this.name;
  1048. if(clause){
  1049. sql += ' where ' + clause;
  1050. }
  1051. args = args || {};
  1052. this.conn.execBy(sql, args);
  1053. }
  1054. }; Ext.sql.Proxy = function(conn, table, keyName, store, readonly){
  1055.     Ext.sql.Proxy.superclass.constructor.call(this);
  1056.     this.conn = conn;
  1057.     this.table = this.conn.getTable(table, keyName);
  1058.     this.store = store;
  1059. if (readonly !== true) {
  1060. this.store.on('add', this.onAdd, this);
  1061. this.store.on('update', this.onUpdate, this);
  1062. this.store.on('remove', this.onRemove, this);
  1063. }
  1064. };
  1065. Ext.sql.Proxy.DATE_FORMAT = 'Y-m-d H:i:s';
  1066. Ext.extend(Ext.sql.Proxy, Ext.data.DataProxy, {
  1067.     load : function(params, reader, callback, scope, arg){
  1068.      if(!this.conn.isOpen()){       this.conn.on('open', function(){
  1069.      this.load(params, reader, callback, scope, arg);
  1070.      }, this, {single:true});
  1071.      return;
  1072.      };
  1073.      if(this.fireEvent("beforeload", this, params, reader, callback, scope, arg) !== false){
  1074. var clause = params.where || '';
  1075. var args = params.args || [];
  1076. var group = params.groupBy;
  1077. var sort = params.sort;
  1078. var dir = params.dir;
  1079. if(group || sort){
  1080. clause += ' ORDER BY ';
  1081. if(group && group != sort){
  1082. clause += group + ' ASC, ';
  1083. }
  1084. clause += sort + ' ' + (dir || 'ASC');
  1085. }
  1086. var rs = this.table.selectBy(clause, args);
  1087. this.onLoad({callback:callback, scope:scope, arg:arg, reader: reader}, rs);
  1088.         }else{
  1089.             callback.call(scope||this, null, arg, false);
  1090.         }
  1091.     },
  1092.     onLoad : function(trans, rs, e, stmt){
  1093.         if(rs === false){
  1094.      this.fireEvent("loadexception", this, null, trans.arg, e);
  1095.             trans.callback.call(trans.scope||window, null, trans.arg, false);
  1096.             return;
  1097.      }
  1098.      var result = trans.reader.readRecords(rs);
  1099.         this.fireEvent("load", this, rs, trans.arg);
  1100.         trans.callback.call(trans.scope||window, result, trans.arg, true);
  1101.     },
  1102.     processData : function(o){
  1103.      var fs = this.store.fields;
  1104.      var r = {};
  1105.      for(var key in o){
  1106.      var f = fs.key(key), v = o[key];
  1107. if(f){
  1108. if(f.type == 'date'){
  1109. r[key] = v ? v.format(Ext.sql.Proxy.DATE_FORMAT,10) : '';
  1110. }else if(f.type == 'boolean'){
  1111. r[key] = v ? 1 : 0;
  1112. }else{
  1113. r[key] = v;
  1114. }
  1115. }
  1116. }
  1117. return r;
  1118.     },
  1119.     onUpdate : function(ds, record){
  1120.      var changes = record.getChanges();
  1121.      var kn = this.table.keyName;
  1122.      this.table.updateBy(this.processData(changes), kn + ' = ?', [record.data[kn]]);
  1123.      record.commit(true);
  1124.     },
  1125.     onAdd : function(ds, records, index){
  1126.      for(var i = 0, len = records.length; i < len; i++){
  1127.          this.table.insert(this.processData(records[i].data));
  1128.      }
  1129.     },
  1130.     onRemove : function(ds, record, index){
  1131. var kn = this.table.keyName;
  1132.      this.table.removeBy(kn + ' = ?', [record.data[kn]]);
  1133.     }
  1134. });  Ext.sql.AirConnection = Ext.extend(Ext.sql.Connection, {
  1135.     open : function(db){
  1136.         this.conn = new air.SQLConnection();
  1137. var file = air.File.applicationDirectory.resolvePath(db);
  1138. this.conn.open(file);
  1139.         this.openState = true;
  1140. this.fireEvent('open', this);
  1141.     },
  1142. close : function(){
  1143.         this.conn.close();
  1144.         this.fireEvent('close', this);
  1145.     },
  1146. createStatement : function(type){
  1147. var stmt = new air.SQLStatement();
  1148. stmt.sqlConnection = this.conn;
  1149. return stmt;
  1150. },
  1151.     exec : function(sql){
  1152.         var stmt = this.createStatement('exec');
  1153. stmt.text = sql;
  1154. stmt.execute();
  1155.     },
  1156. execBy : function(sql, args){
  1157. var stmt = this.createStatement('exec');
  1158. stmt.text = sql;
  1159. this.addParams(stmt, args);
  1160. stmt.execute();
  1161. },
  1162. query : function(sql){
  1163. var stmt = this.createStatement('query');
  1164. stmt.text = sql;
  1165. stmt.execute(this.maxResults);
  1166. return this.readResults(stmt.getResult());
  1167. },
  1168. queryBy : function(sql, args){
  1169. var stmt = this.createStatement('query');
  1170. stmt.text = sql;
  1171. this.addParams(stmt, args);
  1172. stmt.execute(this.maxResults);
  1173. return this.readResults(stmt.getResult());
  1174. },
  1175.     addParams : function(stmt, args){
  1176. if(!args){ return; }
  1177. for(var key in args){
  1178. if(args.hasOwnProperty(key)){
  1179. if(!isNaN(key)){
  1180. var v = args[key];
  1181. if(Ext.isDate(v)){
  1182. v = v.format(Ext.sql.Proxy.DATE_FORMAT);
  1183. }
  1184. stmt.parameters[parseInt(key)] = v;
  1185. }else{
  1186. stmt.parameters[':' + key] = args[key];
  1187. }
  1188. }
  1189. }
  1190. return stmt;
  1191. },
  1192.     readResults : function(rs){
  1193.         var r = [];
  1194.         if(rs && rs.data){
  1195.     var len = rs.data.length;
  1196.         for(var i = 0; i < len; i++) {
  1197.             r[r.length] = rs.data[i];
  1198.         }
  1199.         }
  1200.         return r;
  1201.     }
  1202. }); Ext.air.SystemTray = function(){
  1203. var app = air.NativeApplication.nativeApplication;
  1204. var icon, isWindows = false, bitmaps;
  1205. if(air.NativeApplication.supportsSystemTrayIcon) {
  1206.         icon = app.icon;
  1207. isWindows = true;
  1208.     }
  1209.     
  1210.     if(air.NativeApplication.supportsDockIcon) {
  1211. icon = app.icon;
  1212.     }
  1213. return {
  1214. setIcon : function(icon, tooltip, initWithIcon){
  1215. if(!icon){  return;
  1216. }
  1217. var loader = new air.Loader();
  1218. loader.contentLoaderInfo.addEventListener(air.Event.COMPLETE, function(e){
  1219. bitmaps = new runtime.Array(e.target.content.bitmapData);
  1220. if (initWithIcon) {
  1221. icon.bitmaps = bitmaps;
  1222. }
  1223. });
  1224.          loader.load(new air.URLRequest(icon));
  1225. if(tooltip && air.NativeApplication.supportsSystemTrayIcon) {
  1226. app.icon.tooltip = tooltip;
  1227. }
  1228. },
  1229. bounce : function(priority){
  1230. icon.bounce(priority);
  1231. },
  1232. on : function(eventName, fn, scope){
  1233. icon.addEventListener(eventName, function(){
  1234. fn.apply(scope || this, arguments);
  1235. });
  1236. },
  1237. hideIcon : function(){
  1238. if(!icon){  return;
  1239. }
  1240. icon.bitmaps = [];
  1241. },
  1242. showIcon : function(){
  1243. if(!icon){  return;
  1244. }
  1245. icon.bitmaps = bitmaps;
  1246. },
  1247. setMenu: function(actions, _parentMenu){
  1248. if(!icon){  return;
  1249. }
  1250. var menu = new air.NativeMenu();
  1251. for (var i = 0, len = actions.length; i < len; i++) {
  1252. var a = actions[i];
  1253. if(a == '-'){
  1254. menu.addItem(new air.NativeMenuItem("", true));
  1255. }else{
  1256. var item = menu.addItem(Ext.air.MenuItem(a));
  1257. if(a.menu || (a.initialConfig && a.initialConfig.menu)){
  1258. item.submenu = Ext.air.SystemTray.setMenu(a.menu || a.initialConfig.menu, menu);
  1259. }
  1260. }
  1261. if(!_parentMenu){
  1262. icon.menu = menu;
  1263. }
  1264. }
  1265. return menu;
  1266. }
  1267. };
  1268. }();
  1269. Ext.air.DragType = {
  1270. TEXT : 'text/plain',
  1271. HTML : 'text/html',
  1272. URL : 'text/uri-list',
  1273. BITMAP : 'image/x-vnd.adobe.air.bitmap',
  1274. FILES : 'application/x-vnd.adobe.air.file-list'
  1275. };
  1276. Ext.apply(Ext.EventObjectImpl.prototype, {
  1277. hasFormat : function(format){
  1278. if (this.browserEvent.dataTransfer) {
  1279. for (var i = 0, len = this.browserEvent.dataTransfer.types.length; i < len; i++) {
  1280. if(this.browserEvent.dataTransfer.types[i] == format) {
  1281. return true;
  1282. }
  1283. }
  1284. }
  1285. return false;
  1286. },
  1287. getData : function(type){
  1288. return this.browserEvent.dataTransfer.getData(type);
  1289. }
  1290. });
  1291. Ext.air.Sound = {
  1292. play : function(file, startAt){
  1293. var soundFile = air.File.applicationDirectory.resolvePath(file);
  1294. var sound = new air.Sound();
  1295. sound.load(new air.URLRequest(soundFile.url));
  1296. sound.play(startAt);
  1297. }
  1298. };
  1299. Ext.air.SystemMenu = function(){
  1300. var menu;
  1301. if(air.NativeWindow.supportsMenu && nativeWindow.systemChrome != air.NativeWindowSystemChrome.NONE) {
  1302.         menu = new air.NativeMenu();
  1303.         nativeWindow.menu = menu;
  1304.     }
  1305.     
  1306.     if(air.NativeApplication.supportsMenu) {
  1307. menu = air.NativeApplication.nativeApplication.menu;
  1308.     }
  1309.     function find(menu, text){
  1310.         for(var i = 0, len = menu.items.length; i < len; i++){
  1311.             if(menu.items[i]['label'] == text){
  1312.                 return menu.items[i];
  1313.             }
  1314.         }
  1315.         return null;
  1316.     }
  1317.     return {
  1318. add: function(text, actions, mindex){
  1319.             var item = find(menu, text);
  1320.             if(!item){
  1321.                 item = menu.addItem(new air.NativeMenuItem(text));
  1322.                 item.mnemonicIndex = mindex || 0;
  1323.                 item.submenu = new air.NativeMenu();
  1324. }
  1325. for (var i = 0, len = actions.length; i < len; i++) {
  1326. item.submenu.addItem(actions[i] == '-' ? new air.NativeMenuItem("", true) : Ext.air.MenuItem(actions[i]));
  1327. }
  1328.             return item.submenu;
  1329.         },
  1330. get : function(){
  1331. return menu;
  1332. }
  1333. };
  1334. }();
  1335. Ext.air.MenuItem = function(action){
  1336. if(!action.isAction){
  1337. action = new Ext.Action(action);
  1338. }
  1339. var cfg = action.initialConfig;
  1340. var nativeItem = new air.NativeMenuItem(cfg.itemText || cfg.text);
  1341. nativeItem.enabled = !cfg.disabled;
  1342.     if(!Ext.isEmpty(cfg.checked)){
  1343.         nativeItem.checked = cfg.checked;
  1344.     }
  1345.     var handler = cfg.handler;
  1346. var scope = cfg.scope;
  1347. nativeItem.addEventListener(air.Event.SELECT, function(){
  1348. handler.call(scope || window, cfg);
  1349. });
  1350. action.addComponent({
  1351. setDisabled : function(v){
  1352. nativeItem.enabled = !v;
  1353. },
  1354. setText : function(v){
  1355. nativeItem.label = v;
  1356. },
  1357. setVisible : function(v){
  1358. nativeItem.enabled = !v;
  1359. },
  1360. setHandler : function(newHandler, newScope){
  1361. handler = newHandler;
  1362. scope = newScope;
  1363. },
  1364. on : function(){}
  1365. });
  1366. return nativeItem;
  1367. }