Browse Source

Improve textable editing

pull/4134/head
Artur Arseniev 4 years ago
parent
commit
4d7be2f6cb
  1. 6
      src/dom_components/model/Components.js
  2. 4
      src/dom_components/view/ComponentTextView.js
  3. 17
      src/undo_manager/index.js
  4. 6
      src/utils/Sorter.js

6
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);
},

4
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');

17
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');

6
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 {

Loading…
Cancel
Save