compass-web/v2.5/target/bower_components/angular-spinner/angular-spinner.js

120 lines
2.6 KiB
JavaScript

/**
* angular-spinner version 0.6.2
* License: MIT.
* Copyright (C) 2013, 2014, 2015, Uri Shaked and contributors.
*/
(function (root) {
'use strict';
function factory(angular, Spinner) {
return angular
.module('angularSpinner', [])
.provider('usSpinnerConfig', function () {
var _config = {};
return {
setDefaults: function (config) {
_config = config || _config;
},
$get: function () {
return {
config: _config
};
}
};
})
.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', 'usSpinnerConfig', function ($window, usSpinnerConfig) {
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) ?
scope.$eval(attr.spinnerStartActive) : scope.key ?
false : true;
function stopSpinner() {
if (scope.spinner) {
scope.spinner.stop();
}
}
scope.spin = function () {
if (scope.spinner) {
scope.spinner.spin(element[0]);
}
};
scope.stop = function () {
scope.startActive = false;
stopSpinner();
};
scope.$watch(attr.usSpinner, function (options) {
stopSpinner();
options = options || {};
for (var property in usSpinnerConfig.config) {
if (options[property] === undefined) {
options[property] = usSpinnerConfig.config[property];
}
}
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));