123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- define("ace/ext/rtl",["ace_require","exports","module","ace/editor","ace/config"], function(ace_require, exports, module) {
- "use strict";
- var commands = [{
- name: "leftToRight",
- bindKey: { win: "Ctrl-Alt-Shift-L", mac: "Command-Alt-Shift-L" },
- exec: function(editor) {
- editor.session.$bidiHandler.setRtlDirection(editor, false);
- },
- readOnly: true
- }, {
- name: "rightToLeft",
- bindKey: { win: "Ctrl-Alt-Shift-R", mac: "Command-Alt-Shift-R" },
- exec: function(editor) {
- editor.session.$bidiHandler.setRtlDirection(editor, true);
- },
- readOnly: true
- }];
- var Editor = ace_require("../editor").Editor;
- ace_require("../config").defineOptions(Editor.prototype, "editor", {
- rtlText: {
- set: function(val) {
- if (val) {
- this.on("change", onChange);
- this.on("changeSelection", onChangeSelection);
- this.renderer.on("afterRender", updateLineDirection);
- this.commands.on("exec", onCommandEmitted);
- this.commands.addCommands(commands);
- } else {
- this.off("change", onChange);
- this.off("changeSelection", onChangeSelection);
- this.renderer.off("afterRender", updateLineDirection);
- this.commands.off("exec", onCommandEmitted);
- this.commands.removeCommands(commands);
- clearTextLayer(this.renderer);
- }
- this.renderer.updateFull();
- }
- },
- rtl: {
- set: function(val) {
- this.session.$bidiHandler.$isRtl = val;
- if (val) {
- this.setOption("rtlText", false);
- this.renderer.on("afterRender", updateLineDirection);
- this.session.$bidiHandler.seenBidi = true;
- } else {
- this.renderer.off("afterRender", updateLineDirection);
- clearTextLayer(this.renderer);
- }
- this.renderer.updateFull();
- }
- }
- });
- function onChangeSelection(e, editor) {
- var lead = editor.getSelection().lead;
- if (editor.session.$bidiHandler.isRtlLine(lead.row)) {
- if (lead.column === 0) {
- if (editor.session.$bidiHandler.isMoveLeftOperation && lead.row > 0) {
- editor.getSelection().moveCursorTo(lead.row - 1, editor.session.getLine(lead.row - 1).length);
- } else {
- if (editor.getSelection().isEmpty())
- lead.column += 1;
- else
- lead.setPosition(lead.row, lead.column + 1);
- }
- }
- }
- }
- function onCommandEmitted(commadEvent) {
- commadEvent.editor.session.$bidiHandler.isMoveLeftOperation = /gotoleft|selectleft|backspace|removewordleft/.test(commadEvent.command.name);
- }
- function onChange(delta, editor) {
- var session = editor.session;
- session.$bidiHandler.currentRow = null;
- if (session.$bidiHandler.isRtlLine(delta.start.row) && delta.action === 'insert' && delta.lines.length > 1) {
- for (var row = delta.start.row; row < delta.end.row; row++) {
- if (session.getLine(row + 1).charAt(0) !== session.$bidiHandler.RLE)
- session.doc.$lines[row + 1] = session.$bidiHandler.RLE + session.getLine(row + 1);
- }
- }
- }
- function updateLineDirection(e, renderer) {
- var session = renderer.session;
- var $bidiHandler = session.$bidiHandler;
- var cells = renderer.$textLayer.$lines.cells;
- var width = renderer.layerConfig.width - renderer.layerConfig.padding + "px";
- cells.forEach(function(cell) {
- var style = cell.element.style;
- if ($bidiHandler && $bidiHandler.isRtlLine(cell.row)) {
- style.direction = "rtl";
- style.textAlign = "right";
- style.width = width;
- } else {
- style.direction = "";
- style.textAlign = "";
- style.width = "";
- }
- });
- }
- function clearTextLayer(renderer) {
- var lines = renderer.$textLayer.$lines;
- lines.cells.forEach(clear);
- lines.cellCache.forEach(clear);
- function clear(cell) {
- var style = cell.element.style;
- style.direction = style.textAlign = style.width = "";
- }
- }
- }); (function() {
- window.ace_require(["ace/ext/rtl"], function(m) {
- if (typeof module == "object" && typeof exports == "object" && module) {
- module.exports = m;
- }
- });
- })();
-
|