/**
* MS1 — Loader coureur (overlay + inline).
* Usage : Ms1Loader.show() / Ms1Loader.hide() / Ms1Loader.inlineHtml(message)
* Norme MS1 : tout message d'attente AJAX/panel doit utiliser Ms1Loader.inlineHtml().
*/
(function (global, $) {
'use strict';
var config = {
src: '/images/ms1-runner-loader.gif',
labelWait: 'Chargement...'
};
function escHtml(str) {
return String(str == null ? '' : str)
.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"');
}
function runnerImg() {
return '
';
}
function init(options) {
if (options) {
$.extend(config, options);
}
}
function inlineHtml(message) {
var msg = message == null || message === '' ? config.labelWait : message;
return '
'
+ runnerImg()
+ '' + escHtml(msg) + ''
+ '
';
}
function show(message) {
var $preloader = $('#preloader');
if (!$preloader.length) {
return;
}
clearProgress();
if (message != null && message !== '') {
var $text = $('#preloader_text');
if ($text.length) {
$text.html(message);
}
}
$preloader.show();
}
function clearProgress() {
$('#spinner .ms1-loader__progress').remove();
}
/**
* MSIN-4433 — Overlay avec coureur + barre de progression (% réel).
* @param {number} current
* @param {number} total
* @param {string} [message]
*/
function showProgress(current, total, message) {
var $preloader = $('#preloader');
if (!$preloader.length) {
return;
}
var intCurrent = Math.max(0, parseInt(current, 10) || 0);
var intTotal = Math.max(1, parseInt(total, 10) || 1);
var intPct = Math.min(100, Math.round((intCurrent / intTotal) * 100));
var $spinner = $('#spinner');
var $bar = $spinner.find('.ms1-loader__progress');
if (!$bar.length) {
$bar = $('');
$('#preloader_text').after($bar);
}
$bar.attr('aria-valuenow', intPct);
$bar.find('.ms1-loader__progress-fill').css('width', intPct + '%');
$bar.find('.ms1-loader__progress-pct').text(intPct + '%');
if (message != null && message !== '') {
var $text = $('#preloader_text');
if ($text.length) {
$text.html(message);
}
}
$preloader.show();
}
function hide() {
clearProgress();
$('#preloader').fadeOut('slow');
}
global.Ms1Loader = {
init: init,
inlineHtml: inlineHtml,
show: show,
showProgress: showProgress,
hide: hide
};
}(window, jQuery));