59 lines
1.4 KiB
JavaScript
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;
|
|
};
|
|
});
|