|
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