root / trunk / web / dojo / dojox / string / BidiComplex.js @ 10
History | View | Annotate | Download (5.35 KB)
| 1 |
/*
|
|---|---|
| 2 |
Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
| 3 |
Available via Academic Free License >= 2.1 OR the modified BSD license.
|
| 4 |
see: http://dojotoolkit.org/license for details
|
| 5 |
*/
|
| 6 |
|
| 7 |
|
| 8 |
if(!dojo._hasResource["dojox.string.BidiComplex"]){ |
| 9 |
dojo._hasResource["dojox.string.BidiComplex"]=true; |
| 10 |
dojo.provide("dojox.string.BidiComplex");
|
| 11 |
dojo.experimental("dojox.string.BidiComplex");
|
| 12 |
(function(){
|
| 13 |
var _1=[];
|
| 14 |
dojox.string.BidiComplex.attachInput=function(_2,_3){ |
| 15 |
_2.alt=_3; |
| 16 |
dojo.connect(_2,"onkeydown",this,"_ceKeyDown"); |
| 17 |
dojo.connect(_2,"onkeyup",this,"_ceKeyUp"); |
| 18 |
dojo.connect(_2,"oncut",this,"_ceCutText"); |
| 19 |
dojo.connect(_2,"oncopy",this,"_ceCopyText"); |
| 20 |
_2.value=dojox.string.BidiComplex.createDisplayString(_2.value,_2.alt); |
| 21 |
}; |
| 22 |
dojox.string.BidiComplex.createDisplayString=function(_4,_5){ |
| 23 |
_4=dojox.string.BidiComplex.stripSpecialCharacters(_4); |
| 24 |
var _6=dojox.string.BidiComplex._parse(_4,_5);
|
| 25 |
var _7=""+_4; |
| 26 |
var _8=1; |
| 27 |
dojo.forEach(_6,function(n){
|
| 28 |
if(n!=null){ |
| 29 |
var _9=_7.substring(0,n+_8); |
| 30 |
var _a=_7.substring(n+_8,_7.length);
|
| 31 |
_7=_9+""+_a;
|
| 32 |
_8++; |
| 33 |
} |
| 34 |
}); |
| 35 |
return _7;
|
| 36 |
}; |
| 37 |
dojox.string.BidiComplex.stripSpecialCharacters=function(_b){ |
| 38 |
return _b.replace(/[\u200E\u200F\u202A-\u202E]/g,""); |
| 39 |
}; |
| 40 |
dojox.string.BidiComplex._ceKeyDown=function(_c){ |
| 41 |
var _d=dojo.isIE?_c.srcElement:_c.target;
|
| 42 |
_1=_d.value; |
| 43 |
}; |
| 44 |
dojox.string.BidiComplex._ceKeyUp=function(_e){ |
| 45 |
var _f=""; |
| 46 |
var _10=dojo.isIE?_e.srcElement:_e.target;
|
| 47 |
var _11=_10.value;
|
| 48 |
var _12=_e.keyCode;
|
| 49 |
if((_12==dojo.keys.HOME)||(_12==dojo.keys.END)||(_12==dojo.keys.SHIFT)){
|
| 50 |
return;
|
| 51 |
} |
| 52 |
var _13,_14;
|
| 53 |
var _15=dojox.string.BidiComplex._getCaretPos(_e,_10);
|
| 54 |
if(_15){
|
| 55 |
_13=_15[0];
|
| 56 |
_14=_15[1];
|
| 57 |
} |
| 58 |
if(dojo.isIE){
|
| 59 |
var _16=_13,_17=_14;
|
| 60 |
if(_12==dojo.keys.LEFT_ARROW){
|
| 61 |
if((_11.charAt(_14-1)==_f)&&(_13==_14)){ |
| 62 |
dojox.string.BidiComplex._setSelectedRange(_10,_13-1,_14-1); |
| 63 |
} |
| 64 |
return;
|
| 65 |
} |
| 66 |
if(_12==dojo.keys.RIGHT_ARROW){
|
| 67 |
if(_11.charAt(_14-1)==_f){ |
| 68 |
_17=_14+1;
|
| 69 |
if(_13==_14){
|
| 70 |
_16=_13+1;
|
| 71 |
} |
| 72 |
} |
| 73 |
dojox.string.BidiComplex._setSelectedRange(_10,_16,_17); |
| 74 |
return;
|
| 75 |
} |
| 76 |
}else{
|
| 77 |
if(_12==dojo.keys.LEFT_ARROW){
|
| 78 |
if(_11.charAt(_14-1)==_f){ |
| 79 |
dojox.string.BidiComplex._setSelectedRange(_10,_13-1,_14-1); |
| 80 |
} |
| 81 |
return;
|
| 82 |
} |
| 83 |
if(_12==dojo.keys.RIGHT_ARROW){
|
| 84 |
if(_11.charAt(_14-1)==_f){ |
| 85 |
dojox.string.BidiComplex._setSelectedRange(_10,_13+1,_14+1); |
| 86 |
} |
| 87 |
return;
|
| 88 |
} |
| 89 |
} |
| 90 |
var _18=dojox.string.BidiComplex.createDisplayString(_11,_10.alt);
|
| 91 |
if(_11!=_18){
|
| 92 |
window.status=_11+" c="+_14;
|
| 93 |
_10.value=_18; |
| 94 |
if((_12==dojo.keys.DELETE)&&(_18.charAt(_14)==_f)){
|
| 95 |
_10.value=_18.substring(0,_14)+_18.substring(_14+2,_18.length); |
| 96 |
} |
| 97 |
if(_12==dojo.keys.DELETE){
|
| 98 |
dojox.string.BidiComplex._setSelectedRange(_10,_13,_14); |
| 99 |
}else{
|
| 100 |
if(_12==dojo.keys.BACKSPACE){
|
| 101 |
if((_1.length>=_14)&&(_1.charAt(_14-1)==_f)){ |
| 102 |
dojox.string.BidiComplex._setSelectedRange(_10,_13-1,_14-1); |
| 103 |
}else{
|
| 104 |
dojox.string.BidiComplex._setSelectedRange(_10,_13,_14); |
| 105 |
} |
| 106 |
}else{
|
| 107 |
if(_10.value.charAt(_14)!=_f){
|
| 108 |
dojox.string.BidiComplex._setSelectedRange(_10,_13+1,_14+1); |
| 109 |
} |
| 110 |
} |
| 111 |
} |
| 112 |
} |
| 113 |
}; |
| 114 |
dojox.string.BidiComplex._processCopy=function(_19,_1a,_1b){ |
| 115 |
if(_1a==null){ |
| 116 |
if(dojo.isIE){
|
| 117 |
var _1c=document.selection.createRange();
|
| 118 |
_1a=_1c.text; |
| 119 |
}else{
|
| 120 |
_1a=_19.value.substring(_19.selectionStart,_19.selectionEnd); |
| 121 |
} |
| 122 |
} |
| 123 |
var _1d=dojox.string.BidiComplex.stripSpecialCharacters(_1a);
|
| 124 |
if(dojo.isIE){
|
| 125 |
window.clipboardData.setData("Text",_1d);
|
| 126 |
} |
| 127 |
return true; |
| 128 |
}; |
| 129 |
dojox.string.BidiComplex._ceCopyText=function(_1e){ |
| 130 |
if(dojo.isIE){
|
| 131 |
_1e.returnValue=false;
|
| 132 |
} |
| 133 |
return dojox.string.BidiComplex._processCopy(_1e,null,false); |
| 134 |
}; |
| 135 |
dojox.string.BidiComplex._ceCutText=function(_1f){ |
| 136 |
var ret=dojox.string.BidiComplex._processCopy(_1f,null,false); |
| 137 |
if(!ret){
|
| 138 |
return false; |
| 139 |
} |
| 140 |
if(dojo.isIE){
|
| 141 |
document.selection.clear(); |
| 142 |
}else{
|
| 143 |
var _20=_1f.selectionStart;
|
| 144 |
_1f.value=_1f.value.substring(0,_20)+_1f.value.substring(_1f.selectionEnd);
|
| 145 |
_1f.setSelectionRange(_20,_20); |
| 146 |
} |
| 147 |
return true; |
| 148 |
}; |
| 149 |
dojox.string.BidiComplex._getCaretPos=function(_21,_22){ |
| 150 |
if(dojo.isIE){
|
| 151 |
var _23=0,_24=document.selection.createRange().duplicate(),_25=_24.duplicate(),_26=_24.text.length; |
| 152 |
if(_22.type=="textarea"){ |
| 153 |
_25.moveToElementText(_22); |
| 154 |
}else{
|
| 155 |
_25.expand("textedit");
|
| 156 |
} |
| 157 |
while(_24.compareEndPoints("StartToStart",_25)>0){ |
| 158 |
_24.moveStart("character",-1); |
| 159 |
++_23; |
| 160 |
} |
| 161 |
return [_23,_23+_26];
|
| 162 |
} |
| 163 |
return [_21.target.selectionStart,_21.target.selectionEnd];
|
| 164 |
}; |
| 165 |
dojox.string.BidiComplex._setSelectedRange=function(_27,_28,_29){ |
| 166 |
if(dojo.isIE){
|
| 167 |
var _2a=_27.createTextRange();
|
| 168 |
if(_2a){
|
| 169 |
if(_27.type=="textarea"){ |
| 170 |
_2a.moveToElementText(_27); |
| 171 |
}else{
|
| 172 |
_2a.expand("textedit");
|
| 173 |
} |
| 174 |
_2a.collapse(); |
| 175 |
_2a.moveEnd("character",_29);
|
| 176 |
_2a.moveStart("character",_28);
|
| 177 |
_2a.select(); |
| 178 |
} |
| 179 |
}else{
|
| 180 |
_27.selectionStart=_28; |
| 181 |
_27.selectionEnd=_29; |
| 182 |
} |
| 183 |
}; |
| 184 |
var _2b=function(c){ |
| 185 |
return (c>="0"&&c<="9")||(c>"ÿ"); |
| 186 |
}; |
| 187 |
var _2c=function(c){ |
| 188 |
return (c>="A"&&c<="Z")||(c>="a"&&c<="z"); |
| 189 |
}; |
| 190 |
var _2d=function(_2e,i,_2f){ |
| 191 |
while(i>0){ |
| 192 |
if(i==_2f){
|
| 193 |
return false; |
| 194 |
} |
| 195 |
i--; |
| 196 |
if(_2b(_2e.charAt(i))){
|
| 197 |
return true; |
| 198 |
} |
| 199 |
if(_2c(_2e.charAt(i))){
|
| 200 |
return false; |
| 201 |
} |
| 202 |
} |
| 203 |
return false; |
| 204 |
}; |
| 205 |
dojox.string.BidiComplex._parse=function(str,_30){ |
| 206 |
var _31=-1,_32=[]; |
| 207 |
var _33={FILE_PATH:"/\\:.",URL:"/:.?=&#",XPATH:"/\\:.<>=[]",EMAIL:"<>@.,;"}[_30]; |
| 208 |
switch(_30){
|
| 209 |
case "FILE_PATH": |
| 210 |
case "URL": |
| 211 |
case "XPATH": |
| 212 |
dojo.forEach(str,function(ch,i){
|
| 213 |
if(_33.indexOf(ch)>=0&&_2d(str,i,_31)){ |
| 214 |
_31=i; |
| 215 |
_32.push(i); |
| 216 |
} |
| 217 |
}); |
| 218 |
break;
|
| 219 |
case "EMAIL": |
| 220 |
var _34=false; |
| 221 |
dojo.forEach(str,function(ch,i){
|
| 222 |
if(ch=="\""){ |
| 223 |
if(_2d(str,i,_31)){
|
| 224 |
_31=i; |
| 225 |
_32.push(i); |
| 226 |
} |
| 227 |
i++; |
| 228 |
var i1=str.indexOf("\"",i); |
| 229 |
if(i1>=i){
|
| 230 |
i=i1; |
| 231 |
} |
| 232 |
if(_2d(str,i,_31)){
|
| 233 |
_31=i; |
| 234 |
_32.push(i); |
| 235 |
} |
| 236 |
} |
| 237 |
if(_33.indexOf(ch)>=0&&_2d(str,i,_31)){ |
| 238 |
_31=i; |
| 239 |
_32.push(i); |
| 240 |
} |
| 241 |
}); |
| 242 |
} |
| 243 |
return _32;
|
| 244 |
}; |
| 245 |
})(); |
| 246 |
} |