working basic functionality
parent
f6d9c7e705
commit
d6075bd042
|
@ -888,7 +888,7 @@ function Ace2Inner() {
|
||||||
if (isTimeUp()) return;
|
if (isTimeUp()) return;
|
||||||
|
|
||||||
const visibleRange = scroll.getVisibleCharRange(rep);
|
const visibleRange = scroll.getVisibleCharRange(rep);
|
||||||
top.console.log('getVisibleCharRange', visibleRange);
|
// top.console.log('getVisibleCharRange', visibleRange);
|
||||||
const docRange = [0, rep.lines.totalWidth()];
|
const docRange = [0, rep.lines.totalWidth()];
|
||||||
finishedImportantWork = true;
|
finishedImportantWork = true;
|
||||||
finishedWork = true;
|
finishedWork = true;
|
||||||
|
@ -3048,27 +3048,41 @@ function Ace2Inner() {
|
||||||
}
|
}
|
||||||
if ((evt.which == 36 && evt.ctrlKey == true) && padShortcutEnabled.ctrlHome) { scroll.setScrollY(0); } // Control Home send to Y = 0
|
if ((evt.which == 36 && evt.ctrlKey == true) && padShortcutEnabled.ctrlHome) { scroll.setScrollY(0); } // Control Home send to Y = 0
|
||||||
if ((evt.which == 33 || evt.which == 34) && type == 'keydown' && !evt.ctrlKey) {
|
if ((evt.which == 33 || evt.which == 34) && type == 'keydown' && !evt.ctrlKey) {
|
||||||
evt.preventDefault(); // This is required, browsers will try to do normal default behavior on page up / down and the default behavior SUCKS
|
// This is required, browsers will try to do normal default behavior on page up / down
|
||||||
|
// and the default behavior SUCKS
|
||||||
|
evt.preventDefault();
|
||||||
|
|
||||||
const oldVisibleLineRange = scroll.getVisibleLineRange(rep);
|
const visibleLineRange = scroll.getVisibleLineRange(rep); // [0,6]
|
||||||
top.console.log('oldviz', oldVisibleLineRange)
|
|
||||||
let visLines = oldVisibleLineRange[1] - oldVisibleLineRange[0];
|
|
||||||
let topOffset = rep.selStart[0] - oldVisibleLineRange[0];
|
|
||||||
if (topOffset < 0) {
|
|
||||||
topOffset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const isPageDown = evt.which === 34;
|
const isPageDown = evt.which === 34;
|
||||||
const isPageUp = evt.which === 33;
|
const isPageUp = evt.which === 33;
|
||||||
|
const linesLength = rep.lines.length();
|
||||||
|
|
||||||
if(isPageDown){
|
if (isPageUp) {
|
||||||
rep.selStart[0] += visLines;
|
// go to the top of the visible content
|
||||||
rep.selEnd[0] += visLines;
|
rep.selStart[0] -= visibleLineRange[1] - visibleLineRange[0];
|
||||||
updateBrowserSelectionFromRep(); // works
|
rep.selEnd[0] -= visibleLineRange[1] - visibleLineRange[0];
|
||||||
scroll.scrollNodeVerticallyIntoView(); // always slightly off...
|
// if the new rep is beyond the viewport, put the caret on the last line
|
||||||
|
if (rep.selStart[0] < 0) {
|
||||||
|
rep.selStart = [0, 0];
|
||||||
|
rep.selEnd = [0, 0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isPageDown) {
|
||||||
|
// go to the bottom of the last visible content
|
||||||
|
rep.selStart[0] += visibleLineRange[1];
|
||||||
|
rep.selEnd[0] += visibleLineRange[1];
|
||||||
|
// if the new rep is beyond the viewport, put the caret on the last line
|
||||||
|
if (rep.selStart[0] > linesLength) {
|
||||||
|
rep.selStart = [linesLength - 1, 0];
|
||||||
|
rep.selEnd = [linesLength - 1, 0];
|
||||||
|
}
|
||||||
|
// TODO: Handle if character is X offset from content
|
||||||
|
}
|
||||||
|
|
||||||
|
updateBrowserSelectionFromRep(); // works
|
||||||
|
scroll.scrollNodeVerticallyIntoView(); // TODO: always slightly off...
|
||||||
}
|
}
|
||||||
|
|
||||||
// scroll to viewport when user presses arrow keys and caret is out of the viewport
|
// scroll to viewport when user presses arrow keys and caret is out of the viewport
|
||||||
|
|
|
@ -281,14 +281,16 @@ Scroll.prototype.scrollNodeVerticallyIntoView = function (rep, innerHeight) {
|
||||||
// So, when the line scrolled gets outside of the viewport we let the browser handle it.
|
// So, when the line scrolled gets outside of the viewport we let the browser handle it.
|
||||||
const linePosition = caretPosition.getPosition();
|
const linePosition = caretPosition.getPosition();
|
||||||
if (linePosition) {
|
if (linePosition) {
|
||||||
top.console.log('linepos', linePosition);
|
// top.console.log('linepos', linePosition);
|
||||||
const distanceOfTopOfViewport = linePosition.top - viewport.top;
|
const distanceOfTopOfViewport = linePosition.top - viewport.top;
|
||||||
const distanceOfBottomOfViewport = viewport.bottom - linePosition.bottom - 20;
|
// TODO: Replace the below hack with the current caret location line height
|
||||||
|
const HACK = 20;
|
||||||
|
const distanceOfBottomOfViewport = viewport.bottom - linePosition.bottom - HACK;
|
||||||
// guessed value.. The above line needs to know the height of this element!
|
// guessed value.. The above line needs to know the height of this element!
|
||||||
|
|
||||||
const caretIsAboveOfViewport = distanceOfTopOfViewport < 0;
|
const caretIsAboveOfViewport = distanceOfTopOfViewport < 0;
|
||||||
const caretIsBelowOfViewport = distanceOfBottomOfViewport < 0;
|
const caretIsBelowOfViewport = distanceOfBottomOfViewport < 0;
|
||||||
top.console.log('isbelow', caretIsBelowOfViewport);
|
// top.console.log('isbelow', caretIsBelowOfViewport);
|
||||||
if (caretIsAboveOfViewport) {
|
if (caretIsAboveOfViewport) {
|
||||||
const pixelsToScroll =
|
const pixelsToScroll =
|
||||||
distanceOfTopOfViewport - this._getPixelsRelativeToPercentageOfViewport(innerHeight, true);
|
distanceOfTopOfViewport - this._getPixelsRelativeToPercentageOfViewport(innerHeight, true);
|
||||||
|
@ -345,7 +347,7 @@ Scroll.prototype.getVisibleLineRange = function (rep) {
|
||||||
|
|
||||||
Scroll.prototype.getVisibleCharRange = function (rep) {
|
Scroll.prototype.getVisibleCharRange = function (rep) {
|
||||||
const lineRange = this.getVisibleLineRange(rep);
|
const lineRange = this.getVisibleLineRange(rep);
|
||||||
top.console.log(rep.lines);
|
// top.console.log(rep.lines);
|
||||||
return [rep.lines.offsetOfIndex(lineRange[0]), rep.lines.offsetOfIndex(lineRange[1])];
|
return [rep.lines.offsetOfIndex(lineRange[0]), rep.lines.offsetOfIndex(lineRange[1])];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue