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);
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
});
|