|
|
@ -52,15 +52,7 @@ |
|
|
* |
|
|
* |
|
|
* @module Components |
|
|
* @module Components |
|
|
*/ |
|
|
*/ |
|
|
import { |
|
|
import { isEmpty, isObject, isArray, isFunction, isString, result, debounce } from 'underscore'; |
|
|
isEmpty, |
|
|
|
|
|
isObject, |
|
|
|
|
|
isArray, |
|
|
|
|
|
isFunction, |
|
|
|
|
|
isString, |
|
|
|
|
|
result, |
|
|
|
|
|
debounce, |
|
|
|
|
|
} from 'underscore'; |
|
|
|
|
|
import defaults from './config/config'; |
|
|
import defaults from './config/config'; |
|
|
import Component, { keyUpdate, keyUpdateInside } from './model/Component'; |
|
|
import Component, { keyUpdate, keyUpdateInside } from './model/Component'; |
|
|
import Components from './model/Components'; |
|
|
import Components from './model/Components'; |
|
|
@ -260,12 +252,8 @@ export default class ComponentManager extends ItemManagerModule { |
|
|
em.on('change:componentHovered', this.componentHovered, this); |
|
|
em.on('change:componentHovered', this.componentHovered, this); |
|
|
|
|
|
|
|
|
const selected = em.get('selected'); |
|
|
const selected = em.get('selected'); |
|
|
em.listenTo(selected, 'add', (sel, c, opts) => |
|
|
em.listenTo(selected, 'add', (sel, c, opts) => this.selectAdd(selected.getComponent(sel), opts)); |
|
|
this.selectAdd(selected.getComponent(sel), opts) |
|
|
em.listenTo(selected, 'remove', (sel, c, opts) => this.selectRemove(selected.getComponent(sel), opts)); |
|
|
); |
|
|
|
|
|
em.listenTo(selected, 'remove', (sel, c, opts) => |
|
|
|
|
|
this.selectRemove(selected.getComponent(sel), opts) |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return this; |
|
|
return this; |
|
|
@ -406,7 +394,7 @@ export default class ComponentManager extends ItemManagerModule { |
|
|
clear(opts = {}) { |
|
|
clear(opts = {}) { |
|
|
const components = this.getComponents(); |
|
|
const components = this.getComponents(); |
|
|
//@ts-ignore
|
|
|
//@ts-ignore
|
|
|
components?.filter(Boolean).forEach((i) => i.remove(opts)); |
|
|
components?.filter(Boolean).forEach(i => i.remove(opts)); |
|
|
return this; |
|
|
return this; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -430,23 +418,11 @@ export default class ComponentManager extends ItemManagerModule { |
|
|
*/ |
|
|
*/ |
|
|
addType(type: string, methods: any) { |
|
|
addType(type: string, methods: any) { |
|
|
const { em } = this; |
|
|
const { em } = this; |
|
|
const { |
|
|
const { model = {}, view = {}, isComponent, extend, extendView, extendFn = [], extendFnView = [] } = methods; |
|
|
model = {}, |
|
|
|
|
|
view = {}, |
|
|
|
|
|
isComponent, |
|
|
|
|
|
extend, |
|
|
|
|
|
extendView, |
|
|
|
|
|
extendFn = [], |
|
|
|
|
|
extendFnView = [], |
|
|
|
|
|
} = methods; |
|
|
|
|
|
const compType = this.getType(type); |
|
|
const compType = this.getType(type); |
|
|
const extendType = this.getType(extend); |
|
|
const extendType = this.getType(extend); |
|
|
const extendViewType = this.getType(extendView); |
|
|
const extendViewType = this.getType(extendView); |
|
|
const typeToExtend = extendType |
|
|
const typeToExtend = extendType ? extendType : compType ? compType : this.getType('default'); |
|
|
? extendType |
|
|
|
|
|
: compType |
|
|
|
|
|
? compType |
|
|
|
|
|
: this.getType('default'); |
|
|
|
|
|
const modelToExt = typeToExtend.model; |
|
|
const modelToExt = typeToExtend.model; |
|
|
const viewToExt = extendViewType ? extendViewType.view : typeToExtend.view; |
|
|
const viewToExt = extendViewType ? extendViewType.view : typeToExtend.view; |
|
|
|
|
|
|
|
|
@ -476,10 +452,7 @@ export default class ComponentManager extends ItemManagerModule { |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
{ |
|
|
{ |
|
|
isComponent: |
|
|
isComponent: compType && !extendType && !isComponent ? modelToExt.isComponent : isComponent || (() => 0), |
|
|
compType && !extendType && !isComponent |
|
|
|
|
|
? modelToExt.isComponent |
|
|
|
|
|
: isComponent || (() => 0), |
|
|
|
|
|
} |
|
|
} |
|
|
); |
|
|
); |
|
|
} |
|
|
} |
|
|
@ -552,9 +525,7 @@ export default class ComponentManager extends ItemManagerModule { |
|
|
component.set({ |
|
|
component.set({ |
|
|
status: 'selected', |
|
|
status: 'selected', |
|
|
}); |
|
|
}); |
|
|
['component:selected', 'component:toggled'].forEach((event) => |
|
|
['component:selected', 'component:toggled'].forEach(event => this.em.trigger(event, component, opts)); |
|
|
this.em.trigger(event, component, opts) |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -565,9 +536,7 @@ export default class ComponentManager extends ItemManagerModule { |
|
|
status: '', |
|
|
status: '', |
|
|
state: '', |
|
|
state: '', |
|
|
}); |
|
|
}); |
|
|
['component:deselected', 'component:toggled'].forEach((event) => |
|
|
['component:deselected', 'component:toggled'].forEach(event => this.em.trigger(event, component, opts)); |
|
|
this.em.trigger(event, component, opts) |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -634,7 +603,7 @@ export default class ComponentManager extends ItemManagerModule { |
|
|
source: null, |
|
|
source: null, |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
if (!source) return result; |
|
|
if (!source || !target) return result; |
|
|
|
|
|
|
|
|
//@ts-ignore
|
|
|
//@ts-ignore
|
|
|
let srcModel = source.toHTML ? source : null; |
|
|
let srcModel = source.toHTML ? source : null; |
|
|
@ -668,11 +637,7 @@ export default class ComponentManager extends ItemManagerModule { |
|
|
if (isFunction(droppable)) { |
|
|
if (isFunction(droppable)) { |
|
|
droppable = !!droppable(srcModel, target, at); |
|
|
droppable = !!droppable(srcModel, target, at); |
|
|
} else { |
|
|
} else { |
|
|
if ( |
|
|
if (droppable === false && target.isInstanceOf('text') && srcModel.get('textable')) { |
|
|
droppable === false && |
|
|
|
|
|
target.isInstanceOf('text') && |
|
|
|
|
|
srcModel.get('textable') |
|
|
|
|
|
) { |
|
|
|
|
|
droppable = true; |
|
|
droppable = true; |
|
|
} else { |
|
|
} else { |
|
|
const el = srcModel.getEl(); |
|
|
const el = srcModel.getEl(); |
|
|
@ -696,8 +661,8 @@ export default class ComponentManager extends ItemManagerModule { |
|
|
|
|
|
|
|
|
destroy() { |
|
|
destroy() { |
|
|
const all = this.allById(); |
|
|
const all = this.allById(); |
|
|
Object.keys(all).forEach((id) => all[id] && all[id].remove()); |
|
|
Object.keys(all).forEach(id => all[id] && all[id].remove()); |
|
|
this.componentView?.remove(); |
|
|
this.componentView?.remove(); |
|
|
[this.em, this.componentsById, this.componentView].forEach((i) => (i = {})); |
|
|
[this.em, this.componentsById, this.componentView].forEach(i => (i = {})); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|