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

delete block if empty

parent 2685b02b
No related branches found
No related tags found
1 merge request!143Track changes
This commit is part of merge request !143. Comments created here will be created in the context of that merge request.
...@@ -85,7 +85,6 @@ export default ({ comment, activeView, user, active }) => { ...@@ -85,7 +85,6 @@ export default ({ comment, activeView, user, active }) => {
} }
if (conversation.length === 0 && value === '') { if (conversation.length === 0 && value === '') {
console.log('here?');
resolveComment(); resolveComment();
} }
}; };
......
import { Mapping, RemoveMarkStep, ReplaceStep } from 'prosemirror-transform'; import { Mapping, RemoveMarkStep, ReplaceStep } from 'prosemirror-transform';
import { Slice } from 'prosemirror-model'; import { Slice } from 'prosemirror-model';
import { minBy, maxBy } from 'lodash';
import { injectable } from 'inversify'; import { injectable } from 'inversify';
import removeNode from '../track-changes/helpers/removeNode';
import Tools from '../../lib/Tools'; import Tools from '../../lib/Tools';
export default export default
...@@ -18,10 +16,17 @@ class AcceptTrackChange extends Tools { ...@@ -18,10 +16,17 @@ class AcceptTrackChange extends Tools {
tr, tr,
selection: { from, to }, selection: { from, to },
} = state; } = state;
tr.setMeta('AcceptReject', true); tr.setMeta('AcceptReject', true);
const map = new Mapping(); const map = new Mapping();
state.doc.nodesBetween(from, to, (node, pos) => { state.doc.nodesBetween(from, to, (node, pos) => {
if (
node.attrs.track &&
node.attrs.track.find(track => track.type === 'deletion')
) {
removeNode(tr, node, pos, map, true);
}
if ( if (
node.marks && node.marks &&
node.marks.find(mark => mark.type.name === 'deletion') node.marks.find(mark => mark.type.name === 'deletion')
......
import { Selection, TextSelection } from "prosemirror-state"; import { Selection, TextSelection } from 'prosemirror-state';
import { Slice } from "prosemirror-model"; import { Slice } from 'prosemirror-model';
import { ReplaceStep, Mapping } from "prosemirror-transform"; import { ReplaceStep, Mapping } from 'prosemirror-transform';
const markDeletion = (tr, from, to, user, date, group) => { const markDeletion = (tr, from, to, user, date, group) => {
const deletionMark = tr.doc.type.schema.marks.deletion.create({ const deletionMark = tr.doc.type.schema.marks.deletion.create({
user: user.userId, user: user.userId,
username: user.username username: user.username,
// date // date
}); });
let firstTableCellChild = false;
const deletionMap = new Mapping(); const deletionMap = new Mapping();
// Add deletion mark to block nodes (figures, text blocks) and find already deleted inline nodes (and leave them alone)
tr.doc.nodesBetween(from, to, (node, pos) => { tr.doc.nodesBetween(from, to, (node, pos) => {
if (pos < from && node.type.name === "table_cell") { if (node.type.name.includes('table')) {
firstTableCellChild = true; return;
return true; }
} else if ((pos < from && node.isBlock) || firstTableCellChild) { if (
firstTableCellChild = false;
return true;
} else if (["table_row", "table_cell"].includes(node.type.name)) {
return false;
} else if (
node.isInline && node.isInline &&
node.marks.find( node.marks.find(
mark => mark =>
mark.type.name === "insertion" && mark.attrs.user === user.userId mark.type.name === 'insertion' && mark.attrs.user === user.userId,
) )
) { ) {
const removeStep = new ReplaceStep( const removeStep = new ReplaceStep(
deletionMap.map(Math.max(from, pos)), deletionMap.map(Math.max(from, pos)),
deletionMap.map(Math.min(to, pos + node.nodeSize)), deletionMap.map(Math.min(to, pos + node.nodeSize)),
Slice.empty Slice.empty,
); );
if (!tr.maybeStep(removeStep).failed) { if (!tr.maybeStep(removeStep).failed) {
deletionMap.appendMap(removeStep.getMap()); deletionMap.appendMap(removeStep.getMap());
} }
} else if ( } else if (
node.isInline && node.isInline &&
!node.marks.find(mark => mark.type.name === "deletion") !node.marks.find(mark => mark.type.name === 'deletion')
) { ) {
tr.addMark( tr.addMark(
deletionMap.map(Math.max(from, pos)), deletionMap.map(Math.max(from, pos)),
deletionMap.map(Math.min(to, pos + node.nodeSize)), deletionMap.map(Math.min(to, pos + node.nodeSize)),
deletionMark deletionMark,
); );
} else if ( } else if (
node.attrs.track && node.attrs.track &&
!node.attrs.track.find(trackAttr => trackAttr.type === "deletion") && !node.attrs.track.find(trackAttr => trackAttr.type === 'deletion') &&
!["bullet_list", "ordered_list"].includes(node.type.name) !['bullet_list', 'ordered_list'].includes(node.type.name)
) { ) {
if ( if (
node.attrs.track.find( node.attrs.track.find(
trackAttr => trackAttr =>
trackAttr.type === "insertion" && trackAttr.user === user.userId trackAttr.type === 'insertion' && trackAttr.user === user.userId,
) )
) { ) {
let removeStep; let removeStep;
...@@ -64,14 +59,14 @@ const markDeletion = (tr, from, to, user, date, group) => { ...@@ -64,14 +59,14 @@ const markDeletion = (tr, from, to, user, date, group) => {
removeStep = new ReplaceStep( removeStep = new ReplaceStep(
deletionMap.map(selectionBefore.$anchor.pos), deletionMap.map(selectionBefore.$anchor.pos),
deletionMap.map(to), deletionMap.map(to),
Slice.empty Slice.empty,
); );
} }
} else { } else {
removeStep = new ReplaceStep( removeStep = new ReplaceStep(
deletionMap.map(Math.max(from, pos)), deletionMap.map(Math.max(from, pos)),
deletionMap.map(Math.min(to, pos + node.nodeSize)), deletionMap.map(Math.min(to, pos + node.nodeSize)),
Slice.empty Slice.empty,
); );
} }
...@@ -79,19 +74,21 @@ const markDeletion = (tr, from, to, user, date, group) => { ...@@ -79,19 +74,21 @@ const markDeletion = (tr, from, to, user, date, group) => {
deletionMap.appendMap(removeStep.getMap()); deletionMap.appendMap(removeStep.getMap());
} }
} else { } else {
const track = node.attrs.track.slice(); if (node.content.size === 0) {
track.push({ const track = node.attrs.track.slice();
type: "deletion", track.push({
user: user.userId, type: 'deletion',
username: user.username user: user.userId,
// date username: user.username,
}); // date
tr.setNodeMarkup( });
deletionMap.map(pos), tr.setNodeMarkup(
null, deletionMap.map(pos),
Object.assign({}, node.attrs, { track }), null,
node.marks Object.assign({}, node.attrs, { track }),
); node.marks,
);
}
} }
} }
}); });
......
...@@ -98,10 +98,10 @@ const trackedTransaction = (tr, state, user) => { ...@@ -98,10 +98,10 @@ const trackedTransaction = (tr, state, user) => {
const caretPos = map.map(tr.selection.from - 2, -1); const caretPos = map.map(tr.selection.from - 2, -1);
newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos))); newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos)));
} else { } else {
const slice = map.slice(newTr.selection.from, newTr.selection.to); const caretPos = map.map(tr.selection.from, -1);
map.appendMap(slice); newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos)));
// const caretPos = map.map(tr.selection.from, -1); // const slice = map.slice(newTr.selection.from, newTr.selection.to);
// newTr.setSelection(new TextSelection(newTr.doc.resolve(caretPos))); // map.appendMap(slice);
} }
} }
if (tr.storedMarksSet) { if (tr.storedMarksSet) {
......
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