Lidarr/UI/jQuery/jquery.spin.js

59 lines
1.4 KiB
JavaScript

define(
[
'jquery'
], function ($) {
'use strict';
$.fn.spinForPromise = function (promise) {
var self = this;
if (!promise || promise.state() !== 'pending') {
return this;
}
promise.always(function () {
self.stopSpin();
});
return this.startSpin();
};
$.fn.startSpin = function () {
var icon = this.find('i').andSelf('i');
var iconClasses = icon.attr('class').match(/(?:^|\s)icon\-.+?(?:$|\s)/);
if (iconClasses.length === 0) {
return this;
}
var iconClass = $.trim(iconClasses[0]);
this.addClass('disabled');
if (icon.hasClass('icon-can-spin')) {
icon.addClass('icon-spin');
}
else {
icon.attr('data-idle-icon', iconClass);
icon.removeClass(iconClass);
icon.addClass('icon-nd-spinner');
}
return this;
};
$.fn.stopSpin = function () {
var icon = this.find('i').andSelf('i');
this.removeClass('disabled');
icon.removeClass('icon-spin icon-nd-spinner');
var idleIcon = icon.attr('data-idle-icon');
if (idleIcon) {
icon.addClass(idleIcon);
}
return this;
};
});