From b6a4a34fd2da988047890b2605f86809d472e6c4 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 29 Dec 2013 20:02:14 +0400 Subject: [PATCH] togglecomment should not scroll if part of the selection is visible --- lib/ace/editor.js | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/lib/ace/editor.js b/lib/ace/editor.js index 6486a881..dfca96b8 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -133,7 +133,6 @@ var Editor = function(renderer, session) { if (command.aceCommandGroup == "fileJump") { if (this.lastFileJumpPos && !this.curOp.selectionChanged) { this.selection.fromJSON(this.lastFileJumpPos); - return; } } this.endOperation(e); @@ -168,7 +167,8 @@ var Editor = function(renderer, session) { this.$opResetTimer.schedule(); this.curOp = { command: commadEvent.command || {}, - args: commadEvent.args + args: commadEvent.args, + scrollTop: this.renderer.scrollTop }; var command = this.curOp.command; @@ -187,16 +187,24 @@ var Editor = function(renderer, session) { case "center": this.renderer.scrollCursorIntoView(null, 0.5); break; + case "animate": case "cursor": this.renderer.scrollCursorIntoView(); break; case "selectionPart": - this.renderer.scrollCursorIntoView(); + var range = this.selection.getRange(); + var config = this.renderer.layerConfig; + if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) { + this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead); + } break; default: break; } + if (command.scrollIntoView == "animate") + this.renderer.animateScrolling(this.curOp.scrollTop); } + this.prevOp = this.curOp; this.curOp = null; } @@ -243,7 +251,6 @@ var Editor = function(renderer, session) { * Sets a new key handler, such as "vim" or "windows". * @param {String} keyboardHandler The new key handler * - * **/ this.setKeyboardHandler = function(keyboardHandler) { if (!keyboardHandler) { @@ -277,7 +284,6 @@ var Editor = function(renderer, session) { * @event changeSession * @param {Object} e An object with two properties, `oldSession` and `session`, that represent the old and new [[EditSession]]s. * - * **/ /** * Sets a new editsession to use. This method also emits the `'changeSession'` event. @@ -875,7 +881,7 @@ var Editor = function(renderer, session) { } if (text == "\n" || text == "\r\n") { - var line = session.getLine(cursor.row) + var line = session.getLine(cursor.row); if (cursor.column > line.search(/\S|$/)) { var d = line.substr(cursor.column).search(/\S|$/); session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d); @@ -1202,7 +1208,7 @@ var Editor = function(renderer, session) { var state = session.getState(range.start.row); var new_range = session.getMode().transformAction(state, 'deletion', this, session, range); - if (range.end.column == 0) { + if (range.end.column === 0) { var text = session.getTextRange(range); if (text[text.length - 1] == "\n") { var line = session.getLine(range.end.row); @@ -1361,7 +1367,7 @@ var Editor = function(renderer, session) { } } - var line = session.getLine(range.start.row) + var line = session.getLine(range.start.row); var position = range.start; var size = session.getTabSize(); var column = session.documentToScreenColumn(position.row, position.column); @@ -1632,7 +1638,7 @@ var Editor = function(renderer, session) { var last = rows.end.row; var first = rows.start.row; while (i--) { - var rows = ranges[i].collapseRows(); + rows = ranges[i].collapseRows(); if (first - rows.end.row <= 1) first = rows.end.row; else @@ -1736,11 +1742,11 @@ var Editor = function(renderer, session) { var rows = dir * Math.floor(config.height / config.lineHeight); this.$blockScrolling++; - if (select == true) { + if (select === true) { this.selection.$moveSelection(function(){ this.moveCursorBy(rows, 0); }); - } else if (select == false) { + } else if (select === false) { this.selection.moveCursorBy(rows, 0); this.selection.clearSelection(); } @@ -2069,10 +2075,8 @@ var Editor = function(renderer, session) { * Moves the cursor to the end of the current file. Note that this does de-select the current selection. **/ this.navigateFileEnd = function() { - var scrollTop = this.renderer.scrollTop; this.selection.moveCursorFileEnd(); this.clearSelection(); - this.renderer.animateScrolling(scrollTop); }; /** @@ -2080,10 +2084,8 @@ var Editor = function(renderer, session) { * Moves the cursor to the start of the current file. Note that this does de-select the current selection. **/ this.navigateFileStart = function() { - var scrollTop = this.renderer.scrollTop; this.selection.moveCursorFileStart(); this.clearSelection(); - this.renderer.animateScrolling(scrollTop); }; /** @@ -2266,7 +2268,7 @@ var Editor = function(renderer, session) { var scrollTop = this.renderer.scrollTop; this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); - if (animate != false) + if (animate !== false) this.renderer.animateScrolling(scrollTop); };