diff --git a/index.html b/index.html index bb38508d5..6f29aa3d7 100755 --- a/index.html +++ b/index.html @@ -831,7 +831,7 @@ fromElement: true, clearOnRender: 0, - storageManager:{ + storageManager: { autoload: 1, storeComponents: 1, storeStyles: 1, diff --git a/src/dom_components/config/config.js b/src/dom_components/config/config.js index e6174ad30..25095b70a 100644 --- a/src/dom_components/config/config.js +++ b/src/dom_components/config/config.js @@ -7,8 +7,6 @@ module.exports = { // Default wrapper configuration wrapper: { - // Need this property for exports - wrapper: 1, style: {margin: 0}, removable: false, copyable: false, diff --git a/src/dom_components/index.js b/src/dom_components/index.js index d901b6740..f836bc688 100644 --- a/src/dom_components/index.js +++ b/src/dom_components/index.js @@ -34,13 +34,12 @@ */ module.exports = () => { var c = {}, - componentTypes = {}, defaults = require('./config/config'), Component = require('./model/Component'), ComponentView = require('./view/ComponentView'); var component, componentView; - var defaultTypes = [ + var componentTypes = [ { id: 'cell', model: require('./model/ComponentTableCell'), @@ -105,7 +104,7 @@ module.exports = () => { return { - componentTypes: defaultTypes, + componentTypes, /** * Name of the module @@ -166,27 +165,42 @@ module.exports = () => { c.rte = em.get('rte') || ''; c.modal = em.get('Modal') || ''; c.am = em.get('AssetManager') || ''; - em.get('Parser').compTypes = defaultTypes; + em.get('Parser').compTypes = componentTypes; em.on('change:selectedComponent', this.componentChanged, this); } - c.wrapper['custom-name'] = c.wrapperName; - component = new Component(c.wrapper, { + // Build wrapper + let components = c.components; + let wrapper = Object.assign({}, c.wrapper); + wrapper['custom-name'] = c.wrapperName; + wrapper.wrapper = 1; + + // Components might be a wrapper + if (components && components.constructor === Object && components.wrapper) { + wrapper = Object.assign({}, components); + components = components.components || []; + wrapper.components = []; + + // Have to put back the real object of components + if (em) { + em.config.components = components; + } + } + + component = new Component(wrapper, { sm: em, config: c, - defaultTypes, componentTypes, }); component.set({ attributes: {id: 'wrapper'}}); if(em && !em.config.loadCompsOnRender) { - component.get('components').add(c.components); + component.get('components').add(components); } componentView = new ComponentView({ model: component, config: c, - defaultTypes, componentTypes, }); return this; @@ -198,7 +212,6 @@ module.exports = () => { */ onLoad() { if(c.stm && c.stm.isAutosave()){ - //console.log('OnLoad', this.getWrapper().get('components')); c.em.initUndoManager(); c.em.initChildrenComp(this.getWrapper()); } @@ -405,7 +418,7 @@ module.exports = () => { compType.view = methods.view; } else { methods.id = type; - defaultTypes.unshift(methods); + componentTypes.unshift(methods); } }, @@ -415,7 +428,7 @@ module.exports = () => { * @private */ getType(type) { - var df = defaultTypes; + var df = componentTypes; for (var it = 0; it < df.length; it++) { var dfId = df[it].id; diff --git a/src/dom_components/model/Components.js b/src/dom_components/model/Components.js index b9d5c78e5..595966557 100644 --- a/src/dom_components/model/Components.js +++ b/src/dom_components/model/Components.js @@ -21,13 +21,10 @@ module.exports = Backbone.Collection.extend({ if(opt && opt.config) options.config = opt.config; - if(opt && opt.defaultTypes) - options.defaultTypes = opt.defaultTypes; - if(opt && opt.componentTypes) options.componentTypes = opt.componentTypes; - var df = opt.defaultTypes; + var df = opt.componentTypes; for (var it = 0; it < df.length; it++) { var dfId = df[it].id; diff --git a/src/dom_components/view/ComponentView.js b/src/dom_components/view/ComponentView.js index 3e5621de8..a56aa3082 100644 --- a/src/dom_components/view/ComponentView.js +++ b/src/dom_components/view/ComponentView.js @@ -302,7 +302,6 @@ module.exports = Backbone.View.extend({ var view = new ComponentsView({ collection: this.model.get('components'), config: this.config, - defaultTypes: this.opts.defaultTypes, componentTypes: this.opts.componentTypes, }); diff --git a/src/dom_components/view/ComponentsView.js b/src/dom_components/view/ComponentsView.js index a0767087f..5f9366cf4 100644 --- a/src/dom_components/view/ComponentsView.js +++ b/src/dom_components/view/ComponentsView.js @@ -44,8 +44,7 @@ module.exports = Backbone.View.extend({ viewObject = this.compView; //console.log('Add to collection', model, 'Index',i); - var dt = this.opts.defaultTypes; - var ct = this.opts.componentTypes; + var dt = this.opts.componentTypes; var type = model.get('type'); @@ -61,8 +60,7 @@ module.exports = Backbone.View.extend({ var view = new viewObject({ model, config: this.config, - defaultTypes: dt, - componentTypes: ct, + componentTypes: dt, }); var rendered = view.render().el; if(view.model.get('type') == 'textnode') diff --git a/src/domain_abstract/model/Typeable.js b/src/domain_abstract/model/TypeableCollection.js similarity index 80% rename from src/domain_abstract/model/Typeable.js rename to src/domain_abstract/model/TypeableCollection.js index 022796877..a5278480f 100644 --- a/src/domain_abstract/model/Typeable.js +++ b/src/domain_abstract/model/TypeableCollection.js @@ -14,6 +14,26 @@ export default { init && init(); }, + /** + * Recognize type by any value + * @param {mixed} value + * @return {Object} Found type + */ + recognizeType(value) { + const types = this.getTypes(); + + for (let i = 0; i < types.length; i++) { + const type = types[i]; + let typeFound = type.isType(value); + typeFound = typeof typeFound == 'boolean' && typeFound ? + {type: type.id} : typeFound; + + if (typeFound) { + return typeFound; + } + } + }, + /** * Returns the base type (last object in the stack) * @return {Object} diff --git a/src/editor/view/EditorView.js b/src/editor/view/EditorView.js index 62bf39723..305dbcce9 100644 --- a/src/editor/view/EditorView.js +++ b/src/editor/view/EditorView.js @@ -7,11 +7,11 @@ module.exports = Backbone.View.extend({ this.pn = this.model.get('Panels'); this.conf = this.model.config; this.className = this.conf.stylePrefix + 'editor'; - this.model.on('loaded', function(){ + this.model.on('loaded', () => { this.pn.active(); this.model.runDefault(); - this.model.trigger('load'); - }, this); + setTimeout(() => this.model.trigger('load'), 0); + }); }, render() { diff --git a/test/specs/code_manager/model/CodeModels.js b/test/specs/code_manager/model/CodeModels.js index 6fe3f3394..6c580d047 100644 --- a/test/specs/code_manager/model/CodeModels.js +++ b/test/specs/code_manager/model/CodeModels.js @@ -14,7 +14,7 @@ module.exports = { obj = new HtmlGenerator(); var dcomp = new DomComponents(); comp = new Component({}, { - defaultTypes: dcomp.componentTypes, + componentTypes: dcomp.componentTypes, }); }); @@ -64,7 +64,7 @@ module.exports = { obj = new CssGenerator(); var dcomp = new DomComponents(); comp = new Component({}, { - defaultTypes: dcomp.componentTypes, + componentTypes: dcomp.componentTypes, }); }); diff --git a/test/specs/dom_components/model/Component.js b/test/specs/dom_components/model/Component.js index 019f2108a..d7f4b5474 100644 --- a/test/specs/dom_components/model/Component.js +++ b/test/specs/dom_components/model/Component.js @@ -19,7 +19,7 @@ module.exports = { obj = new Component(); dcomp = new DomComponents(); compOpts = { - defaultTypes: dcomp.componentTypes, + componentTypes: dcomp.componentTypes, }; }); @@ -254,7 +254,7 @@ module.exports = { beforeEach(() => { dcomp = new DomComponents(); compOpts = { - defaultTypes: dcomp.componentTypes, + componentTypes: dcomp.componentTypes, } }); diff --git a/test/specs/dom_components/view/ComponentV.js b/test/specs/dom_components/view/ComponentV.js index 930462cf3..36b2f4da9 100644 --- a/test/specs/dom_components/view/ComponentV.js +++ b/test/specs/dom_components/view/ComponentV.js @@ -23,7 +23,7 @@ module.exports = { beforeEach(() => { dcomp = new DomComponents(); compOpts = { - defaultTypes: dcomp.componentTypes, + componentTypes: dcomp.componentTypes, }; model = new Component(); view = new ComponentView({ @@ -129,7 +129,7 @@ module.exports = { }, compOpts); view = new ComponentView({ model, - defaultTypes: dcomp.componentTypes, + componentTypes: dcomp.componentTypes, }); expect(view.render().$el.html()).toEqual('
'); }); diff --git a/test/specs/dom_components/view/ComponentsView.js b/test/specs/dom_components/view/ComponentsView.js index 8f3f1b730..18634674b 100644 --- a/test/specs/dom_components/view/ComponentsView.js +++ b/test/specs/dom_components/view/ComponentsView.js @@ -21,12 +21,12 @@ module.exports = { beforeEach(() => { dcomp = new DomComponents(); compOpts = { - defaultTypes: dcomp.componentTypes, + componentTypes: dcomp.componentTypes, }; model = new Components([], compOpts); view = new ComponentsView({ collection: model, - defaultTypes: dcomp.componentTypes, + componentTypes: dcomp.componentTypes, }); $fixture.empty().appendTo($fixtures); $fixture.html(view.render().el);