/** * angular-spinner version 0.5.0 * License: MIT. * Copyright (C) 2013, 2014, Uri Shaked and contributors. */ (function (root) { 'use strict'; function factory(angular, Spinner) { angular .module('angularSpinner', []) .factory('usSpinnerService', ['$rootScope', function ($rootScope) { var config = {}; config.spin = function (key) { $rootScope.$broadcast('us-spinner:spin', key); }; config.stop = function (key) { $rootScope.$broadcast('us-spinner:stop', key); }; return config; }]) .directive('usSpinner', ['$window', function ($window) { return { scope: true, link: function (scope, element, attr) { var SpinnerConstructor = Spinner || $window.Spinner; scope.spinner = null; scope.key = angular.isDefined(attr.spinnerKey) ? attr.spinnerKey : false; scope.startActive = angular.isDefined(attr.spinnerStartActive) ? attr.spinnerStartActive : scope.key ? false : true; scope.spin = function () { if (scope.spinner) { scope.spinner.spin(element[0]); } }; scope.stop = function () { if (scope.spinner) { scope.spinner.stop(); } }; scope.$watch(attr.usSpinner, function (options) { scope.stop(); scope.spinner = new SpinnerConstructor(options); if (!scope.key || scope.startActive) { scope.spinner.spin(element[0]); } }, true); scope.$on('us-spinner:spin', function (event, key) { if (key === scope.key) { scope.spin(); } }); scope.$on('us-spinner:stop', function (event, key) { if (key === scope.key) { scope.stop(); } }); scope.$on('$destroy', function () { scope.stop(); scope.spinner = null; }); } }; }]); } if (typeof define === 'function' && define.amd) { /* AMD module */ define(['angular', 'spin'], factory); } else { /* Browser global */ factory(root.angular); } }(window));