|
1 |
| -angular.module('angular.zeroclipboard', []). |
2 |
| -provider('uiZeroclipConfig', function() { |
| 1 | +angular.module('zeroclipboard', []) |
| 2 | + .provider('uiZeroclipConfig', function() { |
3 | 3 | // default configs
|
4 | 4 | var _zeroclipConfig = {
|
5 |
| - buttonClass: '', |
6 |
| - moviePath: "ZeroClipboard.swf", |
7 |
| - trustedDomains: [window.location.host], |
8 |
| - cacheBust: true, |
9 |
| - forceHandCursor: false, |
10 |
| - zIndex: 999999999, |
11 |
| - debug: true, |
12 |
| - title: null, |
13 |
| - autoActivate: true, |
14 |
| - flashLoadTimeout: 30000, |
15 |
| - hoverClass: "zeroclipboard-is-hover", |
16 |
| - activeClass: "zeroclipboard-is-active" |
17 |
| - }; |
18 |
| - var _options = { |
19 |
| - buttonClass: '', |
20 |
| - buttonText: 'Copy', |
21 |
| - emitEvent: false |
| 5 | + buttonClass: '', |
| 6 | + moviePath: "ZeroClipboard.swf", |
| 7 | + trustedDomains: [window.location.host], |
| 8 | + cacheBust: true, |
| 9 | + forceHandCursor: false, |
| 10 | + zIndex: 999999999, |
| 11 | + debug: false, |
| 12 | + title: null, |
| 13 | + autoActivate: true, |
| 14 | + flashLoadTimeout: 30000, |
| 15 | + hoverClass: "zeroclipboard-is-hover", |
| 16 | + activeClass: "zeroclipboard-is-active" |
22 | 17 | };
|
23 | 18 | this.setZcConf = function(zcConf) {
|
24 |
| - angular.extend(_zeroclipConfig, zcConf); |
25 |
| - }; |
26 |
| - this.setOptions = function(options) { |
27 |
| - angular.extend(_options, options); |
| 19 | + angular.extend(_zeroclipConfig, zcConf); |
28 | 20 | };
|
29 | 21 | this.$get = function() {
|
30 |
| - return { |
31 |
| - zeroclipConfig: _zeroclipConfig, |
32 |
| - options: _options |
33 |
| - } |
| 22 | + return { |
| 23 | + zeroclipConfig: _zeroclipConfig |
| 24 | + } |
34 | 25 | };
|
35 |
| -}). |
36 |
| -directive('uiZeroclip', ['$document', '$window', 'uiZeroclipConfig', |
37 |
| - function($document, $window, uiZeroclipConfig) { |
| 26 | + }) |
| 27 | + |
| 28 | + .directive('uiZeroclip', ['$document', '$window', 'uiZeroclipConfig', |
| 29 | + function($document, $window, uiZeroclipConfig) { |
| 30 | + |
38 | 31 | var zeroclipConfig = uiZeroclipConfig.zeroclipConfig || {};
|
39 |
| - var options = uiZeroclipConfig.options; |
40 |
| - var _id = 0; |
| 32 | + var ZeroClipboard = $window.ZeroClipboard |
41 | 33 |
|
42 |
| - function insertAfter(newNode, referenceNode) { |
43 |
| - referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); |
44 |
| - } |
45 | 34 | return {
|
46 |
| - priority: 10, |
47 |
| - link: function(scope, elm, attrs) { |
48 |
| - // config |
49 |
| - ZeroClipboard.config(zeroclipConfig); |
50 |
| - var btn = elm[0]; |
51 |
| - if (!attrs.id) { |
52 |
| - attrs.$set('id', 'uiZeroclip' + _id); |
53 |
| - btn = document.createElement('button'); |
54 |
| - btn.appendChild(document.createTextNode(options.buttonText)); |
55 |
| - btn.setAttribute('data-clipboard-target', 'uiZeroclip' + _id); |
56 |
| - btn.setAttribute('class', options.buttonClass); |
57 |
| - _id++; |
58 |
| - insertAfter(btn, elm[0]); |
59 |
| - } |
60 |
| - if (angular.isFunction(ZeroClipboard)) { |
61 |
| - scope.client = new ZeroClipboard(btn); |
62 |
| - } |
63 |
| - var _events = ['load', 'mouseover', 'mouseout', 'mouseup', 'mousedown', 'complete', 'dataRequested', 'noflash', 'wrongflash']; |
64 |
| - _events.forEach(function(evt) { |
65 |
| - if (options.emitEvent) { |
66 |
| - scope.client.on(evt, function() { |
67 |
| - scope.$emit('ZeroClipboard.' + evt); |
68 |
| - }); |
69 |
| - } else { |
70 |
| - scope.client.on(evt, options[evt]); |
71 |
| - } |
72 |
| - }) |
| 35 | + scope: { |
| 36 | + onCopied: '&zeroclipCopied', |
| 37 | + client: '=?uiZeroclip', |
| 38 | + value: '=zeroclipModel' |
| 39 | + }, |
| 40 | + link: function(scope, element, attrs) { |
| 41 | + // config |
| 42 | + ZeroClipboard.config(zeroclipConfig); |
| 43 | + var btn = element[0]; |
| 44 | + |
| 45 | + if (angular.isFunction(ZeroClipboard)) { |
| 46 | + client = scope.client = new ZeroClipboard(btn); |
73 | 47 | }
|
| 48 | + |
| 49 | + scope.$watch('value', function(v) { |
| 50 | + element.attr('data-clipboard-text', v); |
| 51 | + }); |
| 52 | + |
| 53 | + client.on('complete', function _completeHnd(e) { |
| 54 | + scope.$apply(function() { |
| 55 | + scope.onCopied({$event: e}); |
| 56 | + }); |
| 57 | + }); |
| 58 | + |
| 59 | + scope.$on('$destroy', function() { |
| 60 | + client.off('complete', _completeHnd) |
| 61 | + }); |
| 62 | + } |
74 | 63 | }
|
75 |
| - } |
76 |
| -]); |
| 64 | + } |
| 65 | + ]); |
0 commit comments