|
|
@@ -19,12 +19,12 @@ const getDataLine = (element: Element | null): number => {
|
|
|
|
|
|
const getEditorElements = (editorRootElement: HTMLElement): Array<Element> => {
|
|
|
return Array.from(editorRootElement.getElementsByClassName('cm-line'))
|
|
|
- .filter((element) => { return !Number.isNaN(element.getAttribute('data-line')) });
|
|
|
+ .filter((element) => { return !Number.isNaN(element.getAttribute('data-line') ?? Number.NaN) });
|
|
|
};
|
|
|
|
|
|
const getPreviewElements = (previewRootElement: HTMLElement): Array<Element> => {
|
|
|
return Array.from(previewRootElement.getElementsByClassName('has-data-line'))
|
|
|
- .filter((element) => { return !Number.isNaN(element.getAttribute('data-line')) });
|
|
|
+ .filter((element) => { return !Number.isNaN(element.getAttribute('data-line') ?? Number.NaN) });
|
|
|
};
|
|
|
|
|
|
// Ref: https://github.com/mikolalysenko/binary-search-bounds/blob/f436a2a8af11bf3208434e18bbac17e18e7a3a30/search-bounds.js
|
|
|
@@ -108,13 +108,15 @@ const scrollEditor = (editorRootElement: HTMLElement, previewRootElement: HTMLEl
|
|
|
const topEditorElementIndex = findTopElementIndex(editorElements);
|
|
|
const topPreviewElementIndex = findElementIndexFromDataLine(previewElements, getDataLine(editorElements[topEditorElementIndex]));
|
|
|
|
|
|
- console.log(getDataLine(editorElements[topEditorElementIndex]));
|
|
|
-
|
|
|
const startEditorElementIndex = findElementIndexFromDataLine(editorElements, getDataLine(previewElements[topPreviewElementIndex]));
|
|
|
const nextEditorElementIndex = findElementIndexFromDataLine(editorElements, getDataLine(previewElements[topPreviewElementIndex + 1]));
|
|
|
|
|
|
let newScrollTop = previewRootElement.scrollTop;
|
|
|
|
|
|
+ if (previewElements[topPreviewElementIndex] == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
newScrollTop += calcScrollElementToTop(previewElements[topPreviewElementIndex]);
|
|
|
newScrollTop += calcScorllElementByRatio(
|
|
|
{
|
|
|
@@ -144,6 +146,10 @@ const scrollPreview = (editorRootElement: HTMLElement, previewRootElement: HTMLE
|
|
|
const startEditorElementIndex = findElementIndexFromDataLine(editorElements, getDataLine(previewElements[topPreviewElementIndex]));
|
|
|
const nextEditorElementIndex = findElementIndexFromDataLine(editorElements, getDataLine(previewElements[topPreviewElementIndex + 1]));
|
|
|
|
|
|
+ if (editorElements[startEditorElementIndex] == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
let newScrollTop = editorRootElement.scrollTop;
|
|
|
|
|
|
newScrollTop += calcScrollElementToTop(editorElements[startEditorElementIndex]);
|