Ext.define('Ext.rtl.draw.Sprite', { override: 'Ext.draw.Sprite', /* * --------Using RTL text in charts-------- * * For RTL charts, the direction of the underlying SVG/VML elements is left * as LTR. This is to normalize cross browser differences that occur, especially since * getting the directions to work is mostly as simple as just flipping the order of * things. As such, by default the text will display in an LTR fashion as well. * * One of the possible solutions is to go through and add direction: rtl; on all * of the text elements, however there are 2 problems with this: * 1) It doesn't work at all with VML. * 2) With SVG, the text displays differently between FF & Chrome, and also * it affects the positioning of the text elements as well. * * The option we've gone for is to include the right left mark (below) and * prepend it to any text. It's the easiest solution and should cover enough * cases to be handled in the charting package. The RLM tells the browser to * interpret character groups in a RTL fashion. Text with RTL characters will * display correctly whether in RTL or LTR mode, the LRM affects how other characters * are displayed around it. * * Let's take the string (you'll need to paste these in browsers, somewhat of * a pain to get them to show up correctly in the LTR editor): * "10 \u05E9\u05DC\u05DD" * * The above is how it will be displayed without the RLM. * With the RLM, it will be display as: * * "\u200F10 \u05E9\u05DC\u05DD" * * As you can see, the ordering of the Hebrew characters do * not change, however the surrounding characters move around * relative to what's already there. */ // This character is the right to left mark // http://en.wikipedia.org/wiki/Right-to-left_mark // It is used to group characters in an RTL manner RLM: '\u200F', // A simple regex to match most strong RTL characters. Indicates that // the string contains RTL characters rtlRe: /[\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC]/, transformText: function(text) { var me = this; if (text && me.surface.isRtl && !Ext.isNumber(text) && me.rtlRe.test(text)) { // IE9m will display a strange visual artefact when showing // text with the RLM and there are no RTL characters in the string. // IE6 & 7 will still show the artefact, it seems to be unavoidable. return me.RLM + text; } return me.callParent(arguments); } });