BidiComplex.js
3.5 KB
//>>built
define("dojo/_base/kernel dojo/_base/lang dojo/_base/array dojo/_base/connect dojo/_base/sniff dojo/keys".split(" "),function(r,t,p,m,l,k){r.experimental("dojox.string.BidiComplex");var d=t.getObject("string.BidiComplex",!0,dojox),q=[];d.attachInput=function(a,b){a.alt=b;m.connect(a,"onkeydown",this,"_ceKeyDown");m.connect(a,"onkeyup",this,"_ceKeyUp");m.connect(a,"oncut",this,"_ceCutText");m.connect(a,"oncopy",this,"_ceCopyText");a.value=d.createDisplayString(a.value,a.alt)};d.createDisplayString=
function(a,b){a=d.stripSpecialCharacters(a);b=d._parse(a,b);var e="\u202a"+a,c=1;p.forEach(b,function(a){if(null!=a){var b=e.substring(0,a+c);a=e.substring(a+c,e.length);e=b+"\u200e"+a;c++}});return e};d.stripSpecialCharacters=function(a){return a.replace(/[\u200E\u200F\u202A-\u202E]/g,"")};d._ceKeyDown=function(a){q=(l("ie")?a.srcElement:a.target).value};d._ceKeyUp=function(a){var b=l("ie")?a.srcElement:a.target,e=b.value,c=a.keyCode;if(c!=k.HOME&&c!=k.END&&c!=k.SHIFT){var h,f;if(a=d._getCaretPos(a,
b))h=a[0],f=a[1];if(l("ie")){a=h;var g=f;if(c==k.LEFT_ARROW){"\u200e"==e.charAt(f-1)&&h==f&&d._setSelectedRange(b,h-1,f-1);return}if(c==k.RIGHT_ARROW){"\u200e"==e.charAt(f-1)&&(g=f+1,h==f&&(a=h+1));d._setSelectedRange(b,a,g);return}}else{if(c==k.LEFT_ARROW){"\u200e"==e.charAt(f-1)&&d._setSelectedRange(b,h-1,f-1);return}if(c==k.RIGHT_ARROW){"\u200e"==e.charAt(f-1)&&d._setSelectedRange(b,h+1,f+1);return}}a=d.createDisplayString(e,b.alt);e!=a&&(window.status=e+" c\x3d"+f,b.value=a,c==k.DELETE&&"\u200e"==
a.charAt(f)&&(b.value=a.substring(0,f)+a.substring(f+2,a.length)),c==k.DELETE?d._setSelectedRange(b,h,f):c==k.BACKSPACE?q.length>=f&&"\u200e"==q.charAt(f-1)?d._setSelectedRange(b,h-1,f-1):d._setSelectedRange(b,h,f):"\u200e"!=b.value.charAt(f)&&d._setSelectedRange(b,h+1,f+1))}};d._processCopy=function(a,b,e){null==b&&(b=l("ie")?document.selection.createRange().text:a.value.substring(a.selectionStart,a.selectionEnd));a=d.stripSpecialCharacters(b);l("ie")&&window.clipboardData.setData("Text",a);return!0};
d._ceCopyText=function(a){l("ie")&&(a.returnValue=!1);return d._processCopy(a,null,!1)};d._ceCutText=function(a){if(!d._processCopy(a,null,!1))return!1;if(l("ie"))document.selection.clear();else{var b=a.selectionStart;a.value=a.value.substring(0,b)+a.value.substring(a.selectionEnd);a.setSelectionRange(b,b)}return!0};d._getCaretPos=function(a,b){if(l("ie")){a=0;var e=document.selection.createRange().duplicate(),c=e.duplicate(),d=e.text.length;for("textarea"==b.type?c.moveToElementText(b):c.expand("textedit");0<
e.compareEndPoints("StartToStart",c);)e.moveStart("character",-1),++a;return[a,a+d]}return[a.target.selectionStart,a.target.selectionEnd]};d._setSelectedRange=function(a,b,e){if(l("ie")){var c=a.createTextRange();c&&("textarea"==a.type?c.moveToElementText(a):c.expand("textedit"),c.collapse(),c.moveEnd("character",e),c.moveStart("character",b),c.select())}else a.selectionStart=b,a.selectionEnd=e};var n=function(a,b,e){for(;0<b&&b!=e;){b--;var c=a.charAt(b);if("0"<=c&&"9">=c||"\u00ff"<c)return!0;c=
a.charAt(b);if("A"<=c&&"Z">=c||"a"<=c&&"z">=c)break}return!1};d._parse=function(a,b){var e=-1,c=[],d={FILE_PATH:"/\\:.",URL:"/:.?\x3d\x26#",XPATH:"/\\:.\x3c\x3e\x3d[]",EMAIL:"\x3c\x3e@.,;"}[b];switch(b){case "FILE_PATH":case "URL":case "XPATH":p.forEach(a,function(b,g){0<=d.indexOf(b)&&n(a,g,e)&&(e=g,c.push(g))});break;case "EMAIL":p.forEach(a,function(b,g){if('"'==b){n(a,g,e)&&(e=g,c.push(g));g++;var f=a.indexOf('"',g);f>=g&&(g=f);n(a,g,e)&&(e=g,c.push(g))}0<=d.indexOf(b)&&n(a,g,e)&&(e=g,c.push(g))})}return c};
return d});