xf/ui/xf.ui.loader.js (60 lines of code) (raw):

define([ 'jquery', '../src/xf.core', '../src/xf.utils', '../ui/xf.ui.core' ], function($, XF) { /** Enhances loaders view */ XF.ui.loader = { // Selectors will be used to detect loader's element on the page selector : '[data-role=loader]', render : function (loader, options) { var jqLoader = $(loader), _self = this; if (!options) { options = {}; } if (!loader || !(jqLoader instanceof $) || jqLoader.attr('data-skip-enhance') == 'true') { return; } var id = jqLoader.attr('id') || XF.utils.uniqueID(), idStack = XF.ui.checkInIsset('loader'), newId = false; // Check if locader with the same ID was created before for (var i in idStack) { if (newId) { if (!$('#' + idStack[i]).length) { id = idStack[i]; newId = true; } } } // If 'no', add new ID to the stack if (!newId) { XF.ui.issetElements.push({type : 'loader', id : id}); } jqLoader.attr({'id': id, 'data-skip-enhance' : 'true'}); if (!$('#' + id).hasClass('xf-loader')) { $('#' + id).addClass('xf-loader'); } return jqLoader; }, // Show loader or create newone and show it show : function (jqLoader) { jqLoader = jqLoader || this.create(); jqLoader.show(); }, // Hide loader or hide all hide : function (jqLoader) { jqLoader = jqLoader || null; if (jqLoader === null) { $('.xf-loader').hide(); } else { jqLoader.hide(); } }, // Remove loader's dom-element remove : function (jqLoader) { jqLoader.detach(); XF.ui.removeFromIsset('popup', jqLoader.attr('id')); }, // Add new loader to the page create : function () { var jqLoader = $('<div class="xf-loader" data-role="loader"><div class="xf-loader-content"><div class="loading"></div></div></div>'); XF.device.getViewport().append(jqLoader); return this.render(jqLoader[0]); } }; });