diff --git a/.gitignore b/.gitignore index 62562b7..d3b9cc4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ coverage +bower_components node_modules +.DS_Store +.idea/ \ No newline at end of file diff --git a/angular-clipboard.js b/angular-clipboard.js index 084fbaf..3f4414e 100644 --- a/angular-clipboard.js +++ b/angular-clipboard.js @@ -10,6 +10,22 @@ }(this, function (angular) { return angular.module('angular-clipboard', []) + .provider('angularClipboard', function () { + this.options = { + onCopiedDefaultCallback: false, + onErrorDefaultCallback: false + }; + this.configure = function (options) { + angular.extend(this.options, options); + }; + this.$get = function() { + return { + defaultOnCopied: this.options.onCopiedDefaultCallback, + defaultOnError: this.options.onErrorDefaultCallback, + }; + }; + return this; + }) .factory('clipboard', ['$document', '$window', function ($document, $window) { function createNode(text, context) { var node = $document[0].createElement('textarea'); @@ -51,27 +67,47 @@ return angular.module('angular-clipboard', []) supported: 'queryCommandSupported' in $document[0] && $document[0].queryCommandSupported('copy') }; }]) - .directive('clipboard', ['clipboard', function (clipboard) { + .directive('clipboard', ['clipboard', 'angularClipboard', function (clipboard, angularClipboardProvider) { return { restrict: 'A', scope: { - onCopied: '&', - onError: '&', + onCopied: '&?', + onError: '&?', text: '=', supported: '=?' }, - link: function (scope, element) { + link: function (scope, element, attrs) { scope.supported = clipboard.supported; + var onCopiedCallback = false; + if (angular.isFunction(scope.onCopied)) { + onCopiedCallback = scope.onCopied; + } else if (angular.isFunction(angularClipboardProvider.defaultOnCopied)) { + onCopiedCallback = function(params){ + angularClipboardProvider.defaultOnCopied(params.text); + }; + } + scope.onCopiedCallback = onCopiedCallback; + + var onErrorCallback = false; + if (angular.isFunction(scope.onError)) { + onErrorCallback = scope.onError; + } else if (angular.isFunction(angularClipboardProvider.defaultOnError)) { + onErrorCallback = function(params){ + angularClipboardProvider.defaultOnError(params.err); + }; + } + scope.onErrorCallback = onErrorCallback; + element.on('click', function (event) { try { clipboard.copyText(scope.text, element[0]); - if (angular.isFunction(scope.onCopied)) { - scope.$evalAsync(scope.onCopied()); + if (scope.onCopiedCallback) { + scope.onCopiedCallback({text:scope.text}); } } catch (err) { - if (angular.isFunction(scope.onError)) { - scope.$evalAsync(scope.onError({err: err})); + if (scope.onErrorCallback) { + scope.onErrorCallback({err: err}); } } }); diff --git a/demo/demo.html b/demo/demo.html index 0699de8..a6ae1b5 100644 --- a/demo/demo.html +++ b/demo/demo.html @@ -10,7 +10,7 @@

Click button to copy text to clipboard


- +

@@ -22,6 +22,25 @@

Click button to copy text to clipboard