mirror of
https://github.com/ueberdosis/tiptap.git
synced 2024-12-21 07:18:05 +08:00
43 lines
798 B
TypeScript
43 lines
798 B
TypeScript
import { Transaction } from 'prosemirror-state'
|
|
|
|
export interface TrackerResult {
|
|
position: number,
|
|
deleted: boolean,
|
|
}
|
|
|
|
export class Tracker {
|
|
|
|
transaction: Transaction
|
|
|
|
currentStep: number
|
|
|
|
constructor(transaction: Transaction) {
|
|
this.transaction = transaction
|
|
this.currentStep = this.transaction.steps.length
|
|
}
|
|
|
|
map(position: number): TrackerResult {
|
|
let deleted = false
|
|
|
|
const mappedPosition = this.transaction.steps
|
|
.slice(this.currentStep)
|
|
.reduce((newPosition, step) => {
|
|
const mapResult = step
|
|
.getMap()
|
|
.mapResult(newPosition)
|
|
|
|
if (mapResult.deleted) {
|
|
deleted = true
|
|
}
|
|
|
|
return mapResult.pos
|
|
}, position)
|
|
|
|
return {
|
|
position: mappedPosition,
|
|
deleted,
|
|
}
|
|
}
|
|
|
|
}
|