@manuscripts/track-changes-plugin 2.1.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/ChangeSet.js +23 -9
- package/dist/cjs/actions.js +3 -1
- package/dist/cjs/{changes/applyChanges.js → applyChanges.js} +16 -16
- package/dist/cjs/{changes → changeHelpers}/revertChange.js +3 -4
- package/dist/cjs/{mutate/dropStructureChange.js → changeHelpers/structureChange.js} +23 -17
- package/dist/cjs/{changes → changeHelpers}/updateChangeAttrs.js +4 -5
- package/dist/cjs/{changes → changeHelpers}/updateChangesStatus.js +5 -5
- package/dist/cjs/{changes/findChanges.js → findChanges.js} +5 -5
- package/dist/cjs/helpers/attributes.js +157 -0
- package/dist/cjs/{compute/setFragmentAsInserted.js → helpers/fragment.js} +71 -79
- package/dist/cjs/helpers/mark.js +19 -0
- package/dist/cjs/plugin.js +13 -22
- package/dist/cjs/trackChanges.js +47 -0
- package/dist/cjs/{change-steps → tracking/change-step}/diffChangeSteps.js +23 -28
- package/dist/cjs/{utils/mapChangeStep.js → tracking/change-step/mapChangeSteps.js} +1 -1
- package/dist/cjs/{change-steps → tracking/change-step}/processChangeSteps.js +14 -48
- package/dist/cjs/tracking/fixAndHandleSelection.js +54 -0
- package/dist/cjs/{mutate → tracking/lib}/deleteAndMergeSplitNodes.js +7 -40
- package/dist/cjs/{mutate → tracking/lib}/deleteNode.js +8 -9
- package/dist/cjs/{mutate/deleteText.js → tracking/lib/deleteTextIfInserted.js} +4 -4
- package/dist/cjs/{change-steps → tracking/lib}/matchInserted.js +15 -23
- package/dist/cjs/{mutate → tracking/lib}/mergeTrackedMarks.js +3 -3
- package/dist/cjs/tracking/lib/processStepsBeforeTracking.js +17 -0
- package/dist/cjs/{steps/utils.js → tracking/steps-trackers/qualifiers.js} +37 -10
- package/dist/cjs/{steps/trackAttrsChange.js → tracking/steps-trackers/trackAttrsChangeStep.js} +3 -3
- package/dist/cjs/{steps → tracking/steps-trackers}/trackMarkSteps.js +14 -11
- package/dist/cjs/{steps → tracking/steps-trackers}/trackReplaceAroundStep.js +12 -46
- package/dist/cjs/tracking/steps-trackers/trackReplaceStep.js +85 -0
- package/dist/cjs/tracking/trackTransaction.js +93 -0
- package/dist/cjs/tracking/transactionProcessing.js +164 -0
- package/dist/cjs/tracking/types.js +17 -0
- package/dist/es/ChangeSet.js +23 -9
- package/dist/es/actions.js +1 -0
- package/dist/es/{changes/applyChanges.js → applyChanges.js} +10 -10
- package/dist/es/{changes → changeHelpers}/revertChange.js +1 -2
- package/dist/es/{mutate/dropStructureChange.js → changeHelpers/structureChange.js} +10 -5
- package/dist/es/{changes → changeHelpers}/updateChangeAttrs.js +2 -3
- package/dist/es/{changes → changeHelpers}/updateChangesStatus.js +4 -4
- package/dist/es/{changes/findChanges.js → findChanges.js} +3 -3
- package/dist/es/helpers/attributes.js +136 -0
- package/dist/es/{compute/setFragmentAsInserted.js → helpers/fragment.js} +66 -42
- package/dist/es/helpers/mark.js +15 -0
- package/dist/es/plugin.js +12 -21
- package/dist/es/trackChanges.js +44 -0
- package/dist/es/{change-steps → tracking/change-step}/diffChangeSteps.js +23 -28
- package/dist/es/{utils/mapChangeStep.js → tracking/change-step/mapChangeSteps.js} +1 -1
- package/dist/es/{change-steps → tracking/change-step}/processChangeSteps.js +10 -11
- package/dist/es/tracking/fixAndHandleSelection.js +49 -0
- package/dist/es/{mutate → tracking/lib}/deleteAndMergeSplitNodes.js +7 -7
- package/dist/es/{mutate → tracking/lib}/deleteNode.js +4 -5
- package/dist/es/{mutate/deleteText.js → tracking/lib/deleteTextIfInserted.js} +1 -1
- package/dist/es/{change-steps → tracking/lib}/matchInserted.js +15 -23
- package/dist/es/{mutate → tracking/lib}/mergeTrackedMarks.js +2 -2
- package/dist/es/tracking/lib/processStepsBeforeTracking.js +14 -0
- package/dist/es/{steps/utils.js → tracking/steps-trackers/qualifiers.js} +32 -7
- package/dist/es/{steps/trackAttrsChange.js → tracking/steps-trackers/trackAttrsChangeStep.js} +3 -3
- package/dist/es/{steps → tracking/steps-trackers}/trackMarkSteps.js +6 -3
- package/dist/es/{steps → tracking/steps-trackers}/trackReplaceAroundStep.js +9 -10
- package/dist/es/{steps → tracking/steps-trackers}/trackReplaceStep.js +34 -26
- package/dist/es/tracking/trackTransaction.js +87 -0
- package/dist/es/tracking/transactionProcessing.js +153 -0
- package/dist/es/tracking/types.js +16 -0
- package/dist/types/ChangeSet.d.ts +4 -1
- package/dist/types/actions.d.ts +1 -0
- package/dist/types/applyChanges.d.ts +6 -0
- package/dist/types/{mutate/dropStructureChange.d.ts → changeHelpers/structureChange.d.ts} +2 -1
- package/dist/types/{changes/findChanges.d.ts → findChanges.d.ts} +1 -1
- package/dist/types/helpers/attributes.d.ts +47 -0
- package/dist/types/{compute/setFragmentAsInserted.d.ts → helpers/fragment.d.ts} +3 -1
- package/dist/types/helpers/mark.d.ts +3 -0
- package/dist/types/trackChanges.d.ts +17 -0
- package/dist/types/tracking/change-step/diffChangeSteps.d.ts +17 -0
- package/dist/types/{utils/mapChangeStep.d.ts → tracking/change-step/mapChangeSteps.d.ts} +2 -2
- package/dist/types/tracking/change-step/processChangeSteps.d.ts +6 -0
- package/dist/types/tracking/fixAndHandleSelection.d.ts +20 -0
- package/dist/types/{mutate → tracking/lib}/deleteAndMergeSplitNodes.d.ts +4 -5
- package/dist/types/{mutate → tracking/lib}/deleteNode.d.ts +2 -2
- package/dist/types/{mutate/deleteText.d.ts → tracking/lib/deleteTextIfInserted.d.ts} +1 -1
- package/dist/types/tracking/lib/matchInserted.d.ts +18 -0
- package/dist/types/tracking/lib/processStepsBeforeTracking.d.ts +4 -0
- package/dist/types/{compute → tracking/lib}/splitSliceIntoMergedParts.d.ts +1 -1
- package/dist/types/{steps/utils.d.ts → tracking/steps-trackers/qualifiers.d.ts} +5 -3
- package/dist/types/{steps/trackAttrsChange.d.ts → tracking/steps-trackers/trackAttrsChangeStep.d.ts} +4 -4
- package/dist/types/{steps → tracking/steps-trackers}/trackMarkSteps.d.ts +1 -1
- package/dist/types/{steps → tracking/steps-trackers}/trackReplaceAroundStep.d.ts +2 -2
- package/dist/types/tracking/steps-trackers/trackReplaceStep.d.ts +5 -0
- package/dist/types/tracking/trackTransaction.d.ts +4 -0
- package/dist/types/tracking/transactionProcessing.d.ts +12 -0
- package/dist/types/tracking/types.d.ts +65 -0
- package/dist/types/types/change.d.ts +1 -1
- package/dist/types/types/track.d.ts +0 -30
- package/package.json +2 -2
- package/dist/cjs/compute/nodeHelpers.js +0 -83
- package/dist/cjs/steps/trackReplaceStep.js +0 -110
- package/dist/cjs/steps/trackTransaction.js +0 -162
- package/dist/cjs/types/step.js +0 -2
- package/dist/cjs/utils/track-utils.js +0 -239
- package/dist/es/compute/nodeHelpers.js +0 -73
- package/dist/es/steps/trackTransaction.js +0 -156
- package/dist/es/types/step.js +0 -1
- package/dist/es/utils/track-utils.js +0 -217
- package/dist/types/change-steps/diffChangeSteps.d.ts +0 -2
- package/dist/types/change-steps/matchInserted.d.ts +0 -3
- package/dist/types/change-steps/processChangeSteps.d.ts +0 -6
- package/dist/types/changes/applyChanges.d.ts +0 -6
- package/dist/types/compute/nodeHelpers.d.ts +0 -14
- package/dist/types/steps/trackReplaceStep.d.ts +0 -6
- package/dist/types/steps/trackTransaction.d.ts +0 -3
- package/dist/types/types/step.d.ts +0 -40
- package/dist/types/utils/track-utils.d.ts +0 -24
- /package/dist/cjs/{changes → changeHelpers}/fixInconsistentChanges.js +0 -0
- /package/dist/cjs/{mutate → tracking/lib}/mergeNode.js +0 -0
- /package/dist/cjs/{compute → tracking/lib}/splitSliceIntoMergedParts.js +0 -0
- /package/dist/es/{changes → changeHelpers}/fixInconsistentChanges.js +0 -0
- /package/dist/es/{mutate → tracking/lib}/mergeNode.js +0 -0
- /package/dist/es/{compute → tracking/lib}/splitSliceIntoMergedParts.js +0 -0
- /package/dist/types/{changes → changeHelpers}/fixInconsistentChanges.d.ts +0 -0
- /package/dist/types/{changes → changeHelpers}/revertChange.d.ts +0 -0
- /package/dist/types/{changes → changeHelpers}/updateChangeAttrs.d.ts +0 -0
- /package/dist/types/{changes → changeHelpers}/updateChangesStatus.d.ts +0 -0
- /package/dist/types/{mutate → tracking/lib}/mergeNode.d.ts +0 -0
- /package/dist/types/{mutate → tracking/lib}/mergeTrackedMarks.d.ts +0 -0
|
@@ -14,15 +14,17 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { Node as PMNode, Slice } from 'prosemirror-model';
|
|
17
|
-
import { Selection
|
|
17
|
+
import { Selection } from 'prosemirror-state';
|
|
18
18
|
import { ReplaceAroundStep, ReplaceStep } from 'prosemirror-transform';
|
|
19
|
+
export declare const isDeleteStep: (step: ReplaceStep) => boolean;
|
|
19
20
|
export declare const isSplitStep: (step: ReplaceStep, selection: Selection, uiEvent: string) => boolean;
|
|
20
21
|
export declare const isWrapStep: (step: ReplaceAroundStep) => boolean;
|
|
21
22
|
export declare const isLiftStep: (step: ReplaceAroundStep) => boolean;
|
|
22
|
-
export declare function
|
|
23
|
+
export declare function isLiftStepForGap(gap: {
|
|
23
24
|
start: number;
|
|
24
25
|
end: number;
|
|
25
26
|
slice: Slice;
|
|
26
27
|
insert: number;
|
|
27
28
|
}, node: PMNode, to: number): boolean;
|
|
28
|
-
export declare const
|
|
29
|
+
export declare const isDirectPendingMoveDeletion: (step: ReplaceStep, doc: PMNode, movingSteps: Map<ReplaceStep, string>) => boolean;
|
|
30
|
+
export declare const isDeletingPendingMovedNode: (step: ReplaceStep, doc: PMNode) => string | undefined;
|
package/dist/types/{steps/trackAttrsChange.d.ts → tracking/steps-trackers/trackAttrsChangeStep.d.ts}
RENAMED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
import { Node as PMNode } from 'prosemirror-model';
|
|
17
17
|
import { EditorState, Transaction } from 'prosemirror-state';
|
|
18
18
|
import { AttrStep } from 'prosemirror-transform';
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
declare function
|
|
22
|
-
export default
|
|
19
|
+
import { NewEmptyAttrs } from '../../helpers/attributes';
|
|
20
|
+
import { ChangeStep } from '../types';
|
|
21
|
+
declare function trackAttrsChangeStep(step: AttrStep, oldState: EditorState, tr: Transaction, newTr: Transaction, attrs: NewEmptyAttrs, currentStepDoc: PMNode): ChangeStep[];
|
|
22
|
+
export default trackAttrsChangeStep;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Node as PMNode } from 'prosemirror-model';
|
|
2
2
|
import { Transaction } from 'prosemirror-state';
|
|
3
3
|
import { AddMarkStep, AddNodeMarkStep, RemoveMarkStep, RemoveNodeMarkStep } from 'prosemirror-transform';
|
|
4
|
-
import { NewEmptyAttrs } from '
|
|
4
|
+
import { NewEmptyAttrs } from '../../helpers/attributes';
|
|
5
5
|
export declare function trackRemoveMarkStep(step: RemoveMarkStep, emptyAttrs: NewEmptyAttrs, newTr: Transaction, doc: PMNode): void;
|
|
6
6
|
export declare function trackRemoveNodeMarkStep(step: RemoveNodeMarkStep, emptyAttrs: NewEmptyAttrs, newTr: Transaction, doc: PMNode): void;
|
|
7
7
|
export declare function trackAddMarkStep(step: AddMarkStep, emptyAttrs: NewEmptyAttrs, newTr: Transaction, doc: PMNode): void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Node as PMNode } from 'prosemirror-model';
|
|
2
2
|
import type { EditorState, Transaction } from 'prosemirror-state';
|
|
3
3
|
import { ReplaceAroundStep } from 'prosemirror-transform';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { NewEmptyAttrs } from '../../helpers/attributes';
|
|
5
|
+
import { ChangeStep, TrTrackingContext } from '../types';
|
|
6
6
|
export declare function trackReplaceAroundStep(step: ReplaceAroundStep, oldState: EditorState, tr: Transaction, newTr: Transaction, attrs: NewEmptyAttrs, currentStepDoc: PMNode, trContext: TrTrackingContext): ChangeStep[];
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { EditorState, Transaction } from 'prosemirror-state';
|
|
2
|
+
import { Mapping } from 'prosemirror-transform';
|
|
3
|
+
import { NewEmptyAttrs } from '../../helpers/attributes';
|
|
4
|
+
import { ChangeStep, TrTrackingContext } from '../types';
|
|
5
|
+
export declare function trackReplaceStep(i: number, oldState: EditorState, newTr: Transaction, attrsTemplate: NewEmptyAttrs, tr: Transaction, deletedNodeMapping: Mapping, trContext: TrTrackingContext): [ChangeStep[], number | undefined];
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { EditorState, Transaction } from 'prosemirror-state';
|
|
2
|
+
import { Step } from 'prosemirror-transform';
|
|
3
|
+
import { TrTrackingContext } from './types';
|
|
4
|
+
export declare function trackTransaction(tr: Transaction, oldState: EditorState, newTr: Transaction, authorID: string, clearedSteps: Step[], trContext: TrTrackingContext): Transaction;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Node as PMNode } from 'prosemirror-model';
|
|
2
|
+
import { Transaction } from 'prosemirror-state';
|
|
3
|
+
import { ReplaceStep, Step } from 'prosemirror-transform';
|
|
4
|
+
import { TrTrackingContext } from './types';
|
|
5
|
+
export declare function getIndentationOperationSteps(tr: Transaction, trContext: TrTrackingContext): void;
|
|
6
|
+
export declare const excludeFromTracking: (node: PMNode) => boolean;
|
|
7
|
+
export declare function passThroughMeta(oldTr: Transaction, newTr: Transaction): Transaction;
|
|
8
|
+
export declare function iterationIsValid(iterations: number, oldTr: Transaction, newTr: Transaction, step: Step): boolean;
|
|
9
|
+
export declare const getMoveOperationsSteps: (tr: Transaction, context: TrTrackingContext) => Map<ReplaceStep, string> | undefined;
|
|
10
|
+
export declare const changeMovedToInsertsOnSourceDeletion: (tr: Transaction, newTr: Transaction, trContext: TrTrackingContext) => void;
|
|
11
|
+
export declare const filterMeaninglessMoveSteps: (tr: Transaction, context: TrTrackingContext) => (Step | null)[];
|
|
12
|
+
export declare const trFromHistory: (tr: Transaction) => string | undefined;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* © 2025 Atypon Systems LLC
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { Fragment } from 'prosemirror-model';
|
|
17
|
+
import { ReplaceAroundStep, ReplaceStep } from 'prosemirror-transform';
|
|
18
|
+
import { getAction } from '../actions';
|
|
19
|
+
export type TrTrackingContext = {
|
|
20
|
+
prevLiftStep?: ReplaceAroundStep;
|
|
21
|
+
liftFragment?: Fragment;
|
|
22
|
+
action: ReturnType<typeof getAction>;
|
|
23
|
+
stepsByGroupIDMap: Map<ReplaceStep, string>;
|
|
24
|
+
selectionPosFromInsertion?: number;
|
|
25
|
+
};
|
|
26
|
+
import { Node as PMNode } from 'prosemirror-model';
|
|
27
|
+
import { ExposedFragment, ExposedSlice } from '../types/pm';
|
|
28
|
+
export interface DeleteNodeStep {
|
|
29
|
+
pos: number;
|
|
30
|
+
nodeEnd: number;
|
|
31
|
+
type: 'delete-node';
|
|
32
|
+
node: PMNode;
|
|
33
|
+
ref?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface DeleteTextStep {
|
|
36
|
+
pos: number;
|
|
37
|
+
from: number;
|
|
38
|
+
to: number;
|
|
39
|
+
type: 'delete-text';
|
|
40
|
+
node: PMNode;
|
|
41
|
+
ref?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface MergeFragmentStep {
|
|
44
|
+
pos: number;
|
|
45
|
+
mergePos: number;
|
|
46
|
+
from: number;
|
|
47
|
+
to: number;
|
|
48
|
+
type: 'merge-fragment';
|
|
49
|
+
node: PMNode;
|
|
50
|
+
fragment: ExposedFragment;
|
|
51
|
+
}
|
|
52
|
+
export interface InsertSliceStep {
|
|
53
|
+
from: number;
|
|
54
|
+
to: number;
|
|
55
|
+
sliceWasSplit: boolean;
|
|
56
|
+
type: 'insert-slice';
|
|
57
|
+
slice: ExposedSlice;
|
|
58
|
+
}
|
|
59
|
+
export interface UpdateNodeAttrsStep {
|
|
60
|
+
pos: number;
|
|
61
|
+
type: 'update-node-attrs';
|
|
62
|
+
node: PMNode;
|
|
63
|
+
newAttrs: Record<string, any>;
|
|
64
|
+
}
|
|
65
|
+
export type ChangeStep = DeleteNodeStep | DeleteTextStep | MergeFragmentStep | InsertSliceStep | UpdateNodeAttrsStep;
|
|
@@ -63,7 +63,7 @@ export type StructureAttrs = Omit<InsertDeleteAttrs, 'operation'> & {
|
|
|
63
63
|
action: string;
|
|
64
64
|
};
|
|
65
65
|
export type TrackedAttrs = InsertDeleteAttrs | UpdateAttrs | WrapAttrs | NodeSplitAttrs | ReferenceAttrs | NodeMoveAttrs | StructureAttrs;
|
|
66
|
-
type Change = {
|
|
66
|
+
export type Change = {
|
|
67
67
|
id: string;
|
|
68
68
|
from: number;
|
|
69
69
|
to: number;
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import { Fragment } from 'prosemirror-model';
|
|
2
1
|
import type { PluginKey } from 'prosemirror-state';
|
|
3
|
-
import { ReplaceAroundStep } from 'prosemirror-transform';
|
|
4
2
|
import { ChangeSet } from '../ChangeSet';
|
|
5
|
-
import { CHANGE_OPERATION, TrackedAttrs } from './change';
|
|
6
3
|
export interface TrackChangesOptions {
|
|
7
4
|
debug?: boolean;
|
|
8
5
|
userID: string;
|
|
@@ -14,35 +11,8 @@ export interface TrackChangesState {
|
|
|
14
11
|
userID: string;
|
|
15
12
|
changeSet: ChangeSet;
|
|
16
13
|
}
|
|
17
|
-
export type NewEmptyAttrs = Omit<TrackedAttrs, 'id' | 'operation'>;
|
|
18
|
-
export type NewInsertAttrs = Omit<TrackedAttrs, 'id' | 'operation'> & {
|
|
19
|
-
operation: CHANGE_OPERATION.insert | CHANGE_OPERATION.wrap_with_node | CHANGE_OPERATION.structure;
|
|
20
|
-
};
|
|
21
|
-
export type NewDeleteAttrs = Omit<TrackedAttrs, 'id' | 'operation'> & {
|
|
22
|
-
operation: CHANGE_OPERATION.delete;
|
|
23
|
-
};
|
|
24
|
-
export type NewUpdateAttrs = Omit<TrackedAttrs, 'id' | 'operation'> & {
|
|
25
|
-
operation: CHANGE_OPERATION.set_node_attributes;
|
|
26
|
-
oldAttrs: Record<string, any>;
|
|
27
|
-
};
|
|
28
|
-
export type NewSplitNodeAttrs = Omit<TrackedAttrs, 'id' | 'operation'> & {
|
|
29
|
-
operation: CHANGE_OPERATION.node_split;
|
|
30
|
-
};
|
|
31
|
-
export type NewMoveAttrs = Omit<TrackedAttrs, 'id' | 'operation'> & {
|
|
32
|
-
operation: CHANGE_OPERATION.move;
|
|
33
|
-
indentationType?: 'indent' | 'unindent';
|
|
34
|
-
};
|
|
35
|
-
export type NewReferenceAttrs = Omit<TrackedAttrs, 'id' | 'operation'> & {
|
|
36
|
-
operation: CHANGE_OPERATION.reference;
|
|
37
|
-
referenceId: string;
|
|
38
|
-
};
|
|
39
|
-
export type NewTrackedAttrs = NewInsertAttrs | NewDeleteAttrs | NewUpdateAttrs | NewMoveAttrs;
|
|
40
14
|
export declare enum TrackChangesStatus {
|
|
41
15
|
enabled = "enabled",
|
|
42
16
|
viewSnapshots = "view-snapshots",
|
|
43
17
|
disabled = "disabled"
|
|
44
18
|
}
|
|
45
|
-
export type TrTrackingContext = {
|
|
46
|
-
prevLiftStep?: ReplaceAroundStep;
|
|
47
|
-
liftFragment?: Fragment;
|
|
48
|
-
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@manuscripts/track-changes-plugin",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"author": "Atypon Systems LLC",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://github.com/Atypon-OpenSource/manuscripts-track-changes-plugin",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"build:es": "tsc --outDir dist/es --declarationDir dist/types --declaration",
|
|
18
18
|
"dev": "npm-run-all --parallel 'build:* --watch'",
|
|
19
19
|
"test": "jest --runInBand",
|
|
20
|
-
"test-rs": "jest -i test/
|
|
20
|
+
"test-rs": "jest -i test/nodes/nodes.test.ts",
|
|
21
21
|
"format": "prettier --write \"*.+(js|json|yml|yaml|ts|md|graphql|mdx)\" src/ test/",
|
|
22
22
|
"typecheck": "tsc --project tsconfig.test.json --noEmit",
|
|
23
23
|
"lint": "eslint --cache --ext .js,.ts, ./src ./test",
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.addTrackIdIfDoesntExist = addTrackIdIfDoesntExist;
|
|
4
|
-
exports.getTextNodeTrackedMarkData = getTextNodeTrackedMarkData;
|
|
5
|
-
exports.getBlockInlineTrackedData = getBlockInlineTrackedData;
|
|
6
|
-
exports.getMarkTrackedData = getMarkTrackedData;
|
|
7
|
-
exports.getNodeTrackedData = getNodeTrackedData;
|
|
8
|
-
exports.equalMarks = equalMarks;
|
|
9
|
-
exports.shouldMergeTrackedAttributes = shouldMergeTrackedAttributes;
|
|
10
|
-
exports.getMergeableMarkTrackedAttrs = getMergeableMarkTrackedAttrs;
|
|
11
|
-
const change_1 = require("../types/change");
|
|
12
|
-
const logger_1 = require("../utils/logger");
|
|
13
|
-
const track_utils_1 = require("../utils/track-utils");
|
|
14
|
-
const uuidv4_1 = require("../utils/uuidv4");
|
|
15
|
-
function addTrackIdIfDoesntExist(attrs) {
|
|
16
|
-
if (!attrs.id) {
|
|
17
|
-
return Object.assign({ id: (0, uuidv4_1.uuidv4)() }, attrs);
|
|
18
|
-
}
|
|
19
|
-
return attrs;
|
|
20
|
-
}
|
|
21
|
-
function getTextNodeTrackedMarkData(node, schema) {
|
|
22
|
-
if (!node || !node.isText) {
|
|
23
|
-
return undefined;
|
|
24
|
-
}
|
|
25
|
-
const marksTrackedData = [];
|
|
26
|
-
node.marks.forEach((mark) => {
|
|
27
|
-
if (mark.type === schema.marks.tracked_insert || mark.type === schema.marks.tracked_delete) {
|
|
28
|
-
const operation = mark.type === schema.marks.tracked_insert ? change_1.CHANGE_OPERATION.insert : change_1.CHANGE_OPERATION.delete;
|
|
29
|
-
marksTrackedData.push(Object.assign(Object.assign({}, mark.attrs.dataTracked), { operation }));
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
if (marksTrackedData.length > 1) {
|
|
33
|
-
logger_1.log.warn('inline node with more than 1 of tracked marks', marksTrackedData);
|
|
34
|
-
}
|
|
35
|
-
return marksTrackedData[0] || undefined;
|
|
36
|
-
}
|
|
37
|
-
function getBlockInlineTrackedData(node) {
|
|
38
|
-
const { dataTracked } = node.attrs;
|
|
39
|
-
if (dataTracked && !Array.isArray(dataTracked)) {
|
|
40
|
-
return [dataTracked];
|
|
41
|
-
}
|
|
42
|
-
return dataTracked || [];
|
|
43
|
-
}
|
|
44
|
-
function getMarkTrackedData(node) {
|
|
45
|
-
const tracked = node === null || node === void 0 ? void 0 : node.marks.reduce((acc, current) => {
|
|
46
|
-
if ((0, track_utils_1.isValidTrackableMark)(current) && current.attrs.dataTracked) {
|
|
47
|
-
acc.set(current, current.attrs.dataTracked);
|
|
48
|
-
}
|
|
49
|
-
return acc;
|
|
50
|
-
}, new Map());
|
|
51
|
-
return tracked || new Map();
|
|
52
|
-
}
|
|
53
|
-
function getNodeTrackedData(node, schema) {
|
|
54
|
-
let tracked;
|
|
55
|
-
if (node && !node.isText) {
|
|
56
|
-
tracked = getBlockInlineTrackedData(node);
|
|
57
|
-
}
|
|
58
|
-
else if (node === null || node === void 0 ? void 0 : node.isText) {
|
|
59
|
-
tracked = getTextNodeTrackedMarkData(node, schema);
|
|
60
|
-
}
|
|
61
|
-
if (tracked && !Array.isArray(tracked)) {
|
|
62
|
-
tracked = [tracked];
|
|
63
|
-
}
|
|
64
|
-
return tracked;
|
|
65
|
-
}
|
|
66
|
-
function equalMarks(n1, n2) {
|
|
67
|
-
return (n1.marks.length === n2.marks.length &&
|
|
68
|
-
n1.marks.every((mark) => n1.marks.find((m) => m.type === mark.type)));
|
|
69
|
-
}
|
|
70
|
-
function shouldMergeTrackedAttributes(left, right) {
|
|
71
|
-
if (!left || !right) {
|
|
72
|
-
logger_1.log.warn('passed undefined dataTracked attributes to shouldMergeTrackedAttributes', {
|
|
73
|
-
left,
|
|
74
|
-
right,
|
|
75
|
-
});
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
return (left.status === right.status && left.operation === right.operation && left.authorID === right.authorID);
|
|
79
|
-
}
|
|
80
|
-
function getMergeableMarkTrackedAttrs(node, attrs, schema) {
|
|
81
|
-
const nodeAttrs = getTextNodeTrackedMarkData(node, schema);
|
|
82
|
-
return nodeAttrs && shouldMergeTrackedAttributes(nodeAttrs, attrs) ? nodeAttrs : null;
|
|
83
|
-
}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.trackReplaceStep = trackReplaceStep;
|
|
37
|
-
const prosemirror_model_1 = require("prosemirror-model");
|
|
38
|
-
const actions_1 = require("../actions");
|
|
39
|
-
const setFragmentAsInserted_1 = require("../compute/setFragmentAsInserted");
|
|
40
|
-
const deleteAndMergeSplitNodes_1 = require("../mutate/deleteAndMergeSplitNodes");
|
|
41
|
-
const dropStructureChange_1 = require("../mutate/dropStructureChange");
|
|
42
|
-
const logger_1 = require("../utils/logger");
|
|
43
|
-
const trackUtils = __importStar(require("../utils/track-utils"));
|
|
44
|
-
const utils_1 = require("./utils");
|
|
45
|
-
function trackReplaceStep(step, oldState, newTr, attrsTemplate, stepResult, currentStepDoc, tr, moveID) {
|
|
46
|
-
logger_1.log.info('###### ReplaceStep ######');
|
|
47
|
-
let selectionPos = 0;
|
|
48
|
-
const changeSteps = [];
|
|
49
|
-
const attrs = Object.assign({}, attrsTemplate);
|
|
50
|
-
if (moveID) {
|
|
51
|
-
attrs.moveNodeId = moveID;
|
|
52
|
-
}
|
|
53
|
-
step.getMap().forEach((fromA, toA, fromB, toB) => {
|
|
54
|
-
var _a, _b, _c, _d;
|
|
55
|
-
logger_1.log.info(`changed ranges: ${fromA} ${toA} ${fromB} ${toB}`);
|
|
56
|
-
const { slice } = step;
|
|
57
|
-
logger_1.log.info('TR: steps before applying delete', [...newTr.steps]);
|
|
58
|
-
if (stepResult.failed) {
|
|
59
|
-
logger_1.log.error(`invert ReplaceStep failed: "${stepResult.failed}"`);
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
const { sliceWasSplit, newSliceContent, steps: deleteSteps, } = (0, deleteAndMergeSplitNodes_1.deleteAndMergeSplitNodes)(fromA, toA, undefined, currentStepDoc, newTr, oldState.schema, attrs, slice);
|
|
63
|
-
changeSteps.push(...deleteSteps);
|
|
64
|
-
logger_1.log.info('TR: steps after applying delete', [...newTr.steps]);
|
|
65
|
-
logger_1.log.info('DELETE STEPS: ', [...changeSteps]);
|
|
66
|
-
function sameThingBackSpaced() {
|
|
67
|
-
if (changeSteps.length == 2 && newSliceContent.size > 0) {
|
|
68
|
-
const correspondingDeletion = changeSteps.find((step) => step.type === 'delete-text' && step.node.text === newSliceContent.content[0].text);
|
|
69
|
-
return correspondingDeletion;
|
|
70
|
-
}
|
|
71
|
-
return undefined;
|
|
72
|
-
}
|
|
73
|
-
const backSpacedText = sameThingBackSpaced();
|
|
74
|
-
if (backSpacedText) {
|
|
75
|
-
console.log('Detected backspacing');
|
|
76
|
-
changeSteps.splice(changeSteps.indexOf(backSpacedText));
|
|
77
|
-
}
|
|
78
|
-
if (!backSpacedText && newSliceContent.size > 0) {
|
|
79
|
-
logger_1.log.info('newSliceContent', newSliceContent);
|
|
80
|
-
let fragment = (0, setFragmentAsInserted_1.setFragmentAsInserted)(newSliceContent, trackUtils.createNewInsertAttrs(attrs), oldState.schema);
|
|
81
|
-
if ((0, utils_1.isStructureSteps)(tr)) {
|
|
82
|
-
fragment = (0, dropStructureChange_1.joinStructureChanges)(attrs, newSliceContent, fragment, tr, newTr);
|
|
83
|
-
}
|
|
84
|
-
else if ((0, utils_1.isSplitStep)(step, oldState.selection, tr.getMeta('uiEvent'))) {
|
|
85
|
-
fragment = (0, setFragmentAsInserted_1.setFragmentAsNodeSplit)(newTr.doc.resolve(step.from), newTr, fragment, attrs);
|
|
86
|
-
}
|
|
87
|
-
else if (moveID) {
|
|
88
|
-
const indentationType = (_a = (0, actions_1.getAction)(tr, actions_1.TrackChangesAction.indentationAction)) === null || _a === void 0 ? void 0 : _a.action;
|
|
89
|
-
fragment = (0, setFragmentAsInserted_1.setFragmentAsMoveChange)(newSliceContent, trackUtils.createNewMoveAttrs(attrs, indentationType));
|
|
90
|
-
}
|
|
91
|
-
const openStart = slice.openStart !== slice.openEnd ? 0 : slice.openStart;
|
|
92
|
-
const openEnd = slice.openStart !== slice.openEnd ? 0 : slice.openEnd;
|
|
93
|
-
const textWasDeleted = !!changeSteps.length && !(fromA === fromB);
|
|
94
|
-
const isBlock = !!((_b = fragment.firstChild) === null || _b === void 0 ? void 0 : _b.isBlock);
|
|
95
|
-
changeSteps.push({
|
|
96
|
-
type: 'insert-slice',
|
|
97
|
-
from: textWasDeleted ? fromB : isBlock ? toA : fromA,
|
|
98
|
-
to: textWasDeleted ? fromB : isBlock ? toA : fromA,
|
|
99
|
-
sliceWasSplit,
|
|
100
|
-
slice: new prosemirror_model_1.Slice(fragment, openStart, openEnd),
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
const isDeleteEvent = ((_c = window.event) === null || _c === void 0 ? void 0 : _c.code) === 'Delete';
|
|
105
|
-
const isDeleteContentForward = ((_d = window.event) === null || _d === void 0 ? void 0 : _d.inputType) === 'deleteContentForward';
|
|
106
|
-
selectionPos = isDeleteEvent || isDeleteContentForward ? toA : fromA;
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
return [changeSteps, selectionPos];
|
|
110
|
-
}
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.trackTransaction = trackTransaction;
|
|
7
|
-
const prosemirror_state_1 = require("prosemirror-state");
|
|
8
|
-
const prosemirror_transform_1 = require("prosemirror-transform");
|
|
9
|
-
const actions_1 = require("../actions");
|
|
10
|
-
const diffChangeSteps_1 = require("../change-steps/diffChangeSteps");
|
|
11
|
-
const processChangeSteps_1 = require("../change-steps/processChangeSteps");
|
|
12
|
-
const updateChangeAttrs_1 = require("../changes/updateChangeAttrs");
|
|
13
|
-
const nodeHelpers_1 = require("../compute/nodeHelpers");
|
|
14
|
-
const change_1 = require("../types/change");
|
|
15
|
-
const logger_1 = require("../utils/logger");
|
|
16
|
-
const mapChangeStep_1 = require("../utils/mapChangeStep");
|
|
17
|
-
const track_utils_1 = require("../utils/track-utils");
|
|
18
|
-
const uuidv4_1 = require("../utils/uuidv4");
|
|
19
|
-
const trackAttrsChange_1 = __importDefault(require("./trackAttrsChange"));
|
|
20
|
-
const trackMarkSteps_1 = require("./trackMarkSteps");
|
|
21
|
-
const trackReplaceAroundStep_1 = require("./trackReplaceAroundStep");
|
|
22
|
-
const trackReplaceStep_1 = require("./trackReplaceStep");
|
|
23
|
-
const utils_1 = require("./utils");
|
|
24
|
-
const getSelectionStaticConstructor = (sel) => Object.getPrototypeOf(sel).constructor;
|
|
25
|
-
const isHighlightMarkerNode = (node) => node && node.type === node.type.schema.nodes.highlight_marker;
|
|
26
|
-
function trackTransaction(tr, oldState, newTr, authorID, changeSet) {
|
|
27
|
-
var _a, _b, _c, _d, _e, _f;
|
|
28
|
-
const emptyAttrs = {
|
|
29
|
-
authorID,
|
|
30
|
-
reviewedByID: null,
|
|
31
|
-
createdAt: tr.time,
|
|
32
|
-
updatedAt: tr.time,
|
|
33
|
-
statusUpdateAt: 0,
|
|
34
|
-
status: change_1.CHANGE_STATUS.pending,
|
|
35
|
-
};
|
|
36
|
-
const action = (_a = (0, actions_1.getAction)(tr, actions_1.TrackChangesAction.indentationAction)) === null || _a === void 0 ? void 0 : _a.action;
|
|
37
|
-
const isIndentation = action === 'indent' || action === 'unindent';
|
|
38
|
-
const wasNodeSelection = tr.selection instanceof prosemirror_state_1.NodeSelection;
|
|
39
|
-
const setsNewSelection = tr.selectionSet;
|
|
40
|
-
const deletedNodeMapping = new prosemirror_transform_1.Mapping();
|
|
41
|
-
let iters = 0;
|
|
42
|
-
logger_1.log.info('ORIGINAL transaction', tr);
|
|
43
|
-
let trContext = {};
|
|
44
|
-
let movingStepsAssociated = (0, track_utils_1.HasMoveOperations)(tr);
|
|
45
|
-
if (isIndentation) {
|
|
46
|
-
const moveId = (0, uuidv4_1.uuidv4)();
|
|
47
|
-
tr.steps.forEach((step) => {
|
|
48
|
-
if (step instanceof prosemirror_transform_1.ReplaceStep) {
|
|
49
|
-
movingStepsAssociated.set(step, moveId);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
(0, track_utils_1.handleDirectPendingMoveDeletions)(tr, newTr, movingStepsAssociated);
|
|
54
|
-
const cleanSteps = (0, track_utils_1.filterMeaninglessMoveSteps)(tr, movingStepsAssociated);
|
|
55
|
-
for (let i = cleanSteps.length - 1; i >= 0; i--) {
|
|
56
|
-
const step = cleanSteps[i];
|
|
57
|
-
logger_1.log.info('transaction step', step);
|
|
58
|
-
iters += 1;
|
|
59
|
-
const uiEvent = tr.getMeta('uiEvent');
|
|
60
|
-
const isMassReplace = tr.getMeta('massSearchReplace');
|
|
61
|
-
if (iters > 20 && uiEvent != 'cut' && !isMassReplace) {
|
|
62
|
-
console.error('@manuscripts/track-changes-plugin: Possible infinite loop in iterating tr.steps, tracking skipped!\n' +
|
|
63
|
-
'This is probably an error with the library, please report back to maintainers with a reproduction if possible', newTr);
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
else if (!(step instanceof prosemirror_transform_1.ReplaceStep) && step.constructor.name === 'ReplaceStep') {
|
|
67
|
-
console.error('@manuscripts/track-changes-plugin: Multiple prosemirror-transform packages imported, alias/dedupe them ' +
|
|
68
|
-
'or instanceof checks fail as well as creating new steps');
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
else if (step instanceof prosemirror_transform_1.ReplaceStep) {
|
|
72
|
-
const { slice } = step;
|
|
73
|
-
if (((_c = (_b = slice === null || slice === void 0 ? void 0 : slice.content) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.length) === 1 && isHighlightMarkerNode(slice.content.content[0])) {
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
const invertedStep = step.invert(tr.docs[i]);
|
|
77
|
-
const isDelete = step.from !== step.to && step.slice.content.size < invertedStep.slice.content.size;
|
|
78
|
-
let thisStepMapping = tr.mapping.slice(i + 1, i + 1);
|
|
79
|
-
if (isDelete || (0, utils_1.isStructureSteps)(tr)) {
|
|
80
|
-
thisStepMapping = deletedNodeMapping;
|
|
81
|
-
}
|
|
82
|
-
const newStep = new prosemirror_transform_1.ReplaceStep(thisStepMapping.map(invertedStep.from), thisStepMapping.map(invertedStep.to), invertedStep.slice);
|
|
83
|
-
const stepResult = newTr.maybeStep(newStep);
|
|
84
|
-
let [steps, startPos] = (0, trackReplaceStep_1.trackReplaceStep)(step, oldState, newTr, emptyAttrs, stepResult, tr.docs[i], tr, movingStepsAssociated.get(step));
|
|
85
|
-
if (steps.length === 1) {
|
|
86
|
-
const step = steps[0];
|
|
87
|
-
if (isHighlightMarkerNode((step === null || step === void 0 ? void 0 : step.node) || ((_e = (_d = step === null || step === void 0 ? void 0 : step.slice) === null || _d === void 0 ? void 0 : _d.content) === null || _e === void 0 ? void 0 : _e.content[0]))) {
|
|
88
|
-
continue;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
startPos = thisStepMapping.map(startPos);
|
|
92
|
-
steps = (0, mapChangeStep_1.mapChangeSteps)(steps, thisStepMapping);
|
|
93
|
-
logger_1.log.info('CHANGES: ', steps);
|
|
94
|
-
const deleted = steps.filter((s) => s.type !== 'insert-slice');
|
|
95
|
-
const inserted = steps.filter((s) => s.type === 'insert-slice');
|
|
96
|
-
steps = (0, diffChangeSteps_1.diffChangeSteps)(deleted, inserted);
|
|
97
|
-
logger_1.log.info('DIFFED STEPS: ', steps);
|
|
98
|
-
const [mapping, selectionPos] = (0, processChangeSteps_1.processChangeSteps)(steps, startPos || tr.selection.head, newTr, movingStepsAssociated.has(step)
|
|
99
|
-
? Object.assign(Object.assign({}, emptyAttrs), { moveNodeId: movingStepsAssociated.get(step) }) : emptyAttrs, oldState.schema, deletedNodeMapping);
|
|
100
|
-
if (!wasNodeSelection && !setsNewSelection) {
|
|
101
|
-
const sel = getSelectionStaticConstructor(tr.selection);
|
|
102
|
-
const near = sel.near(newTr.doc.resolve(selectionPos), -1);
|
|
103
|
-
newTr.setSelection(near);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
else if (step instanceof prosemirror_transform_1.ReplaceAroundStep) {
|
|
107
|
-
let steps = (0, trackReplaceAroundStep_1.trackReplaceAroundStep)(step, oldState, tr, newTr, emptyAttrs, tr.docs[i], trContext);
|
|
108
|
-
const deleted = steps.filter((s) => s.type !== 'insert-slice');
|
|
109
|
-
const inserted = steps.filter((s) => s.type === 'insert-slice');
|
|
110
|
-
logger_1.log.info('INSERT STEPS: ', inserted);
|
|
111
|
-
steps = (0, diffChangeSteps_1.diffChangeSteps)(deleted, inserted);
|
|
112
|
-
logger_1.log.info('DIFFED STEPS: ', steps);
|
|
113
|
-
const [mapping, selectionPos] = (0, processChangeSteps_1.processChangeSteps)(steps, tr.selection.from, newTr, emptyAttrs, oldState.schema, deletedNodeMapping);
|
|
114
|
-
}
|
|
115
|
-
else if (step instanceof prosemirror_transform_1.AttrStep) {
|
|
116
|
-
const changeSteps = (0, trackAttrsChange_1.default)(step, oldState, tr, newTr, emptyAttrs, tr.docs[i]);
|
|
117
|
-
const [mapping, selectionPos] = (0, processChangeSteps_1.processChangeSteps)(changeSteps, tr.selection.from, newTr, emptyAttrs, oldState.schema, deletedNodeMapping);
|
|
118
|
-
}
|
|
119
|
-
else if (step instanceof prosemirror_transform_1.AddMarkStep) {
|
|
120
|
-
(0, trackMarkSteps_1.trackAddMarkStep)(step, emptyAttrs, newTr, tr.docs[i]);
|
|
121
|
-
const dataTracked = (_f = (0, nodeHelpers_1.getNodeTrackedData)(newTr.doc.nodeAt(step.from), oldState.schema)) === null || _f === void 0 ? void 0 : _f.pop();
|
|
122
|
-
if (dataTracked) {
|
|
123
|
-
(0, updateChangeAttrs_1.updateChangeAttrs)(newTr, { id: dataTracked.id, from: step.from, to: step.to, type: 'text-change', dataTracked }, Object.assign(Object.assign({}, dataTracked), { id: (0, uuidv4_1.uuidv4)() }), oldState.schema);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
else if (step instanceof prosemirror_transform_1.RemoveMarkStep) {
|
|
127
|
-
(0, trackMarkSteps_1.trackRemoveMarkStep)(step, emptyAttrs, newTr, tr.docs[i]);
|
|
128
|
-
}
|
|
129
|
-
else if (step instanceof prosemirror_transform_1.RemoveNodeMarkStep) {
|
|
130
|
-
(0, trackMarkSteps_1.trackRemoveNodeMarkStep)(step, emptyAttrs, newTr, tr.docs[i]);
|
|
131
|
-
}
|
|
132
|
-
else if (step instanceof prosemirror_transform_1.AddNodeMarkStep) {
|
|
133
|
-
(0, trackMarkSteps_1.trackAddNodeMarkStep)(step, emptyAttrs, newTr, tr.docs[i]);
|
|
134
|
-
}
|
|
135
|
-
tr.getMeta('inputType') && newTr.setMeta('inputType', tr.getMeta('inputType'));
|
|
136
|
-
tr.getMeta('uiEvent') && newTr.setMeta('uiEvent', tr.getMeta('uiEvent'));
|
|
137
|
-
}
|
|
138
|
-
if (setsNewSelection && tr.selection instanceof prosemirror_state_1.TextSelection) {
|
|
139
|
-
let from = tr.selection.from;
|
|
140
|
-
if ((0, utils_1.isStructureSteps)(tr)) {
|
|
141
|
-
const selectionMapping = new prosemirror_transform_1.Mapping();
|
|
142
|
-
tr.steps.map((step) => {
|
|
143
|
-
const isDeleteStep = step instanceof prosemirror_transform_1.ReplaceStep && step.from !== step.to && step.slice.size === 0;
|
|
144
|
-
if (isDeleteStep) {
|
|
145
|
-
selectionMapping.appendMap(step.getMap().invert());
|
|
146
|
-
}
|
|
147
|
-
});
|
|
148
|
-
selectionMapping.appendMapping(deletedNodeMapping);
|
|
149
|
-
from = selectionMapping.map(tr.selection.from);
|
|
150
|
-
}
|
|
151
|
-
const newPos = newTr.doc.resolve(from);
|
|
152
|
-
newTr.setSelection(new prosemirror_state_1.TextSelection(newPos));
|
|
153
|
-
}
|
|
154
|
-
if (wasNodeSelection) {
|
|
155
|
-
logger_1.log.info('Getting into node select!');
|
|
156
|
-
const mappedPos = newTr.mapping.map(tr.selection.from, -1);
|
|
157
|
-
const sel = getSelectionStaticConstructor(tr.selection);
|
|
158
|
-
newTr.setSelection(sel.create(newTr.doc, mappedPos));
|
|
159
|
-
}
|
|
160
|
-
logger_1.log.info('NEW transaction', newTr);
|
|
161
|
-
return newTr;
|
|
162
|
-
}
|
package/dist/cjs/types/step.js
DELETED