Browse Source

Fix selector view removing

no-jquery
Artur Arseniev 9 years ago
parent
commit
4278f5d8e1
  1. 23
      src/selector_manager/view/ClassTagView.js
  2. 98
      test/specs/selector_manager/e2e/ClassManager.js
  3. 3
      test/specs/selector_manager/index.js
  4. 5
      test/specs/selector_manager/view/ClassTagView.js

23
src/selector_manager/view/ClassTagView.js

@ -9,8 +9,6 @@ module.exports = Backbone.View.extend({
</span> </span>
<span id="<%= pfx %>close">&Cross;</span>`), <span id="<%= pfx %>close">&Cross;</span>`),
events: {},
initialize(o) { initialize(o) {
this.config = o.config || {}; this.config = o.config || {};
this.coll = o.coll || null; this.coll = o.coll || null;
@ -22,6 +20,7 @@ module.exports = Backbone.View.extend({
this.closeId = this.pfx + 'close'; this.closeId = this.pfx + 'close';
this.chkId = this.pfx + 'checkbox'; this.chkId = this.pfx + 'checkbox';
this.labelId = this.pfx + 'tag-label'; this.labelId = this.pfx + 'tag-label';
this.events = {};
this.events['click #' + this.closeId ] = 'removeTag'; this.events['click #' + this.closeId ] = 'removeTag';
this.events['click #' + this.chkId ] = 'changeStatus'; this.events['click #' + this.chkId ] = 'changeStatus';
this.events['dblclick #' + this.labelId ] = 'startEditTag'; this.events['dblclick #' + this.labelId ] = 'startEditTag';
@ -77,17 +76,15 @@ module.exports = Backbone.View.extend({
* @private * @private
*/ */
removeTag(e) { removeTag(e) {
var comp = this.target.get('selectedComponent'); const em = this.target;
const model = this.model;
if(comp) const coll = this.coll;
comp.get('classes').remove(this.model); const el = this.el;
const sel = em && em.get('selectedComponent');
if(this.coll){ sel && sel.get & sel.get('classes').remove(model);
this.coll.remove(this.model); coll && coll.remove(model);
this.target.trigger('targetClassRemoved'); setTimeout(() => this.remove(), 0);
} em && em.trigger('targetClassRemoved');
this.remove();
}, },
/** /**

98
test/specs/selector_manager/e2e/ClassManager.js

@ -5,28 +5,35 @@ module.exports = {
run() { run() {
describe('E2E tests', () => { describe('E2E tests', () => {
var instClassTagViewer = ctx => { var fixtures;
var $clm; var components;
var clm = ctx.gjs.editor.get('SelectorManager'); var tagEl;
if(clm){ var gjs;
$clm = new ClassTagsView({
var instClassTagViewer = (gjs, fixtures) => {
var tagEl;
var clm = gjs.editor.get('SelectorManager');
if (clm) {
tagEl = new ClassTagsView({
collection: new Selectors([]), collection: new Selectors([]),
config: { config: {em: gjs.editor}
em: ctx.gjs.editor
},
}).render(); }).render();
ctx.$fixture.append($clm.el); fixtures.appendChild(tagEl.el);
} }
return $clm;
};
return tagEl;
};
/*
before(function () { before(function () {
this.$fixtures = $("#fixtures"); this.$fixtures = $("#fixtures");
this.$fixture = $('<div id="SelectorManager-fixture"></div>'); this.$fixture = $('<div id="SelectorManager-fixture"></div>');
}); });
*/
beforeEach(function () { beforeEach(function () {
this.gjs = grapesjs.init({ document.body.innerHTML = '<div id="fixtures"><div id="SelectorManager-fixture"></div></div>';
fixtures = document.body.firstChild;
gjs = grapesjs.init({
stylePrefix: '', stylePrefix: '',
storageManager: { autoload: 0, type:'none' }, storageManager: { autoload: 0, type:'none' },
assetManager: { assetManager: {
@ -34,82 +41,67 @@ module.exports = {
}, },
container: '#SelectorManager-fixture', container: '#SelectorManager-fixture',
}); });
this.$fixture.empty().appendTo(this.$fixtures);
this.gjs.render();
});
afterEach(function () {
delete this.gjs;
});
after(function () {
this.$fixture.remove();
}); });
describe('Interaction with Components', () => { describe('Interaction with Components', () => {
beforeEach(function () { beforeEach(function () {
this.wrapper = this.gjs.editor.get('DomComponents').getWrapper().get('components'); components = gjs.editor.get('DomComponents').getWrapper().get('components');
this.$clm = instClassTagViewer(this); tagEl = instClassTagViewer(gjs, fixtures);
});
afterEach(function () {
delete this.wrapper;
delete this.$clm;
}); });
it('Assign correctly new class to component', function() { it('Assign correctly new class to component', function() {
var model = this.wrapper.add({}); var model = components.add({});
expect(model.get('classes').length).toEqual(0); expect(model.get('classes').length).toEqual(0);
this.gjs.editor.set('selectedComponent', model); gjs.editor.set('selectedComponent', model);
this.$clm.addNewTag('test'); tagEl.addNewTag('test');
expect(model.get('classes').length).toEqual(1); expect(model.get('classes').length).toEqual(1);
expect(model.get('classes').at(0).get('name')).toEqual('test'); expect(model.get('classes').at(0).get('name')).toEqual('test');
}); });
it('Classes from components are correctly imported inside main container', function() { it('Classes from components are correctly imported inside main container', function() {
var model = this.wrapper.add([ var model = components.add([
{ classes: ['test11', 'test12', 'test13'] }, { classes: ['test11', 'test12', 'test13'] },
{ classes: ['test11', 'test22', 'test22'] }, { classes: ['test11', 'test22', 'test22'] },
]); ]);
expect(this.gjs.editor.get('SelectorManager').getAll().length).toEqual(4); expect(gjs.editor.get('SelectorManager').getAll().length).toEqual(4);
}); });
it('Class imported into component is the same model from main container', function() { it('Class imported into component is the same model from main container', function() {
var model = this.wrapper.add({ classes: ['test1'] }); var model = components.add({ classes: ['test1'] });
var clModel = model.get('classes').at(0); var clModel = model.get('classes').at(0);
var clModel2 = this.gjs.editor.get('SelectorManager').getAll().at(0); var clModel2 = gjs.editor.get('SelectorManager').getAll().at(0);
expect(clModel).toEqual(clModel2); expect(clModel).toEqual(clModel2);
}); });
it('Can assign only one time the same class on selected component and the class viewer', function() { it('Can assign only one time the same class on selected component and the class viewer', function() {
var model = this.wrapper.add({}); var model = components.add({});
this.gjs.editor.set('selectedComponent', model); gjs.editor.set('selectedComponent', model);
this.$clm.addNewTag('test'); tagEl.addNewTag('test');
this.$clm.addNewTag('test'); tagEl.addNewTag('test');
expect(model.get('classes').length).toEqual(1); expect(model.get('classes').length).toEqual(1);
expect(model.get('classes').at(0).get('name')).toEqual('test'); expect(model.get('classes').at(0).get('name')).toEqual('test');
expect(this.$clm.collection.length).toEqual(1); expect(tagEl.collection.length).toEqual(1);
expect(this.$clm.collection.at(0).get('name')).toEqual('test'); expect(tagEl.collection.at(0).get('name')).toEqual('test');
}); });
it('Removing from container removes also from selected component', function() { it('Removing from container removes also from selected component', function() {
var model = this.wrapper.add({}); var model = components.add({});
this.gjs.editor.set('selectedComponent', model); gjs.editor.set('selectedComponent', model);
this.$clm.addNewTag('test'); tagEl.addNewTag('test');
this.$clm.getClasses().find('.tag #close').trigger('click') tagEl.getClasses().find('.tag #close').trigger('click')
expect(model.get('classes').length).toEqual(0); expect(model.get('classes').length).toEqual(0);
}); });
it("Trigger correctly event on target with new class add", function() { it("Trigger correctly event on target with new class add", function() {
var spy = sinon.spy(); var spy = sinon.spy();
var model = this.wrapper.add({}); var model = components.add({});
this.gjs.editor.set('selectedComponent', model); gjs.editor.set('selectedComponent', model);
this.$clm.addNewTag('test'); tagEl.addNewTag('test');
this.gjs.editor.on("targetClassAdded", spy); gjs.editor.on("targetClassAdded", spy);
this.$clm.addNewTag('test'); tagEl.addNewTag('test');
expect(spy.called).toEqual(false); expect(spy.called).toEqual(false);
this.$clm.addNewTag('test2'); tagEl.addNewTag('test2');
expect(spy.called).toEqual(true); expect(spy.called).toEqual(true);
}); });

3
test/specs/selector_manager/index.js

@ -82,9 +82,6 @@ describe('SelectorManager', () => {
describe('Views', () => { describe('Views', () => {
ClassTagView.run(); ClassTagView.run();
ClassTagsView.run(); ClassTagsView.run();
});
describe.skip('E2E', () => {
e2e.run(); e2e.run();
}); });

5
test/specs/selector_manager/view/ClassTagView.js

@ -65,11 +65,8 @@ module.exports = {
}); });
it('Could be removed', () => { it('Could be removed', () => {
var spy = sinon.spy();
obj.config.target = { get() {} };
sinon.stub(obj.config.target, 'get').returns(0);
obj.$el.find('#close').trigger('click'); obj.$el.find('#close').trigger('click');
expect(fixtures.innerHTML).toNotExist(); setTimeout(() => expect(fixtures.innerHTML).toNotExist(), 0)
}); });
it('On remove triggers event', () => { it('On remove triggers event', () => {

Loading…
Cancel
Save