summaryrefslogtreecommitdiff
path: root/lib/dijit/_BidiSupport.js.uncompressed.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dijit/_BidiSupport.js.uncompressed.js')
-rw-r--r--lib/dijit/_BidiSupport.js.uncompressed.js113
1 files changed, 113 insertions, 0 deletions
diff --git a/lib/dijit/_BidiSupport.js.uncompressed.js b/lib/dijit/_BidiSupport.js.uncompressed.js
new file mode 100644
index 000000000..4a43c1f06
--- /dev/null
+++ b/lib/dijit/_BidiSupport.js.uncompressed.js
@@ -0,0 +1,113 @@
+define("dijit/_BidiSupport", ["./_WidgetBase"], function(_WidgetBase){
+
+ // module:
+ // dijit/_BidiSupport
+
+ /*=====
+ return function(){
+ // summary:
+ // Module that deals with BIDI, special with the auto
+ // direction if needed without changing the GUI direction.
+ // Including this module will extend _WidgetBase with BIDI related methods.
+ // description:
+ // There's a special need for displaying BIDI text in rtl direction
+ // in ltr GUI, sometimes needed auto support.
+ // In creation of widget, if it's want to activate this class,
+ // the widget should define the "textDir".
+ };
+ =====*/
+
+ _WidgetBase.extend({
+
+ getTextDir: function(/*String*/ text){
+ // summary:
+ // Gets the right direction of text.
+ // description:
+ // If textDir is ltr or rtl returns the value.
+ // If it's auto, calls to another function that responsible
+ // for checking the value, and defining the direction.
+ // tags:
+ // protected.
+ return this.textDir == "auto" ? this._checkContextual(text) : this.textDir;
+ },
+
+ _checkContextual: function(text){
+ // summary:
+ // Finds the first strong (directional) character, return ltr if isLatin
+ // or rtl if isBidiChar.
+ // tags:
+ // private.
+
+ // look for strong (directional) characters
+ var fdc = /[A-Za-z\u05d0-\u065f\u066a-\u06ef\u06fa-\u07ff\ufb1d-\ufdff\ufe70-\ufefc]/.exec(text);
+ // if found return the direction that defined by the character, else return widgets dir as defult.
+ return fdc ? ( fdc[0] <= 'z' ? "ltr" : "rtl" ) : this.dir ? this.dir : this.isLeftToRight() ? "ltr" : "rtl";
+ },
+
+ applyTextDir: function(/*Object*/ element, /*String*/ text){
+ // summary:
+ // Set element.dir according to this.textDir
+ // element:
+ // The text element to be set. Should have dir property.
+ // text:
+ // Used in case this.textDir is "auto", for calculating the right transformation
+ // description:
+ // If textDir is ltr or rtl returns the value.
+ // If it's auto, calls to another function that responsible
+ // for checking the value, and defining the direction.
+ // tags:
+ // protected.
+
+ var textDir = this.textDir == "auto" ? this._checkContextual(text) : this.textDir;
+ // update only when there's a difference
+ if(element.dir != textDir){
+ element.dir = textDir;
+ }
+ },
+ enforceTextDirWithUcc: function(option, text){
+ // summary:
+ // Wraps by UCC (Unicode control characters) option's text according to this.textDir
+ // option:
+ // The element (`<option>`) we wrapping the text for.
+ // text:
+ // The text to be wrapped.
+ // description:
+ // There's a dir problem with some HTML elements. For some elements (e.g. `<option>`, `<select>`)
+ // defining the dir in different direction then the GUI orientation, won't display correctly.
+ // FF 3.6 will change the alignment of the text in option - this doesn't follow the bidi standards (static text
+ // should be aligned following GUI direction). IE8 and Opera11.10 completely ignore dir setting for `<option>`.
+ // Therefore the only solution is to use UCC (Unicode control characters) to display the text in correct orientation.
+ // This function saves the original text value for later restoration if needed, for example if the textDir will change etc.
+ if(this.textDir){
+ option.originalText = text;
+ var dir = this.textDir == "auto" ? this._checkContextual(text) : this.textDir;
+ return (dir == "ltr" ? bidi_const.LRE : bidi_const.RLE ) + text + bidi_const.PDF;
+ }
+ return text;
+ },
+ restoreOriginalText: function(origObj){
+ // summary:
+ // Restores the text of origObj, if needed, after enforceTextDirWithUcc, e.g. set("textDir", textDir).
+ // origObj:
+ // The element (`<option>`) to restore.
+ // description:
+ // Sets the text of origObj to origObj.originalText, which is the original text, without the UCCs.
+ // The function than removes the originalText from origObj!
+ if(origObj.originalText){
+ origObj.text = origObj.originalText;
+ delete origObj.originalText;
+ }
+ return origObj;
+ }
+ });
+
+ // UCC - constants that will be used by bidi support.
+ var bidi_const = {
+ LRM : '\u200E',
+ LRE : '\u202A',
+ PDF : '\u202C',
+ RLM : '\u200f',
+ RLE : '\u202B'
+ };
+ return _WidgetBase;
+});