/**
* @example Hinzufügen: $('#target').loadingOverlay();
* @example Entfernen: $('#target').loadingOverlay('remove');
*/
(function ($) {
'use strict';
$.fn.loadingOverlay = function (options) {
var target = this;
var action = 'show';
var defaults = {
overlayClass: 'loading-overlay',
dataAttribute: 'loading-overlay',
loadingImage: './themes/new/images/loading.gif',
backgroundColor: '#FFFFFF',
opacity: 0.75
};
// Es wurden keine Options übergeben
if (typeof options === 'undefined') {
options = {};
}
// Es wurde ein Befehl übergeben, z.B. 'remove'
if (typeof options === 'string') {
action = options;
options = {};
}
// Übergebene Optionen und Defaults zusammenführen
var settings = $.extend({}, defaults, options);
/**
* Overlay anzeigen
*/
if (action === 'show') {
// Icon vorladen
var $icon = $('').attr('src', settings.loadingImage);
var iconLoaded = false;
// Overlay anzeigen, wenn Icon fertig geladen
$icon.on('load', function () {
iconLoaded = true;
showOverlay(target, settings);
});
// Fallback falls Icon nicht gefunden wird oder zu lang zum Laden braucht
setTimeout(function() {
if(!iconLoaded) {
showOverlay(target, settings);
}
}, 250);
}
/**
* Overlay entfernen
*/
if (action === 'remove') {
removeOverlay(target, settings);
}
return this;
};
/**
* @param elem
* @param settings
*/
var showOverlay = function (elem, settings) {
var $target = $(elem);
// Element auf "position: relative" stellen, wenn statisch positioniert.
var targetPositioning = $target.css('position');
if (targetPositioning === 'static') {
$target.css('position', 'relative');
}
var overlayHtml =
'