mirror of
https://github.com/zenorocha/clipboard.js.git
synced 2023-08-10 21:12:48 +03:00
Emits event on base class instead of each element for better performance
This commit is contained in:
2
dist/clipboard.min.js
vendored
2
dist/clipboard.min.js
vendored
File diff suppressed because one or more lines are too long
@ -9,8 +9,8 @@
|
|||||||
"cut"
|
"cut"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"custom-event": "^1.0.0",
|
"delegate-events": "^1.1.1",
|
||||||
"delegate-events": "^1.1.1"
|
"tiny-emitter": "^1.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babelify": "^6.3.0",
|
"babelify": "^6.3.0",
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
var CustomEvent = require('custom-event');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inner class which performs selection and copy operations.
|
* Inner class which performs selection and copy operations.
|
||||||
*/
|
*/
|
||||||
@ -10,6 +8,7 @@ class ClipboardAction {
|
|||||||
*/
|
*/
|
||||||
constructor(options) {
|
constructor(options) {
|
||||||
this.action = options.action;
|
this.action = options.action;
|
||||||
|
this.host = options.host;
|
||||||
this.target = options.target;
|
this.target = options.target;
|
||||||
this.text = options.text;
|
this.text = options.text;
|
||||||
this.trigger = options.trigger;
|
this.trigger = options.trigger;
|
||||||
@ -85,33 +84,22 @@ class ClipboardAction {
|
|||||||
*/
|
*/
|
||||||
handleResult(succeeded) {
|
handleResult(succeeded) {
|
||||||
if (succeeded) {
|
if (succeeded) {
|
||||||
this.fireEvent('success', {
|
this.host.emit('success', {
|
||||||
action: this.action,
|
action: this.action,
|
||||||
text: this.selectedText,
|
text: this.selectedText,
|
||||||
|
trigger: this.trigger,
|
||||||
clearSelection: this.clearSelection.bind(this)
|
clearSelection: this.clearSelection.bind(this)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.fireEvent('error', {
|
this.host.emit('error', {
|
||||||
action: this.action,
|
action: this.action,
|
||||||
|
trigger: this.trigger,
|
||||||
clearSelection: this.clearSelection.bind(this)
|
clearSelection: this.clearSelection.bind(this)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Emits a custom event into the `trigger` element.
|
|
||||||
* @param {String} type
|
|
||||||
* @param {*} detail
|
|
||||||
*/
|
|
||||||
fireEvent(type, detail) {
|
|
||||||
let event = new CustomEvent(type, {
|
|
||||||
detail: detail
|
|
||||||
});
|
|
||||||
|
|
||||||
this.trigger.dispatchEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes current selection and focus from `target` element.
|
* Removes current selection and focus from `target` element.
|
||||||
*/
|
*/
|
||||||
|
@ -1,20 +1,21 @@
|
|||||||
var ClipboardAction = require('./clipboard-action');
|
const ClipboardAction = require('./clipboard-action');
|
||||||
var Delegate = require('dom-delegate').Delegate;
|
const Delegate = require('dom-delegate').Delegate;
|
||||||
|
const Emitter = require('tiny-emitter');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class which takes a selector, delegates a click event to it,
|
* Base class which takes a selector, delegates a click event to it,
|
||||||
* and instantiates a new `ClipboardAction` on each click.
|
* and instantiates a new `ClipboardAction` on each click.
|
||||||
*/
|
*/
|
||||||
class Clipboard {
|
class Clipboard extends Emitter {
|
||||||
/**
|
/**
|
||||||
* Delegates a click event to the passed selector.
|
* Delegates a click event on the passed selector.
|
||||||
* @param {String} selector
|
* @param {String} selector
|
||||||
*/
|
*/
|
||||||
constructor(selector) {
|
constructor(selector) {
|
||||||
this.selector = selector;
|
super();
|
||||||
|
|
||||||
let delegate = new Delegate(document.body);
|
let delegate = new Delegate(document.body);
|
||||||
delegate.on('click', this.selector, (e) => this.initialize(e));
|
delegate.on('click', selector, (e) => this.initialize(e));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -26,7 +27,8 @@ class Clipboard {
|
|||||||
action : e.target.getAttribute('data-action'),
|
action : e.target.getAttribute('data-action'),
|
||||||
target : e.target.getAttribute('data-target'),
|
target : e.target.getAttribute('data-target'),
|
||||||
text : e.target.getAttribute('data-text'),
|
text : e.target.getAttribute('data-text'),
|
||||||
trigger : e.target
|
trigger : e.target,
|
||||||
|
host : this
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user