Skip to content
Snippets Groups Projects
Commit b95a5a55 authored by chris's avatar chris
Browse files

fix linting errors

parent 119a2cbd
No related branches found
No related tags found
1 merge request!160add track change plugin through service
import { getFromToMark } from './helpers';
const findSelectedChanges = state => {
const selection = state.selection,
selectedChanges = {
insertion: false,
deletion: false,
formatChange: false,
};
let insertionPos = false,
deletionPos = false,
formatChangePos = false,
insertionMark,
deletionMark,
formatChangeMark,
insertionSize,
deletionSize,
formatChangeSize;
const { selection } = state;
const selectedChanges = {
insertion: false,
deletion: false,
formatChange: false,
};
let insertionPos = false;
let deletionPos = false;
let formatChangePos = false;
let insertionMark;
let deletionMark;
let formatChangeMark;
let insertionSize;
let deletionSize;
let formatChangeSize;
if (selection.empty) {
const resolvedPos = state.doc.resolve(selection.from),
marks = resolvedPos.marks();
const resolvedPos = state.doc.resolve(selection.from);
const marks = resolvedPos.marks();
if (marks) {
insertionMark = marks.find(mark => mark.type.name === 'insertion' && !mark.attrs.approved);
insertionMark = marks.find(
mark => mark.type.name === 'insertion' && !mark.attrs.approved,
);
if (insertionMark) {
insertionPos = selection.from;
}
deletionMark = marks.find(mark => mark.type.name === 'deletion');
if (deletionMark) {
deletionPos = selection.from;
}
formatChangeMark = marks.find(mark => mark.type.name === 'format_change');
if (formatChangeMark) {
formatChangePos = selection.from;
}
......@@ -42,7 +49,9 @@ const findSelectedChanges = state => {
if (!insertionMark) {
insertionMark = node.attrs.track
? node.attrs.track.find(trackAttr => trackAttr.type === 'insertion')
: node.marks.find(mark => mark.type.name === 'insertion' && !mark.attrs.approved);
: node.marks.find(
mark => mark.type.name === 'insertion' && !mark.attrs.approved,
);
if (insertionMark) {
insertionPos = pos;
if (!node.isInline) {
......@@ -62,7 +71,9 @@ const findSelectedChanges = state => {
}
}
if (!formatChangeMark) {
formatChangeMark = node.marks.find(mark => mark.type.name === 'format_change');
formatChangeMark = node.marks.find(
mark => mark.type.name === 'format_change',
);
if (formatChangeMark) {
formatChangePos = pos;
if (!node.isInline) {
......@@ -70,6 +81,7 @@ const findSelectedChanges = state => {
}
}
}
return false;
});
}
if (insertionMark) {
......@@ -92,4 +104,4 @@ const findSelectedChanges = state => {
return selectedChanges;
};
export { findSelectedChanges };
export default findSelectedChanges;
import { Plugin, PluginKey } from 'prosemirror-state';
import { Decoration, DecorationSet } from 'prosemirror-view';
import { findSelectedChanges } from './FindSelectedChanges';
import findSelectedChanges from './FindSelectedChanges';
import { deactivateAllSelectedChanges } from './helpers';
export const key = new PluginKey('track');
......@@ -15,7 +15,7 @@ export default options => {
key,
state: {
init(config, state) {
const userIds = ['33'];
const userIds = [];
state.doc.descendants(node => {
if (node.attrs.track) {
node.attrs.track.forEach(track => {
......@@ -26,7 +26,9 @@ export default options => {
} else {
node.marks.forEach(mark => {
if (
['deletion', 'insertion', 'format_change'].includes(mark.type.name) &&
['deletion', 'insertion', 'format_change'].includes(
mark.type.name,
) &&
!userIds.includes(mark.attrs.user) &&
mark.attrs.user !== 0
) {
......@@ -51,9 +53,13 @@ export default options => {
let { decos } = this.getState(oldState);
if (tr.selectionSet) {
const { insertion, deletion, formatChange } = findSelectedChanges(state);
const { insertion, deletion, formatChange } = findSelectedChanges(
state,
);
decos = DecorationSet.empty;
const decoType = tr.selection.node ? Decoration.node : Decoration.inline;
const decoType = tr.selection.node
? Decoration.node
: Decoration.inline;
if (insertion) {
decos = decos.add(tr.doc, [
decoType(
......
import {Decoration, DecorationSet} from "prosemirror-view"
import { Decoration, DecorationSet } from 'prosemirror-view';
import {
key,
selectedInsertionSpec,
selectedDeletionSpec,
selectedChangeFormatSpec,
selectedChangeBlockSpec
} from "./TrackChangePlugin"
key,
selectedInsertionSpec,
selectedDeletionSpec,
selectedChangeFormatSpec,
selectedChangeBlockSpec,
} from './TrackChangePlugin';
export function getSelectedChanges(state) {
const {decos} = key.getState(state)
const { decos } = key.getState(state);
const insertion = decos.find(undefined, undefined, spec => spec === selectedInsertionSpec)[0],
deletion = decos.find(undefined, undefined, spec => spec === selectedDeletionSpec)[0],
format_change = decos.find(undefined, undefined, spec => spec === selectedChangeFormatSpec)[0],
block_change = decos.find(undefined, undefined, spec => spec === selectedChangeBlockSpec)[0]
const insertion = decos.find(
undefined,
undefined,
spec => spec === selectedInsertionSpec,
)[0];
const deletion = decos.find(
undefined,
undefined,
spec => spec === selectedDeletionSpec,
)[0];
const format_change = decos.find(
undefined,
undefined,
spec => spec === selectedChangeFormatSpec,
)[0];
const block_change = decos.find(
undefined,
undefined,
spec => spec === selectedChangeBlockSpec,
)[0];
return {insertion, deletion, format_change, block_change}
return { insertion, deletion, format_change, block_change };
}
export function setSelectedChanges(state, type, pos) {
const tr = state.tr,
node = tr.doc.nodeAt(pos),
mark = node.attrs.track ?
node.attrs.track.find(trackAttr => trackAttr.type===type) :
node.marks.find(mark => mark.type.name===type)
if (!mark) {
return
}
const selectedChange = node.isInline ? getFromToMark(tr.doc, pos, mark) : {from: pos, to: pos + node.nodeSize}
let decos = DecorationSet.empty, spec
if (type==='insertion') {
spec = selectedInsertionSpec
} else if (type==='deletion') {
spec = selectedDeletionSpec
} else if (type==='format_change') {
spec = selectedChangeFormatSpec
} else if (type==='block_change') {
spec = selectedChangeBlockSpec
}
const decoType = node.isInline ? Decoration.inline : Decoration.node
decos = decos.add(tr.doc, [decoType(selectedChange.from, selectedChange.to, {
class: `selected-${type}`
}, spec)])
return tr.setMeta(key, {decos}).setMeta('track', true)
const { tr } = state;
const node = tr.doc.nodeAt(pos);
const mark = node.attrs.track
? node.attrs.track.find(trackAttr => trackAttr.type === type)
: node.marks.find(mark => mark.type.name === type);
if (!mark) {
return;
}
const selectedChange = node.isInline
? getFromToMark(tr.doc, pos, mark)
: { from: pos, to: pos + node.nodeSize };
let decos = DecorationSet.empty;
let spec;
if (type === 'insertion') {
spec = selectedInsertionSpec;
} else if (type === 'deletion') {
spec = selectedDeletionSpec;
} else if (type === 'format_change') {
spec = selectedChangeFormatSpec;
} else if (type === 'block_change') {
spec = selectedChangeBlockSpec;
}
const decoType = node.isInline ? Decoration.inline : Decoration.node;
decos = decos.add(tr.doc, [
decoType(
selectedChange.from,
selectedChange.to,
{
class: `selected-${type}`,
},
spec,
),
]);
tr.setMeta(key, { decos }).setMeta('track', true);
}
export function deactivateAllSelectedChanges(tr) {
const pluginState = {
decos: DecorationSet.empty
}
return tr.setMeta(key, pluginState).setMeta('track', true)
const pluginState = {
decos: DecorationSet.empty,
};
return tr.setMeta(key, pluginState).setMeta('track', true);
}
// From https://discuss.prosemirror.net/t/expanding-the-selection-to-the-active-mark/478/2 with some bugs fixed
export function getFromToMark(doc, pos, mark) {
const $pos = doc.resolve(pos), parent = $pos.parent
const start = parent.childAfter($pos.parentOffset)
if (!start.node) {
return null
}
let startIndex = $pos.index(), startPos = $pos.start() + start.offset
while (startIndex > 0 && mark.isInSet(parent.child(startIndex - 1).marks)) {
startPos -= parent.child(--startIndex).nodeSize
}
let endIndex = $pos.index() + 1, endPos = $pos.start() + start.offset + start.node.nodeSize
while (endIndex < parent.childCount && mark.isInSet(parent.child(endIndex).marks)) {
endPos += parent.child(endIndex++).nodeSize
}
return {from: startPos, to: endPos}
const $pos = doc.resolve(pos);
const { parent } = $pos;
const start = parent.childAfter($pos.parentOffset);
if (!start.node) {
return null;
}
let startIndex = $pos.index();
let startPos = $pos.start() + start.offset;
while (startIndex > 0 && mark.isInSet(parent.child(startIndex - 1).marks)) {
startPos -= parent.child(--startIndex).nodeSize;
}
let endIndex = $pos.index() + 1;
let endPos = $pos.start() + start.offset + start.node.nodeSize;
while (
endIndex < parent.childCount &&
mark.isInSet(parent.child(endIndex).marks)
) {
endPos += parent.child(endIndex++).nodeSize;
}
return { from: startPos, to: endPos };
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment