use jumpToPos more, fix coords calc
This commit is contained in:
parent
6451eb533c
commit
cb64a6bac9
|
@ -126,17 +126,18 @@
|
|||
/**
|
||||
* Sets cursor and centers it in view if `pos` was out of view
|
||||
* @param {CodeMirror.Pos} pos
|
||||
* @param {CodeMirror.Pos} [end] - will set a selection from `pos` to `end`
|
||||
*/
|
||||
jumpToPos(pos) {
|
||||
jumpToPos(pos, end = pos) {
|
||||
const {curOp} = this;
|
||||
if (!curOp) this.startOperation();
|
||||
const coords = this.cursorCoords(pos, 'page');
|
||||
const coords = this.cursorCoords(pos, 'window');
|
||||
const b = this.display.wrapper.getBoundingClientRect();
|
||||
if (coords.top < Math.max(0, b.top + this.defaultTextHeight() * 2) ||
|
||||
coords.bottom > Math.min(window.innerHeight, b.bottom - 100)) {
|
||||
this.scrollIntoView(pos, b.height / 2);
|
||||
}
|
||||
this.setCursor(pos);
|
||||
CodeMirror.prototype.setSelection.call(this, pos, end);
|
||||
if (!curOp) this.endOperation();
|
||||
},
|
||||
});
|
||||
|
|
|
@ -23,7 +23,6 @@ onDOMready().then(() => {
|
|||
const ANNOTATE_SCROLLBAR_DELAY = 350;
|
||||
const ANNOTATE_SCROLLBAR_OPTIONS = {maxMatches: 10e3};
|
||||
const STORAGE_UPDATE_DELAY = 500;
|
||||
const SCROLL_REVEAL_MIN_PX = 50;
|
||||
|
||||
const DIALOG_SELECTOR = '#search-replace-dialog';
|
||||
const DIALOG_STYLE_SELECTOR = '#search-replace-dialog-style';
|
||||
|
@ -80,8 +79,8 @@ onDOMready().then(() => {
|
|||
const cm = target.CodeMirror;
|
||||
(cm || target).focus();
|
||||
if (cm) {
|
||||
const pos = cm.state.search.searchPos;
|
||||
cm.setSelection(pos.from, pos.to);
|
||||
const {from, to} = cm.state.search.searchPos;
|
||||
cm.jumpToPos(from, to);
|
||||
}
|
||||
}
|
||||
destroyDialog({restoreFocus: !found});
|
||||
|
@ -784,21 +783,20 @@ onDOMready().then(() => {
|
|||
function makeMatchVisible(cm, searchCursor) {
|
||||
const canFocus = !state.firstRun && (!state.dialog || !state.dialog.contains(document.activeElement));
|
||||
state.cm = cm;
|
||||
|
||||
// scroll within the editor
|
||||
const pos = searchCursor.pos;
|
||||
Object.assign(getStateSafe(cm), {
|
||||
cursorPos: {
|
||||
from: cm.getCursor('from'),
|
||||
to: cm.getCursor('to'),
|
||||
},
|
||||
searchPos: searchCursor.pos,
|
||||
searchPos: pos,
|
||||
unclosedOp: !cm.curOp,
|
||||
});
|
||||
if (!cm.curOp) cm.startOperation();
|
||||
if (!state.firstRun) {
|
||||
editor.scrollToEditor(cm);
|
||||
cm.setSelection(searchCursor.pos.from, searchCursor.pos.to);
|
||||
cm.scrollIntoView(searchCursor.pos, SCROLL_REVEAL_MIN_PX);
|
||||
cm.jumpToPos(pos.from, pos.to);
|
||||
}
|
||||
// focus or expose as the current search target
|
||||
clearMarker();
|
||||
|
@ -808,7 +806,6 @@ onDOMready().then(() => {
|
|||
} else {
|
||||
makeTargetVisible(cm.display.wrapper);
|
||||
// mark the match
|
||||
const pos = searchCursor.pos;
|
||||
state.marker = cm.state.search.marker = cm.markText(pos.from, pos.to, {
|
||||
className: MATCH_CLASS,
|
||||
clearOnEnter: true,
|
||||
|
|
|
@ -156,6 +156,6 @@ Object.assign(linter, (() => {
|
|||
function gotoLintIssue(cm, anno) {
|
||||
editor.scrollToEditor(cm);
|
||||
cm.focus();
|
||||
cm.setSelection(anno.from);
|
||||
cm.jumpToPos(anno.from);
|
||||
}
|
||||
})());
|
||||
|
|
Loading…
Reference in New Issue
Block a user