|
|
@ -11,6 +11,11 @@ import { |
|
|
|
|
|
|
|
|
let Component; |
|
|
let Component; |
|
|
|
|
|
|
|
|
|
|
|
const getIdsToKeep = prev => { |
|
|
|
|
|
const pr = prev || []; |
|
|
|
|
|
return pr.map(comp => comp.getId()); |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
export default Backbone.Collection.extend({ |
|
|
export default Backbone.Collection.extend({ |
|
|
initialize(models, opt = {}) { |
|
|
initialize(models, opt = {}) { |
|
|
this.opt = opt; |
|
|
this.opt = opt; |
|
|
@ -24,8 +29,10 @@ export default Backbone.Collection.extend({ |
|
|
|
|
|
|
|
|
resetChildren(models, opts = {}) { |
|
|
resetChildren(models, opts = {}) { |
|
|
const coll = this; |
|
|
const coll = this; |
|
|
const { previousModels = [] } = opts; |
|
|
const prev = opts.previousModels || []; |
|
|
previousModels.forEach(md => this.removeChildren(md, coll, opts)); |
|
|
const toRemove = prev.filter(prev => !models.get(prev.cid)); |
|
|
|
|
|
opts.keepIds = getIdsToKeep(prev); |
|
|
|
|
|
toRemove.forEach(md => this.removeChildren(md, coll, opts)); |
|
|
models.each(model => this.onAdd(model)); |
|
|
models.each(model => this.onAdd(model)); |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
@ -44,12 +51,15 @@ export default Backbone.Collection.extend({ |
|
|
const id = removed.getId(); |
|
|
const id = removed.getId(); |
|
|
const sels = em.get('SelectorManager').getAll(); |
|
|
const sels = em.get('SelectorManager').getAll(); |
|
|
const rules = em.get('CssComposer').getAll(); |
|
|
const rules = em.get('CssComposer').getAll(); |
|
|
|
|
|
const canRemoveStyle = (opts.keepIds || []).indexOf(id) < 0; |
|
|
delete allByID[id]; |
|
|
delete allByID[id]; |
|
|
|
|
|
|
|
|
// Remove all component related styles
|
|
|
// Remove all component related styles
|
|
|
const rulesRemoved = rules.remove( |
|
|
const rulesRemoved = canRemoveStyle |
|
|
rules.filter(r => r.getSelectors().getFullString() === `#${id}`) |
|
|
? rules.remove( |
|
|
); |
|
|
rules.filter(r => r.getSelectors().getFullString() === `#${id}`) |
|
|
|
|
|
) |
|
|
|
|
|
: []; |
|
|
|
|
|
|
|
|
// Clean selectors
|
|
|
// Clean selectors
|
|
|
sels.remove(rulesRemoved.map(rule => rule.getSelectors().at(0))); |
|
|
sels.remove(rulesRemoved.map(rule => rule.getSelectors().at(0))); |
|
|
@ -117,7 +127,7 @@ export default Backbone.Collection.extend({ |
|
|
const parsed = em.get('Parser').parseHtml(value); |
|
|
const parsed = em.get('Parser').parseHtml(value); |
|
|
// We need this to avoid duplicate IDs
|
|
|
// We need this to avoid duplicate IDs
|
|
|
if (!Component) Component = require('./Component').default; |
|
|
if (!Component) Component = require('./Component').default; |
|
|
Component.checkId(parsed.html, parsed.css, domc.componentsById); |
|
|
Component.checkId(parsed.html, parsed.css, domc.componentsById, opt); |
|
|
|
|
|
|
|
|
if (parsed.css && cssc && !opt.temporary) { |
|
|
if (parsed.css && cssc && !opt.temporary) { |
|
|
cssc.addCollection(parsed.css, { |
|
|
cssc.addCollection(parsed.css, { |
|
|
@ -130,6 +140,8 @@ export default Backbone.Collection.extend({ |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
add(models, opt = {}) { |
|
|
add(models, opt = {}) { |
|
|
|
|
|
opt.keepIds = getIdsToKeep(opt.previousModels); |
|
|
|
|
|
|
|
|
if (isString(models)) { |
|
|
if (isString(models)) { |
|
|
models = this.parseString(models, opt); |
|
|
models = this.parseString(models, opt); |
|
|
} else if (isArray(models)) { |
|
|
} else if (isArray(models)) { |
|
|
|