You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

154 lines
3.7 KiB

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