mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-13 17:56:25 +00:00
114 lines
2.5 KiB
JavaScript
114 lines
2.5 KiB
JavaScript
import { Point } from '@susisu/mte-kernel'
|
|
|
|
export default class TextEditorInterface {
|
|
constructor (editor) {
|
|
this.editor = editor
|
|
this.doc = editor.getDoc()
|
|
this.transaction = false
|
|
}
|
|
|
|
getCursorPosition () {
|
|
const { line, ch } = this.doc.getCursor()
|
|
return new Point(line, ch)
|
|
}
|
|
|
|
setCursorPosition (pos) {
|
|
this.doc.setCursor({
|
|
line: pos.row,
|
|
ch: pos.column
|
|
})
|
|
}
|
|
|
|
setSelectionRange (range) {
|
|
this.doc.setSelection(
|
|
{ line: range.start.row, ch: range.start.column },
|
|
{ line: range.end.row, ch: range.end.column }
|
|
)
|
|
}
|
|
|
|
getLastRow () {
|
|
return this.doc.lineCount() - 1
|
|
}
|
|
|
|
acceptsTableEdit () {
|
|
return true
|
|
}
|
|
|
|
getLine (row) {
|
|
return this.doc.getLine(row)
|
|
}
|
|
|
|
insertLine (row, line) {
|
|
const lastRow = this.getLastRow()
|
|
if (row > lastRow) {
|
|
const lastLine = this.getLine(lastRow)
|
|
this.doc.replaceRange(
|
|
'\n' + line,
|
|
{ line: lastRow, ch: lastLine.length },
|
|
{ line: lastRow, ch: lastLine.length }
|
|
)
|
|
} else {
|
|
this.doc.replaceRange(
|
|
line + '\n',
|
|
{ line: row, ch: 0 },
|
|
{ line: row, ch: 0 }
|
|
)
|
|
}
|
|
}
|
|
|
|
deleteLine (row) {
|
|
const lastRow = this.getLastRow()
|
|
if (row >= lastRow) {
|
|
if (lastRow > 0) {
|
|
const preLastLine = this.getLine(lastRow - 1)
|
|
const lastLine = this.getLine(lastRow)
|
|
this.doc.replaceRange(
|
|
'',
|
|
{ line: lastRow - 1, ch: preLastLine.length },
|
|
{ line: lastRow, ch: lastLine.length }
|
|
)
|
|
} else {
|
|
const lastLine = this.getLine(lastRow)
|
|
this.doc.replaceRange(
|
|
'',
|
|
{ line: lastRow, ch: 0 },
|
|
{ line: lastRow, ch: lastLine.length }
|
|
)
|
|
}
|
|
} else {
|
|
this.doc.replaceRange(
|
|
'',
|
|
{ line: row, ch: 0 },
|
|
{ line: row + 1, ch: 0 }
|
|
)
|
|
}
|
|
}
|
|
|
|
replaceLines (startRow, endRow, lines) {
|
|
const lastRow = this.getLastRow()
|
|
if (endRow > lastRow) {
|
|
const lastLine = this.getLine(lastRow)
|
|
this.doc.replaceRange(
|
|
lines.join('\n'),
|
|
{ line: startRow, ch: 0 },
|
|
{ line: lastRow, ch: lastLine.length }
|
|
)
|
|
} else {
|
|
this.doc.replaceRange(
|
|
lines.join('\n') + '\n',
|
|
{ line: startRow, ch: 0 },
|
|
{ line: endRow, ch: 0 }
|
|
)
|
|
}
|
|
}
|
|
|
|
transact (func) {
|
|
this.transaction = true
|
|
func()
|
|
this.transaction = false
|
|
if (this.onDidFinishTransaction) {
|
|
this.onDidFinishTransaction.call(undefined)
|
|
}
|
|
}
|
|
}
|