mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-13 17:56:25 +00:00
fix scrolling with only one big paragraph
This commit is contained in:
@@ -43,8 +43,9 @@ class MarkdownSplitEditor extends React.Component {
|
|||||||
if (line === 0) {
|
if (line === 0) {
|
||||||
top = 0
|
top = 0
|
||||||
} else {
|
} else {
|
||||||
|
const blockElements = previewDoc.querySelectorAll('body [data-line]')
|
||||||
const blocks = []
|
const blocks = []
|
||||||
for (const block of previewDoc.querySelectorAll('body [data-line]')) {
|
for (const block of blockElements) {
|
||||||
const l = parseInt(block.getAttribute('data-line'))
|
const l = parseInt(block.getAttribute('data-line'))
|
||||||
|
|
||||||
blocks.push({
|
blocks.push({
|
||||||
@@ -57,8 +58,17 @@ class MarkdownSplitEditor extends React.Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (blocks.length === 1) {
|
||||||
|
const block = blockElements[blockElements.length - 1]
|
||||||
|
|
||||||
|
blocks.push({
|
||||||
|
line: editor.doc.size,
|
||||||
|
top: block.offsetTop + block.offsetHeight
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const i = blocks.length - 1
|
const i = blocks.length - 1
|
||||||
if (i > 0) {
|
|
||||||
const ratio =
|
const ratio =
|
||||||
(blocks[i].top - blocks[i - 1].top) /
|
(blocks[i].top - blocks[i - 1].top) /
|
||||||
(blocks[i].line - blocks[i - 1].line)
|
(blocks[i].line - blocks[i - 1].line)
|
||||||
@@ -69,13 +79,6 @@ class MarkdownSplitEditor extends React.Component {
|
|||||||
blocks[i - 1].top +
|
blocks[i - 1].top +
|
||||||
Math.floor((line - blocks[i - 1].line) * ratio) -
|
Math.floor((line - blocks[i - 1].line) * ratio) -
|
||||||
delta
|
delta
|
||||||
} else {
|
|
||||||
const srcTop = _.get(editor.doc, 'scrollTop')
|
|
||||||
const srcHeight = _.get(editor.doc, 'height')
|
|
||||||
const targetHeight = _.get(previewDoc, 'body.scrollHeight')
|
|
||||||
|
|
||||||
top = (targetHeight * srcTop) / srcHeight
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.scrollTo(previewTop, top, y =>
|
this.scrollTo(previewTop, top, y =>
|
||||||
@@ -118,8 +121,9 @@ class MarkdownSplitEditor extends React.Component {
|
|||||||
} else {
|
} else {
|
||||||
const line = from + Math.floor((to - from) / 3)
|
const line = from + Math.floor((to - from) / 3)
|
||||||
|
|
||||||
|
const blockElements = previewDoc.querySelectorAll('body [data-line]')
|
||||||
const blocks = []
|
const blocks = []
|
||||||
for (const block of previewDoc.querySelectorAll('body [data-line]')) {
|
for (const block of blockElements) {
|
||||||
const l = parseInt(block.getAttribute('data-line'))
|
const l = parseInt(block.getAttribute('data-line'))
|
||||||
|
|
||||||
blocks.push({
|
blocks.push({
|
||||||
@@ -132,6 +136,15 @@ class MarkdownSplitEditor extends React.Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (blocks.length === 1) {
|
||||||
|
const block = blockElements[blockElements.length - 1]
|
||||||
|
|
||||||
|
blocks.push({
|
||||||
|
line: codeDoc.size,
|
||||||
|
top: block.offsetTop + block.offsetHeight
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const i = blocks.length - 1
|
const i = blocks.length - 1
|
||||||
|
|
||||||
const ratio =
|
const ratio =
|
||||||
@@ -166,8 +179,9 @@ class MarkdownSplitEditor extends React.Component {
|
|||||||
const delta = Math.floor(_.get(previewDoc, 'body.clientHeight') / 3)
|
const delta = Math.floor(_.get(previewDoc, 'body.clientHeight') / 3)
|
||||||
const previewTop = srcTop + delta
|
const previewTop = srcTop + delta
|
||||||
|
|
||||||
|
const blockElements = previewDoc.querySelectorAll('body [data-line]')
|
||||||
const blocks = []
|
const blocks = []
|
||||||
for (const block of previewDoc.querySelectorAll('body [data-line]')) {
|
for (const block of blockElements) {
|
||||||
const top = block.offsetTop
|
const top = block.offsetTop
|
||||||
|
|
||||||
blocks.push({
|
blocks.push({
|
||||||
@@ -180,23 +194,24 @@ class MarkdownSplitEditor extends React.Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (blocks.length === 1) {
|
||||||
|
const block = blockElements[blockElements.length - 1]
|
||||||
|
|
||||||
|
blocks.push({
|
||||||
|
line: codeDoc.size,
|
||||||
|
top: block.offsetTop + block.offsetHeight
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const i = blocks.length - 1
|
const i = blocks.length - 1
|
||||||
if (i > 0) {
|
|
||||||
const from = codeDoc.cm.heightAtLine(blocks[i - 1].line, 'local')
|
const from = codeDoc.cm.heightAtLine(blocks[i - 1].line, 'local')
|
||||||
const to = codeDoc.cm.heightAtLine(blocks[i].line, 'local')
|
const to = codeDoc.cm.heightAtLine(blocks[i].line, 'local')
|
||||||
|
|
||||||
const ratio =
|
const ratio =
|
||||||
(previewTop - blocks[i - 1].top) /
|
(previewTop - blocks[i - 1].top) / (blocks[i].top - blocks[i - 1].top)
|
||||||
(blocks[i].top - blocks[i - 1].top)
|
|
||||||
|
|
||||||
top = from + Math.floor((to - from) * ratio) - delta
|
top = from + Math.floor((to - from) * ratio) - delta
|
||||||
} else {
|
|
||||||
const srcTop = _.get(previewDoc, 'body.scrollTop')
|
|
||||||
const srcHeight = _.get(previewDoc, 'body.scrollHeight')
|
|
||||||
const targetHeight = _.get(codeDoc, 'height')
|
|
||||||
|
|
||||||
top = (targetHeight * srcTop) / srcHeight
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.scrollTo(editorTop, top, y => codeDoc.cm.scrollTo(0, y))
|
this.scrollTo(editorTop, top, y => codeDoc.cm.scrollTo(0, y))
|
||||||
|
|||||||
Reference in New Issue
Block a user