mirror of
https://github.com/zenorocha/clipboard.js.git
synced 2023-08-10 21:12:48 +03:00
if called with element, remove event listener on undelegate
This commit is contained in:
parent
4cc0f7a77e
commit
ce93b5e0f7
@ -17,7 +17,7 @@ class Clipboard extends Emitter {
|
||||
this.resolveOptions(options);
|
||||
if (typeof selector === 'string') {
|
||||
this.delegateClickToSelector(selector);
|
||||
} else if (selector !== null && typeof selector === 'object') {
|
||||
} else if ('addEventListener' in selector) {
|
||||
this.delegateClickToElement(selector);
|
||||
} else {
|
||||
throw new Error('`selector` should be a CSS selector string or elements itself.');
|
||||
@ -48,12 +48,8 @@ class Clipboard extends Emitter {
|
||||
* @param {Object} element
|
||||
*/
|
||||
delegateClickToElement(element) {
|
||||
element.addEventListener('click', (e) => {
|
||||
e.delegateTarget = element;
|
||||
if (e.delegateTarget) {
|
||||
(e) => this.onClick(e);
|
||||
}
|
||||
});
|
||||
this.element = element;
|
||||
element.addEventListener('click', this.onClickEventListener.bind(this));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -61,7 +57,20 @@ class Clipboard extends Emitter {
|
||||
* @param {String} selector
|
||||
*/
|
||||
undelegateClick() {
|
||||
Delegate.unbind(document.body, 'click', this.binding);
|
||||
if (this.binding) {
|
||||
Delegate.unbind(document.body, 'click', this.binding);
|
||||
} else if (this.element) {
|
||||
this.element.removeEventListener('click', this.onClickEventListener);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Click event when using event listener
|
||||
* @param {Event} e
|
||||
*/
|
||||
onClickEventListener(e) {
|
||||
e.delegateTarget = this.element;
|
||||
this.onClick(e);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -69,27 +69,6 @@ describe('Clipboard', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('#undelegateClick', function() {
|
||||
before(() => {
|
||||
global.spy = sinon.spy(Delegate, 'unbind');
|
||||
});
|
||||
|
||||
after(() => {
|
||||
global.spy.restore();
|
||||
});
|
||||
|
||||
it('should undelegate a click event', () => {
|
||||
let element = document.body;
|
||||
let event = 'click';
|
||||
|
||||
let clipboard = new Clipboard('.btn');
|
||||
clipboard.undelegateClick();
|
||||
|
||||
assert.ok(global.spy.calledOnce);
|
||||
assert.ok(global.spy.calledWith(element, event));
|
||||
});
|
||||
});
|
||||
|
||||
describe('#delegateClickToElement', function() {
|
||||
before(() => {
|
||||
global.spy = sinon.spy(global.button, 'addEventListener');
|
||||
@ -109,6 +88,38 @@ describe('Clipboard', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('#undelegateClick', function() {
|
||||
before(() => {
|
||||
global.spy = sinon.spy(Delegate, 'unbind');
|
||||
global.elementSpy = sinon.spy(global.button, 'removeEventListener');
|
||||
});
|
||||
|
||||
after(() => {
|
||||
global.spy.restore();
|
||||
});
|
||||
|
||||
it('should undelegate a click event', () => {
|
||||
let element = document.body;
|
||||
let event = 'click';
|
||||
|
||||
let clipboard = new Clipboard('.btn');
|
||||
clipboard.undelegateClick();
|
||||
|
||||
assert.ok(global.spy.calledOnce);
|
||||
assert.ok(global.spy.calledWith(element, event));
|
||||
});
|
||||
|
||||
it('should remove event listeners from elements', () => {
|
||||
let event = 'click';
|
||||
|
||||
let clipboard = new Clipboard(global.button);
|
||||
clipboard.undelegateClick();
|
||||
|
||||
assert.ok(global.elementSpy.calledOnce);
|
||||
//assert.ok(global.elementSpy.calledWith(event, clipboard.onClickEventListener));
|
||||
});
|
||||
});
|
||||
|
||||
describe('#onClick', () => {
|
||||
it('should create a new instance of ClipboardAction', () => {
|
||||
let clipboard = new Clipboard('.btn');
|
||||
|
Loading…
Reference in New Issue
Block a user