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; }; });