From 4d7be2f6cb44988bea4a8b633f3ac8c568c2cbef Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Sun, 6 Feb 2022 10:57:58 +0100 Subject: [PATCH] Improve textable editing --- src/dom_components/model/Components.js | 6 ------ src/dom_components/view/ComponentTextView.js | 4 ++-- src/undo_manager/index.js | 17 +++++++++++++++++ src/utils/Sorter.js | 6 ++++-- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/dom_components/model/Components.js b/src/dom_components/model/Components.js index c2408d2d2..662dd73a5 100644 --- a/src/dom_components/model/Components.js +++ b/src/dom_components/model/Components.js @@ -69,12 +69,6 @@ export default Backbone.Collection.extend({ const parsed = this.parseString(input, opts); const cmps = isArray(parsed) ? parsed : [parsed]; const newCmps = getComponentsFromDefs(cmps, allByID); - console.log({ - input, - newCmps, - parsed, - keepIds: opts.keepIds, - }); this.reset(newCmps, opts); }, diff --git a/src/dom_components/view/ComponentTextView.js b/src/dom_components/view/ComponentTextView.js index 20c60617b..7fb9e5415 100644 --- a/src/dom_components/view/ComponentTextView.js +++ b/src/dom_components/view/ComponentTextView.js @@ -146,11 +146,11 @@ export default ComponentView.extend({ const textNode = range.startContainer; const offset = range.startOffset; const textModel = getModel(textNode); - const cmps = model.components(); const newCmps = []; if (textModel && textModel.is?.('textnode')) { - model.components().forEach(cmp => { + const cmps = textModel.collection; + cmps.forEach(cmp => { if (cmp === textModel) { const type = 'textnode'; const cnt = cmp.get('content'); diff --git a/src/undo_manager/index.js b/src/undo_manager/index.js index 108a782a0..eb222cda4 100644 --- a/src/undo_manager/index.js +++ b/src/undo_manager/index.js @@ -117,6 +117,23 @@ export default () => { }; }, }); + um.changeUndoType('reset', { + undo: (collection, before) => { + collection.reset(before, { fromUndo }); + }, + redo: (collection, b, after) => { + collection.reset(after, { fromUndo }); + }, + on: (collection, options = {}) => { + if (hasSkip(options) || !this.isRegistered(collection)) return; + return { + object: collection, + before: options.previousModels, + after: [...collection.models], + options: { ...options, fromUndo }, + }; + }, + }); um.on('undo redo', () => { em.trigger('change:canvasOffset'); diff --git a/src/utils/Sorter.js b/src/utils/Sorter.js index df23f6a0f..024e01816 100644 --- a/src/utils/Sorter.js +++ b/src/utils/Sorter.js @@ -1065,13 +1065,15 @@ export default Backbone.View.extend({ if (targetCollection && droppable && draggable) { const opts = { at: index, action: 'move-component' }; + const isTextable = this.isTextableActive(srcModel, trgModel); if (!dropContent) { const srcIndex = srcModel.index(); const sameCollection = targetCollection === srcModel.collection; const sameIndex = srcIndex === index || srcIndex === index - 1; + const canRemove = !sameCollection || !sameIndex || isTextable; - if ((!sameCollection || !sameIndex) && srcModel.collection) { + if (canRemove && srcModel.collection) { modelToDrop = srcModel.collection.remove(srcModel, { temporary: true }); } } else { @@ -1081,7 +1083,7 @@ export default Backbone.View.extend({ } if (modelToDrop) { - if (this.isTextableActive(srcModel, trgModel)) { + if (isTextable) { delete opts.at; created = trgModel.getView().insertComponent(modelToDrop, opts); } else {