From a757716f684e16c60bff5b58e508106f39368dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Fri, 4 Jun 2021 23:57:41 +0200 Subject: [PATCH] feat: add Tracker class --- packages/core/src/Tracker.ts | 42 ++++++++++++++++++++++++++++++++++++ packages/core/src/index.ts | 1 + 2 files changed, 43 insertions(+) create mode 100644 packages/core/src/Tracker.ts diff --git a/packages/core/src/Tracker.ts b/packages/core/src/Tracker.ts new file mode 100644 index 00000000..e24ebd08 --- /dev/null +++ b/packages/core/src/Tracker.ts @@ -0,0 +1,42 @@ +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, + } + } + +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index e07c6bf4..aa0f4342 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -3,6 +3,7 @@ export * from './Extension' export * from './Node' export * from './Mark' export * from './NodeView' +export * from './Tracker' export * from './types' export { default as nodeInputRule } from './inputRules/nodeInputRule'