From 1cee451423977804e1fac538cea295237232fb62 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Thu, 24 Aug 2017 14:51:55 -0600 Subject: [PATCH 1/3] keep current cursor or top line in view when resizing to avoid losing user context --- .../console/public/src/input_resize.js | 1 + .../console/public/src/sense_editor/editor.js | 4 ++++ .../console/public/src/smart_resize.js | 17 +++++++++++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/core_plugins/console/public/src/input_resize.js b/src/core_plugins/console/public/src/input_resize.js index 7ef2a9b004abb..7aff0a5163e78 100644 --- a/src/core_plugins/console/public/src/input_resize.js +++ b/src/core_plugins/console/public/src/input_resize.js @@ -24,6 +24,7 @@ export default function (input, output) { $resizer.addClass('active'); var startWidth = $left.width(); var startX = event.pageX; + input.markTopRow(); function onMove(event) { setEditorWidth(startWidth + event.pageX - startX) diff --git a/src/core_plugins/console/public/src/sense_editor/editor.js b/src/core_plugins/console/public/src/sense_editor/editor.js index 9e12c21383740..c09f195ef95d8 100644 --- a/src/core_plugins/console/public/src/sense_editor/editor.js +++ b/src/core_plugins/console/public/src/sense_editor/editor.js @@ -630,5 +630,9 @@ export default function SenseEditor($el) { editor.getSession().on("changeScrollTop", editor.updateActionsBar); + editor.markTopRow = function () { + editor.peggedRow = editor.renderer.layerConfig.firstRow; + } + return editor; } diff --git a/src/core_plugins/console/public/src/smart_resize.js b/src/core_plugins/console/public/src/smart_resize.js index 0e52ce06080e5..14d752fe0ba6b 100644 --- a/src/core_plugins/console/public/src/smart_resize.js +++ b/src/core_plugins/console/public/src/smart_resize.js @@ -1,6 +1,19 @@ -import { throttle } from 'lodash'; +import { get, throttle } from 'lodash'; export default function (editor) { const resize = editor.resize; - return throttle(() => resize.call(editor), 35) + return throttle(() => { + let scrollToRow = get(editor.getCursorPosition(), 'row', 0); + let center = true; + if (scrollToRow === 0) { + scrollToRow = get(editor, 'peggedRow', 0); + center = false; + } + resize.call(editor); + + // Keep current cursor or top line in view when resizing to avoid losing user context + if (scrollToRow !== 0) { + editor.renderer.scrollToLine(scrollToRow, center, false, () => {}); + } + }, 35); } From b3c55d4eed61817451c977bb9620873be2d14d14 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Thu, 24 Aug 2017 15:50:11 -0600 Subject: [PATCH 2/3] rename variable to more descriptive name --- src/core_plugins/console/public/src/smart_resize.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core_plugins/console/public/src/smart_resize.js b/src/core_plugins/console/public/src/smart_resize.js index 14d752fe0ba6b..08e3bc979c855 100644 --- a/src/core_plugins/console/public/src/smart_resize.js +++ b/src/core_plugins/console/public/src/smart_resize.js @@ -3,17 +3,17 @@ import { get, throttle } from 'lodash'; export default function (editor) { const resize = editor.resize; return throttle(() => { - let scrollToRow = get(editor.getCursorPosition(), 'row', 0); + let userRow = get(editor.getCursorPosition(), 'row', 0); let center = true; - if (scrollToRow === 0) { - scrollToRow = get(editor, 'peggedRow', 0); + if (userRow === 0) { + userRow = get(editor, 'peggedRow', 0); center = false; } resize.call(editor); // Keep current cursor or top line in view when resizing to avoid losing user context - if (scrollToRow !== 0) { - editor.renderer.scrollToLine(scrollToRow, center, false, () => {}); + if (userRow !== 0) { + editor.renderer.scrollToLine(userRow, center, false, () => {}); } }, 35); } From 82d3de9420b742e0db26373dda8964b5c8fc4d84 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Fri, 25 Aug 2017 08:37:08 -0600 Subject: [PATCH 3/3] move state from editor to smart_resize --- .../console/public/src/input_resize.js | 3 ++- .../console/public/src/sense_editor/editor.js | 4 ---- .../console/public/src/smart_resize.js | 15 ++++++--------- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/core_plugins/console/public/src/input_resize.js b/src/core_plugins/console/public/src/input_resize.js index 7aff0a5163e78..642a96103b6a3 100644 --- a/src/core_plugins/console/public/src/input_resize.js +++ b/src/core_plugins/console/public/src/input_resize.js @@ -24,7 +24,8 @@ export default function (input, output) { $resizer.addClass('active'); var startWidth = $left.width(); var startX = event.pageX; - input.markTopRow(); + input.resize.topRow = input.renderer.layerConfig.firstRow; + output.resize.topRow = output.renderer.layerConfig.firstRow; function onMove(event) { setEditorWidth(startWidth + event.pageX - startX) diff --git a/src/core_plugins/console/public/src/sense_editor/editor.js b/src/core_plugins/console/public/src/sense_editor/editor.js index c09f195ef95d8..9e12c21383740 100644 --- a/src/core_plugins/console/public/src/sense_editor/editor.js +++ b/src/core_plugins/console/public/src/sense_editor/editor.js @@ -630,9 +630,5 @@ export default function SenseEditor($el) { editor.getSession().on("changeScrollTop", editor.updateActionsBar); - editor.markTopRow = function () { - editor.peggedRow = editor.renderer.layerConfig.firstRow; - } - return editor; } diff --git a/src/core_plugins/console/public/src/smart_resize.js b/src/core_plugins/console/public/src/smart_resize.js index 08e3bc979c855..611db5f4df00a 100644 --- a/src/core_plugins/console/public/src/smart_resize.js +++ b/src/core_plugins/console/public/src/smart_resize.js @@ -2,18 +2,15 @@ import { get, throttle } from 'lodash'; export default function (editor) { const resize = editor.resize; - return throttle(() => { - let userRow = get(editor.getCursorPosition(), 'row', 0); - let center = true; - if (userRow === 0) { - userRow = get(editor, 'peggedRow', 0); - center = false; - } + const throttledResize = throttle(() => { + resize.call(editor); - // Keep current cursor or top line in view when resizing to avoid losing user context + // Keep current top line in view when resizing to avoid losing user context + let userRow = get(throttledResize, 'topRow', 0); if (userRow !== 0) { - editor.renderer.scrollToLine(userRow, center, false, () => {}); + editor.renderer.scrollToLine(userRow, false, false, () => {}); } }, 35); + return throttledResize; }