diff options
Diffstat (limited to 'lib/dijit/_BidiSupport.js.uncompressed.js')
-rw-r--r-- | lib/dijit/_BidiSupport.js.uncompressed.js | 113 |
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; +}); |