40 lines
1.0 KiB
JavaScript
40 lines
1.0 KiB
JavaScript
import Component from '@ember/component';
|
|
import { get } from '@ember/object';
|
|
import { inject as service } from '@ember/service';
|
|
|
|
import WithListeners from 'consul-ui/mixins/with-listeners';
|
|
|
|
export default Component.extend(WithListeners, {
|
|
clipboard: service('clipboard/os'),
|
|
tagName: 'button',
|
|
classNames: ['copy-btn'],
|
|
buttonType: 'button',
|
|
disabled: false,
|
|
error: function() {},
|
|
success: function() {},
|
|
attributeBindings: [
|
|
'clipboardText:data-clipboard-text',
|
|
'clipboardTarget:data-clipboard-target',
|
|
'clipboardAction:data-clipboard-action',
|
|
'buttonType:type',
|
|
'disabled',
|
|
'aria-label',
|
|
'title',
|
|
],
|
|
delegateClickEvent: true,
|
|
|
|
didInsertElement: function() {
|
|
this._super(...arguments);
|
|
const clipboard = get(this, 'clipboard').execute(
|
|
this.delegateClickEvent ? `#${this.elementId}` : this.element
|
|
);
|
|
['success', 'error'].map(event => {
|
|
return this.listen(clipboard, event, () => {
|
|
if (!this.disabled) {
|
|
this[event](...arguments);
|
|
}
|
|
});
|
|
});
|
|
},
|
|
});
|