ui/app/components/zero-clipboard/component.js

84 lines
1.8 KiB
JavaScript

import Ember from 'ember';
/* global ZeroClipboard */
var COPY = 'Copy to Clipboard';
export default Ember.Component.extend({
text: '',
tooltip: COPY,
block: false,
icon: 'icon icon-copy',
label: '',
tagName: 'button',
classNames: ['zeroclip','btn'],
classNameBindings: ['block::small','block:btn-primary:btn-link'],
attributeBindings: ['data-clipboard-text', 'data-clipboard-target','tooltip'],
clip: null,
"data-clipboard-text": function(){
return this.get('text');
}.property('text'),
"data-clipboard-target": function(){
return this.get('cbTarget');
}.property('cbTarget'),
didInsertElement: function () {
var client = new ZeroClipboard(this.get('element'));
this.set('clip', client);
client.on('aftercopy', Ember.run.bind(this, function(event) {
try {
this.set('tooltip','Copied!');
this.$().tooltip('show');
Ember.run.later(this, () => {
this.get('element').blur();
this.set('tooltip', COPY);
}, 500);
} catch(e) {}
this.sendAction('action', event);
}));
client.on('error', Ember.run.bind(this, function() {
this.set('tooltip', 'Copy to Clipboard not available');
this.$().hide();
}));
this.$().tooltip({
animation: false,
title: () => {
return this.get('tooltip');
},
});
},
willDestroyElement: function() {
this.get('clip').destroy();
this.$().tooltip('destroy');
},
render: function (buffer) {
if ( this.get('text') )
{
var icon = this.get('icon');
var label = this.get('label');
if ( icon )
{
buffer.push('<i class="'+ this.get('icon') + '"></i> ');
}
if ( label )
{
buffer.push(label);
}
}
},
stateChanged: function() {
this.rerender();
}.observes('icon','label','text')
});