From 351c1e75fb95308ad209992ec1592ee5d53b75c7 Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Wed, 16 Nov 2011 10:34:19 -0800 Subject: [PATCH] Add editor.toUpperCase() and editor.toLowerCase() Also add Ctrl-U (uppercase) and Ctrl-Shift-U (lowercase) bindings. --- lib/ace/commands/default_commands.js | 8 ++++++ lib/ace/editor.js | 30 +++++++++++++++++++++ lib/ace/editor_text_edit_test.js | 40 ++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) diff --git a/lib/ace/commands/default_commands.js b/lib/ace/commands/default_commands.js index 42a22424..95c4e94c 100644 --- a/lib/ace/commands/default_commands.js +++ b/lib/ace/commands/default_commands.js @@ -301,6 +301,14 @@ exports.commands = [{ name: "transposeletters", bindKey: bindKey("Ctrl-T", "Ctrl-T"), exec: function(editor) { editor.transposeLetters(); } +}, { + name: "touppercase", + bindKey: bindKey("Ctrl-U", "Ctrl-U"), + exec: function(editor) { editor.toUpperCase(); } +}, { + name: "tolowercase", + bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"), + exec: function(editor) { editor.toLowerCase(); } }, { name: "fold", bindKey: bindKey("Alt-L", "Alt-L"), diff --git a/lib/ace/editor.js b/lib/ace/editor.js index 1baf50f2..55f20c11 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -773,6 +773,36 @@ var Editor = function(renderer, session) { this.session.replace(range, swap); }; + this.toLowerCase = function() { + if (this.$readOnly) + return; + + var originalRange = this.getSelectionRange(); + if (this.selection.isEmpty()) { + this.selection.selectWord(); + } + + var range = this.getSelectionRange(); + var text = this.session.getTextRange(range); + this.session.replace(range, text.toLowerCase()); + this.selection.setSelectionRange(originalRange); + }; + + this.toUpperCase = function() { + if (this.$readOnly) + return; + + var originalRange = this.getSelectionRange(); + if (this.selection.isEmpty()) { + this.selection.selectWord(); + } + + var range = this.getSelectionRange(); + var text = this.session.getTextRange(range); + this.session.replace(range, text.toUpperCase()); + this.selection.setSelectionRange(originalRange); + }; + this.indent = function() { if (this.$readOnly) return; diff --git a/lib/ace/editor_text_edit_test.js b/lib/ace/editor_text_edit_test.js index 18cf0a96..e6a9ea04 100644 --- a/lib/ace/editor_text_edit_test.js +++ b/lib/ace/editor_text_edit_test.js @@ -511,6 +511,46 @@ module.exports = { editor.removeToLineEnd(); assert.position(editor.getCursorPosition(), 1, 4); assert.equal(session.getValue(), ["123", "456789"].join("\n")); + }, + + "test: transform selection to uppercase": function() { + var session = new EditSession(["ajax", "dot", "org"]); + + var editor = new Editor(new MockRenderer(), session); + editor.moveCursorTo(1, 0); + editor.getSelection().selectLineEnd(); + editor.toUpperCase() + assert.equal(session.getValue(), ["ajax", "DOT", "org"].join("\n")); + }, + + "test: transform word to uppercase": function() { + var session = new EditSession(["ajax", "dot", "org"]); + + var editor = new Editor(new MockRenderer(), session); + editor.moveCursorTo(1, 0); + editor.toUpperCase() + assert.equal(session.getValue(), ["ajax", "DOT", "org"].join("\n")); + assert.position(editor.getCursorPosition(), 1, 0); + }, + + "test: transform selection to lowercase": function() { + var session = new EditSession(["AJAX", "DOT", "ORG"]); + + var editor = new Editor(new MockRenderer(), session); + editor.moveCursorTo(1, 0); + editor.getSelection().selectLineEnd(); + editor.toLowerCase() + assert.equal(session.getValue(), ["AJAX", "dot", "ORG"].join("\n")); + }, + + "test: transform word to lowercase": function() { + var session = new EditSession(["AJAX", "DOT", "ORG"]); + + var editor = new Editor(new MockRenderer(), session); + editor.moveCursorTo(1, 0); + editor.toLowerCase() + assert.equal(session.getValue(), ["AJAX", "dot", "ORG"].join("\n")); + assert.position(editor.getCursorPosition(), 1, 0); } };