123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- /*
- Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
- */
- //>>built
- define("dojo/_base/connect",["./kernel","../on","../topic","../aspect","./event","../mouse","./sniff","./lang","../keys"],function(_1,on,_2,_3,_4,_5,_6,_7){
- _6.add("events-keypress-typed",function(){
- var _8={charCode:0};
- try{
- _8=document.createEvent("KeyboardEvent");
- (_8.initKeyboardEvent||_8.initKeyEvent).call(_8,"keypress",true,true,null,false,false,false,false,9,3);
- }
- catch(e){
- }
- return _8.charCode==0&&!_6("opera");
- });
- function _9(_a,_b,_c,_d,_e){
- _d=_7.hitch(_c,_d);
- if(!_a||!(_a.addEventListener||_a.attachEvent)){
- return _3.after(_a||_1.global,_b,_d,true);
- }
- if(typeof _b=="string"&&_b.substring(0,2)=="on"){
- _b=_b.substring(2);
- }
- if(!_a){
- _a=_1.global;
- }
- if(!_e){
- switch(_b){
- case "keypress":
- _b=_f;
- break;
- case "mouseenter":
- _b=_5.enter;
- break;
- case "mouseleave":
- _b=_5.leave;
- break;
- }
- }
- return on(_a,_b,_d,_e);
- };
- var _10={106:42,111:47,186:59,187:43,188:44,189:45,190:46,191:47,192:96,219:91,220:92,221:93,222:39,229:113};
- var _11=_6("mac")?"metaKey":"ctrlKey";
- var _12=function(evt,_13){
- var _14=_7.mixin({},evt,_13);
- _15(_14);
- _14.preventDefault=function(){
- evt.preventDefault();
- };
- _14.stopPropagation=function(){
- evt.stopPropagation();
- };
- return _14;
- };
- function _15(evt){
- evt.keyChar=evt.charCode?String.fromCharCode(evt.charCode):"";
- evt.charOrCode=evt.keyChar||evt.keyCode;
- };
- var _f;
- if(_6("events-keypress-typed")){
- var _16=function(e,_17){
- try{
- return (e.keyCode=_17);
- }
- catch(e){
- return 0;
- }
- };
- _f=function(_18,_19){
- var _1a=on(_18,"keydown",function(evt){
- var k=evt.keyCode;
- var _1b=(k!=13)&&k!=32&&(k!=27||!_6("ie"))&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222)&&k!=229;
- if(_1b||evt.ctrlKey){
- var c=_1b?0:k;
- if(evt.ctrlKey){
- if(k==3||k==13){
- return _19.call(evt.currentTarget,evt);
- }else{
- if(c>95&&c<106){
- c-=48;
- }else{
- if((!evt.shiftKey)&&(c>=65&&c<=90)){
- c+=32;
- }else{
- c=_10[c]||c;
- }
- }
- }
- }
- var _1c=_12(evt,{type:"keypress",faux:true,charCode:c});
- _19.call(evt.currentTarget,_1c);
- if(_6("ie")){
- _16(evt,_1c.keyCode);
- }
- }
- });
- var _1d=on(_18,"keypress",function(evt){
- var c=evt.charCode;
- c=c>=32?c:0;
- evt=_12(evt,{charCode:c,faux:true});
- return _19.call(this,evt);
- });
- return {remove:function(){
- _1a.remove();
- _1d.remove();
- }};
- };
- }else{
- if(_6("opera")){
- _f=function(_1e,_1f){
- return on(_1e,"keypress",function(evt){
- var c=evt.which;
- if(c==3){
- c=99;
- }
- c=c<32&&!evt.shiftKey?0:c;
- if(evt.ctrlKey&&!evt.shiftKey&&c>=65&&c<=90){
- c+=32;
- }
- return _1f.call(this,_12(evt,{charCode:c}));
- });
- };
- }else{
- _f=function(_20,_21){
- return on(_20,"keypress",function(evt){
- _15(evt);
- return _21.call(this,evt);
- });
- };
- }
- }
- var _22={_keypress:_f,connect:function(obj,_23,_24,_25,_26){
- var a=arguments,_27=[],i=0;
- _27.push(typeof a[0]=="string"?null:a[i++],a[i++]);
- var a1=a[i+1];
- _27.push(typeof a1=="string"||typeof a1=="function"?a[i++]:null,a[i++]);
- for(var l=a.length;i<l;i++){
- _27.push(a[i]);
- }
- return _9.apply(this,_27);
- },disconnect:function(_28){
- if(_28){
- _28.remove();
- }
- },subscribe:function(_29,_2a,_2b){
- return _2.subscribe(_29,_7.hitch(_2a,_2b));
- },publish:function(_2c,_2d){
- return _2.publish.apply(_2,[_2c].concat(_2d));
- },connectPublisher:function(_2e,obj,_2f){
- var pf=function(){
- _22.publish(_2e,arguments);
- };
- return _2f?_22.connect(obj,_2f,pf):_22.connect(obj,pf);
- },isCopyKey:function(e){
- return e[_11];
- }};
- _22.unsubscribe=_22.disconnect;
- 1&&_7.mixin(_1,_22);
- return _22;
- });
|