|
|
class Modal {
|
|
|
// TODO : industrialiser en créant une classe
|
|
|
}
|
|
|
|
|
|
const modalDialog = document.getElementById('modal');
|
|
|
|
|
|
var modal_hooks = [];
|
|
|
|
|
|
function disableScrolling(){
|
|
|
/*
|
|
|
document.body.style.position = 'fixed';
|
|
|
document.body.style.top = `-${window.scrollY}px`;
|
|
|
*/
|
|
|
|
|
|
/*
|
|
|
var x=window.scrollX;
|
|
|
var y=window.scrollY;
|
|
|
window.onscroll=function(){window.scrollTo(x, y);};
|
|
|
*/
|
|
|
|
|
|
// Ne marche pas :
|
|
|
// supprime la scrollbar (déplacement du body vers la droite)
|
|
|
// document.body.style.overflow='hidden';
|
|
|
|
|
|
// Ne marche pas :
|
|
|
// la modal ne propage pas le scroll
|
|
|
// modalDialog.scroll = function(e) {e.stopPropagation();}
|
|
|
}
|
|
|
|
|
|
function enableScrolling(){
|
|
|
/*
|
|
|
const scrollY = document.body.style.top;
|
|
|
document.body.style.position = '';
|
|
|
document.body.style.top = '';
|
|
|
window.scrollTo(0, parseInt(scrollY || '0') * -1);
|
|
|
*/
|
|
|
|
|
|
// Ne marche pas :
|
|
|
// au retour, certains élements de la page ne sont plus clickables
|
|
|
//document.body.style.overflow='scroll';
|
|
|
|
|
|
// window.onscroll=function(){};
|
|
|
}
|
|
|
|
|
|
function showDialog(){
|
|
|
modalDialog.showModal();
|
|
|
disableScrolling()
|
|
|
}
|
|
|
|
|
|
function show_modal(data_modal) {
|
|
|
showDialog();
|
|
|
if (typeof open_modal_hook === 'function') open_modal_hook(data_modal);
|
|
|
};
|
|
|
|
|
|
function close_modal()
|
|
|
{
|
|
|
modalDialog.close();
|
|
|
enableScrolling();
|
|
|
}
|
|
|
|
|
|
function init_modal()
|
|
|
{
|
|
|
let testElements = document.getElementsByClassName('js-open-modal-trigger');
|
|
|
let testDivs = Array.prototype.filter.call(testElements, function(testElement){
|
|
|
return true;
|
|
|
});
|
|
|
|
|
|
testDivs.forEach(function(item){
|
|
|
item.onclick = function(ev) {
|
|
|
show_modal(this.getAttribute("data-modal-info"));
|
|
|
};
|
|
|
});
|
|
|
|
|
|
|
|
|
testElements = document.getElementsByClassName('js-close-modal-trigger');
|
|
|
testDivs = Array.prototype.filter.call(testElements, function(testElement){
|
|
|
return true;
|
|
|
});
|
|
|
|
|
|
testDivs.forEach(function(item){
|
|
|
item.onclick = function(ev) {
|
|
|
close_modal(this.getAttribute("data-modal-info"));
|
|
|
};
|
|
|
});
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function close_modal_hook()
|
|
|
{
|
|
|
console.log("close_modal_hook");
|
|
|
|
|
|
modalSetInnerHtml('modal_header', '');
|
|
|
modalSetInnerHtml('modal_body', '');
|
|
|
modalSetInnerHtml('modal_footer', '');
|
|
|
}
|
|
|
|
|
|
function modalSetInnerHtml(className, valeur)
|
|
|
{
|
|
|
var testElements = document.getElementsByClassName(className);
|
|
|
var testDivs = Array.prototype.filter.call(testElements, function(testElement){
|
|
|
return true;
|
|
|
});
|
|
|
testDivs.forEach(function(element){
|
|
|
element.scrollTop = 0;
|
|
|
element.innerHTML = valeur;
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function modalSetChildren(className, children)
|
|
|
{
|
|
|
var testElements = document.getElementsByClassName(className);
|
|
|
var testDivs = Array.prototype.filter.call(testElements, function(testElement){
|
|
|
return true;
|
|
|
});
|
|
|
modalSetInnerHtml(className, '');
|
|
|
testDivs.forEach(function(element){
|
|
|
element.scrollTop = 0;
|
|
|
element.appendChild(children);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function modalSetHeader(valeur)
|
|
|
{
|
|
|
modalSetInnerHtml('modal_header', valeur);
|
|
|
}
|
|
|
function modalSetBody(valeur)
|
|
|
{
|
|
|
modalSetInnerHtml('modal_body', valeur);
|
|
|
}
|
|
|
function modalSetFooter(valeur)
|
|
|
{
|
|
|
modalSetInnerHtml('modal_footer', valeur);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Format du paramètre : methode:p1=v1,p2=v2
|
|
|
*/
|
|
|
function open_modal_hook(parametre)
|
|
|
{
|
|
|
myLog("open_modal_hook pour "+parametre);
|
|
|
let hook = null;
|
|
|
let paramSplit = parametre.split(':');
|
|
|
paramSplit.forEach(element => {
|
|
|
let elemSplit=element.split('=');
|
|
|
if (elemSplit[0] === 'type') {
|
|
|
hook = modal_hooks[elemSplit[1]];
|
|
|
}
|
|
|
});
|
|
|
if ((hook===null)||(hook===undefined)) hook = modal_hooks['random'];
|
|
|
return hook(parametre);
|
|
|
}
|
|
|
|
|
|
init_modal();
|