Eleven

Améliore l'interface de Kraland

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Eleven
// @license      GPL-3.0-or-later
// @description  Améliore l'interface de Kraland
// @author       Somin
// @namespace    somin
// @version      beta.0.40
// @match        http://www.kraland.org/*
// @match        http://kraland.org/*
// @match        http://test.kraland.org/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=kraland.org
// @grant        none
// ==/UserScript==
/*
* =========================================================================
* Copyright (C) 2026 Somin
* =========================================================================

This program is free software:
you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation,
either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program.
If not, see <https://www.gnu.org/licenses/>.

* =========================================================================
* Ce programme est un logiciel libre ;
* =========================================================================

vous pouvez le redistribuer ou le modifier suivant les termes de la GNU General Public License telle que publiée par la Free Software Foundation ;
soit la version 3 de la licence, soit (à votre gré) toute version ultérieure.

Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ;
sans même la garantie tacite de QUALITÉ MARCHANDE ou d'ADÉQUATION à UN BUT PARTICULIER.
Consultez la GNU General Public License pour plus de détails.

Vous devez avoir reçu une copie de la GNU General Public License en même temps que ce programme ;
si ce n'est pas le cas, consultez <http://www.gnu.org/licenses>.

La licence GPL est là uniquement pour garantir que ce projet restera toujours libre et gratuit pour toute la communauté de Kraland.

* =========================================================================
* --- DISCLAIMER ---
* =========================================================================

Ce script est une extension indépendante développée par Somin.
Il n'est en aucun cas affilié, approuvé ou lié à redstar et l'administration officielle de kraland.org.
L'utilisation de ce script se fait sous votre propre responsabilité.

------------------ */
(function() {
    'use strict';

    //+------------ Options par défaut --------------+
    var tailleDesAvatarsForum = 110;
    var tailleDesAvatarsJeu = 50;
    var tailleDesAvatarsPopup= 110;
    //Taille en pixels (défaut: 110 forum ; 50 jeu)

    var hauteurImgRapportPrivé = 30;
    //var largeurImgRapportPrivé = 80;
    var hauteurImgForum = 90;
    var hauteurImgEvenement = 80;
    var largeurImgEvenement = 50;
    // Taille % de la fenêtre

    var hauteurImgSignatures = 110;
    // taille en pixels (défaut: 110)

    const EpinglerLesMenus = false;
    // true pour épingler les menus de Kraland

    var PoliceDeCaracteres = "" ;
    // mettez la police de votre choix entre les guillemets. (Par défaut : "")

    var Goupil=false;
    // true pour désactiver les smileys Poule, false sinon

    var maxCache=5;
    // nombre de posts en cours de rédaction sauvegardé

    var forumStyle=true;
    var largeurForum=60;
    // en %
    var paddingForum=80;
    // en %

    var largeurTopic=82;
    // en %, 100 = largeur pleine page
    // 85 par défaut

    var drapeauForum=1;
    // 0 = texte, 1 = drapeau, (2 = drapeau+texte)

    var fonctionIcon=0;
    // 0 = texte, 1 = icône, 2 = texte+icône
    var pnjIcon=false;
    // false = pas d'icône, true = icône

    //--- Paramètres de gestion du rapport d'évènements
    var actionsParPage=100;
    var filtreEmpire="Tous les empires + provinces et villes";
    var filtreAction=1;
    var imagesIncluses=true;

    var quotebar = true;
    // enlève le guillemet de la citation

    var slimfooter = 1;
    // -1 = suppression, 0 = désactivé, 1 = slim,

    var minichat = false;
    // affichage du minichat

    //--- Rapport privé
    var couleurNouveaux='red';
    // couleur des nouveaux évènements

    //+------------ Paramétrages du Script --------------+

    //--- Variables Globales
    var aparam={
        pinup: EpinglerLesMenus,
        avaFora: tailleDesAvatarsForum,
        avaIg: tailleDesAvatarsJeu,
        avaOrder: tailleDesAvatarsPopup,
        //imgRPw: largeurImgRapportPrivé,
        imgRPh: hauteurImgRapportPrivé,
        imgFora: hauteurImgForum,
        imgREw: largeurImgEvenement,
        imgREh: hauteurImgEvenement,
        imgSig: hauteurImgSignatures,
        fontFam: PoliceDeCaracteres,
        colorL: -1,
        tCache: maxCache,
        goupil: Goupil,
        erlite: true,
        avaItem: 32,
        evNb: actionsParPage,
        evEmpire: filtreEmpire,
        evAction: filtreAction,
        evImg: imagesIncluses,
        qb : quotebar,
        foot : slimfooter,
        mc : minichat,
        fstyle : forumStyle,
        fwidth : largeurForum,
        twidth : largeurTopic,
        pforum : paddingForum,
        fempire : drapeauForum,
        fpnj : pnjIcon,
        ffonction : fonctionIcon,
        prc: couleurNouveaux,
    }

    var savedTxtData=[];

    //--- Initialisation
    var kipath = window.location.pathname;
    const navBrand=document.querySelector('nav a.navbar-brand');
    if(navBrand){
        switch(navBrand.getAttribute('href')){
            case 'accueil' :
                main();
                break;
            case 'map/cybermonde' :
                cybermap();
                break;
            case 'help':
                //help();
                break;
            default:
                console.log('not yet');
                return;
        }
    }else{
       // check rapport privé
        if(kipath.startsWith('/report')){
            console.log('rp');
            rp();
        }
    }

    function main(){
        mainki();
        const navbar=document.getElementById('navbar');
        if(navbar){
            const kmLink = navbar.querySelector('a[href="kramail"]');
            kmBoxLoader(kmLink);
            const kili=navbar.querySelector('li.dropdown.active');
            if(kili){
                const lia=kili.querySelector('a').textContent.trim().split(/\s+/)[0];
                switch(lia){
                    case 'Jouer' :
                        play();
                        break;
                    case 'Forum' :
                        forum();
                        break;
                    case 'Monde' :
                        monde();
                        break;
                    default:
                        return;
                }
            }else{
                const titleLeft = document.querySelector('#col-left .list-group-item');
                titleLeft.style.padding='5px';
                if(titleLeft){
                    let nameLeft=titleLeft.textContent.trim();
                    switch(nameLeft){
                        case 'Nouvelles' :
                            motd();
                            break;
                        case 'Kramail' :
                            km();
                            break;
                        case 'Paramètres' :
                            elevenSetup();
                            break;
                        default:
                            console.log('err not main 2');
                            return;
                    }
                }
            }
        }else{
            console.log('err not main 1');
            return;
        }
    }

    function mainki(){
        //--- minichat
        let mc=document.getElementById('flap_closed');
        if(mc && !aparam.mc){mc.remove();}

        //---
        let almsg=document.querySelectorAll('div.alert');
        almsg.forEach(a=>{a.style.padding='5px';});

        //--- page centrale
        var contentki=document.getElementById('content');
        contentki.style.width='auto';
        var rowki=contentki.querySelector('.row');
        rowki.style.marginLeft='0';
        rowki.style.marginRight='0';

        //--- gestion pub et top
        var topKi=document.getElementById('top');
        topKi.style.height='auto';
        /*
        var noad=document.createElement('button');
        if(sessionStorage.noad){removetop();}else{
            noad.type='button';
            noad.value='';
            if(true){
                // si pub détectée
                noad.innerHTML='Masquer le bandeau';
            }else{
                noad.innerHTML='Pensez à désactivez votre bloqueur de pub !';
            }
            noad.addEventListener('click',removetop);
            topKi.style.display = 'float';
            topKi.style.alignItems = 'right';

            topKi.appendChild(noad);
        }*/
        //removetop();
        function removetop(){
            topKi.remove();
            //topKi.style.display="none";
            sessionStorage.noad=true;
        }

        var botKi=document.querySelector('footer');
        botKi.style.minHeight='auto';
        switch(slimfooter){
            case -1:
                botKi.remove();
                break;
            case 0:
                return;
                break;
            case 1:
                botKi.querySelector('.footer-quote').remove();
                break;
            default:
                botKi.querySelector('.footer-quote').remove();
                return;
        }
    }

    function play(){
        pinup();
        var cLeft=document.getElementById('col-left');
        let cLeftBody=cLeft.querySelector('div.panel-body');
        cLeftBody.style.padding='5px';

        var cRight=document.getElementById('col-right');
        var containerf=cRight.querySelector('.container-fluid');
        containerf.style.padding='0px';
        containerf.style.margin='0px';
        var mBottomSize='5px'; // taille de marge inférieure entre les panels

        //--- wip gestion des alertes
        // class : alert alert-success alert-dismissible

        //--- détection de la page
        let path = window.location.pathname;
        navseven();
        switch(true) {
            case path.startsWith('/jouer/plateau'):
                mainp();
                break;
            case path.startsWith('/jouer/materiel'):
                matp();
                break;
            case path.startsWith('/jouer/perso'):
                persop();
                break;
            case path.startsWith('/jouer/bat'):
                batp();
                break;
            case path.startsWith('/jouer/pnj'):
                pnjp();
                break;
            default:
                console.log('test56');
        }

        function navseven(){
            const nav=document.getElementById('navbar');
            //--- close sub
            document.querySelector('nav').style.pointerEvents = 'none';
            setTimeout(()=>{document.querySelector('nav').style.pointerEvents = 'auto';},50);

            //--- nouvelle barre de navigation
            var pLinks=nav.querySelector('ul.dropdown-menu').querySelectorAll('a');
            let nrowc=document.createElement('div');
            nrowc.classList.add('row', 'center');
            for(let i=0;i<pLinks.length;i++){
                let nLink = pLinks[i].cloneNode(true);
                nLink.classList.add('btn', 'btn-default', 'mini'); //btn-primary
                //nLink.style.padding='5px';
                //nLink.style.margin='2px';
                nrowc.appendChild(nLink);
            }
            var rowc=containerf.querySelector('div.row.center map');
            nrowc.style.width='50%';
            nrowc.style.marginBottom='10px';
            if(rowc){
                nrowc.style.width='50%';
                nrowc.style.float='left';
                rowc.parentElement.style.verticalAlign='middle';
                rowc.parentElement.insertBefore(nrowc,rowc);
            }else if(path.startsWith('/jouer/perso')){
                document.getElementById('home').insertBefore(nrowc,containerf);
            }else {
                cRight.insertBefore(nrowc,containerf);
            }
        }

        function mainp(){
            console.log('test55');
            //--- pj side
            let pjSide=cRight.querySelector('.dashboard');
            pjStyle(pjSide);

            /*
        function avatar(pp){
            pp.style.width = aparam.avaIg + 'px';
            pp.style.height = aparam.avaIg + 'px';
            pp.style.overflow = 'hidden';
            pp.style.display = 'inline-block';

            const img = pp.querySelector('img');
            if(img){
                img.style.width = '100%';
                img.style.height = '100%';
                img.style.objectFit = 'cover';
                img.style.display = 'block';
            }
        }
        */

            // bâtiment
            let bSide=cRight.querySelectorAll('.dashboard')[1];
            boxStyle(bSide);

            // popup
/*
            const observer = new MutationObserver((mutations, obs) => {
                const modal = document.querySelector('.bootbox.modal');
                if (!modal) return;

                const textarea = modal.querySelector('textarea[name="message"]');
                const checkbox = modal.querySelector('input[type="checkbox"][name="f[0]"]');

                if (textarea) textarea.value = 'Auto message';
                if (checkbox) checkbox.checked = true;

                if (textarea && checkbox) obs.disconnect();
            });
            observer.observe(document.body, { childList: true, subtree: true });
*/
            /*
            const modalObserver = new MutationObserver((mutations, obs) => {
    const modal = document.querySelector('.bootbox.modal');
    if (!modal) return;

    const textarea = modal.querySelector('textarea[name="message"]');
    if (textarea) textarea.value = 'Auto message';

    const checkbox = modal.querySelector('input[type="checkbox"][name="f[0]"]');
    if (checkbox) checkbox.checked = true;

    const select = modal.querySelector('select[name="n[1]"]');
    if (select) select.value = "6";

    if (textarea && checkbox && select) {
        obs.disconnect();
    }
});
modalObserver.observe(document.body, { childList: true, subtree: true });

            */
        }

        function matp(){
            let invSide=cRight.querySelector('.dashboard');
            boxStyle(invSide);
            let matSide=cRight.querySelectorAll('.dashboard')[1];
            boxStyle(matSide);
            let wpanel=matSide.querySelector("div.well");
            wpanel.style.padding='5px';
        }

        function pnjp(){
            let oneSide=cRight.querySelector('.dashboard');
            //pjStyle(oneSide);
            boxStyle(oneSide);
            let sndSide=cRight.querySelectorAll('.dashboard')[1];
            //pjStyle(sndSide);
            boxStyle(sndSide);
            let orange=oneSide.querySelector('div.alert.alert-warning');
            orange.style.marginBottom='0px';
            orange.style.padding='5px';
        }
        function batp(){
            let invSide=cRight.querySelector('.dashboard');
            boxStyle(invSide);
            let matSide=cRight.querySelectorAll('.dashboard')[1];
            boxStyle(matSide);
        }
        function persop(){
            let panels=containerf.querySelectorAll('.panel-default');
            for(let i=0;i<panels.length;i++){
                panels[i].style.marginBottom=mBottomSize;
                let panelHeading=panels[i].querySelector('.panel-heading');
                panelHeading.style.padding='5px';
                let panelBody=panels[i].querySelector('.panel-body');
                panelBody.style.padding='5px';
                let boxType=panels[i].querySelector('h3').lastChild.textContent.trim();
                switch(boxType){
                    case 'Citoyenneté':
                        tdStyle(panels[i]);
                        break;
                    case 'Maladies':
                        break;
                    case 'Finance':
                        nop(panels[i]);
                        break;
                    case'Organisations':
                        tdStyle(panels[i]);
                        break;
                    case'Avis de Recherche':
                        tdStyle(panels[i]);
                        break;
                    default:
                        console.log('not found persop boxType : '+boxType);
                }
            }
            function nop(panel){
                let panelp=panel.querySelectorAll('p');
                for(let i=0;i<panelp.length;i++){
                    panelp[i].style.margin='0 0 0 0';
                }
            }

            function tdStyle(panel){
                let alltd=panel.querySelectorAll('td');
                for(let i=0;i<alltd.length;i++){
                    alltd[i].style.padding='0px';
                }

            }
        }

        function pjStyle(dashboard){
            let panelDefault=dashboard.querySelectorAll('.panel-default');
            for(let i=0;i<panelDefault.length;i++){
                panelDefault[i].style.marginBottom=mBottomSize;
                let panelHeading=panelDefault[i].querySelector('.panel-heading');
                panelHeading.style.padding='5px';
                let panelBody=panelDefault[i].querySelector('.panel-body');
                panelBody.style.paddingTop='0px';
                panelBody.style.paddingBottom='0px';
                panelBody.style.paddingLeft='0px';
                let istd=panelBody.querySelector('td');
                var pLink;
                if(istd){
                    pLink=istd.querySelectorAll('a');
                    panelBody.style.paddingRight='2px';
                }else{
                    pLink=panelBody.querySelectorAll('a');
                    panelBody.style.paddingRight='0px';
                }
                for(let j=0;j<pLink.length;j++){
                    if(!istd){
                        let span = pLink[j].querySelector('span');
                        span.style.display = 'inline-block';
                        span.style.paddingRight = '3px';
                    }
                    pLink[j].style.clear = 'both';
                    let aColor=getComputedStyle(pLink[j]).borderBottomColor;
                    pLink[j].style.border='none';
                    pLink[j].style.padding='0px';
                    //pLink[j].style.display = 'block';
                    pLink[j].style.overflow = 'hidden';
                    pLink[j].style.textDecoration = 'none';
                    if(j>0 && pLink.length>0){
                        pLink[j].style.borderTop = '2px solid';
                        pLink[j].style.borderTopColor = aColor;
                    }
                    let ava=pLink[j].querySelector('img.pull-left');
                    ava.style.margin='5px';
                    ava.style.width=aparam.avaIg+'px';
                    ava.style.height=aparam.avaIg+'px';
                }
            }
        }

        function boxStyle(dashboard){
            let bpanels=dashboard.querySelectorAll('.panel.panel-default:not(.well)');
            for(let i=0;i<bpanels.length;i++){
                bpanels[i].style.marginBottom=mBottomSize;
                let boxType=bpanels[i].querySelector('h3').lastChild.textContent.trim();
                if(boxType!=='Bâtiment'){pbStyle(bpanels[i]);}
                switch(true){
                    case boxType.startsWith("Bâtiments Privés"):
                        cStyle(bpanels[i]);
                        break;
                    case boxType.startsWith("Bâtiments Publics"):
                        cStyle(bpanels[i]);
                        break;
                    case boxType.startsWith("Bâtiment") :
                        bStyle(bpanels[i]);
                        break;
                    case boxType.startsWith("Commerce"):
                        cStyle(bpanels[i]);
                        break;
                    case boxType.startsWith("Matériel"):
                        mStyle(bpanels[i]);
                        break;
                    case boxType.startsWith("Installation"):
                        iStyle(bpanels[i]);
                        break;
                    case boxType.startsWith("Argent"):
                        vStyle();
                        break;
                    case boxType.startsWith("Employés de fonction"):
                        cStyle(bpanels[i]);
                        //npcStyle(bpanels[i]);
                        break;
                    case boxType.startsWith("Employés"):
                        npcStyle(bpanels[i]);
                        cStyle(bpanels[i]);
                        break;
                    case boxType.startsWith("Esclaves"):
                        cStyle(bpanels[i]);
                        //npcStyle(bpanels[i]);
                        break;
                    default :
                        console.log('boxType unknown : '+boxType);
                }
            }

            function cStyle(cbox){

            }

            function mStyle(mbox){

            }
            function iStyle(ibox){

            }

            //--- box batiment
            function bStyle(bbox){
                let panelHeading=bbox.querySelector('.panel-heading');
                panelHeading.style.padding='5px';
                let pbody=bbox.querySelector('.panel-body');
                pbody.style.paddingBottom='5px';
                pbody.style.paddingTop='5px';
                let abox=bbox.querySelector('a');
                let abcolor=getComputedStyle(abox).borderColor;
                abox.style.border='none';
                abox.style.padding='0px';
                abox.style.width='33%';
                abox.style.float='left';

                let pdbr=bbox.querySelector('.panel-body .row');
                pdbr.querySelector('div').style.width='20%';
                pdbr.querySelector('div').style.minWidth='125px';
                let pdb=pdbr.querySelector('.progress');
                pdb.style.marginBottom='0px';
                //pdb.parentElement.style.paddingRight='0px';
                pdb.parentElement.style.width='40%';

                let descrp=pbody.lastElementChild;
                descrp.style.marginTop='5px';
                descrp.style.borderTop='2px solid '+abcolor;
                descrp.style.paddingTop='2px';
            }

            //--- page inventaire
            function vStyle(){
            }

            //--- pnj
            function npcStyle(nbox){
                let minispan=nbox.querySelectorAll('span.mini');
                minispan.forEach(msp=>{msp.querySelector('br').remove()});
            }
        }

        function pbStyle(panel){
            let panelTitle=panel.querySelector('.panel-heading');
            panelTitle.style.padding='5px';

            let pbody=panel.querySelector('.panel-body');
            pbody.style.padding='0px';
            let items=pbody.querySelectorAll('a');
            for(let i=0;i<items.length;i++){
                items[i].style.padding='5px';
                items[i].style.borderBottom='none';
                items[i].style.borderLeft='none';
                items[i].style.borderRight='none';
                }
            let titleh=pbody.querySelectorAll('div.list-group-item');
            for(let i=0;i<titleh.length;i++){
                titleh[i].style.padding='5px';
                titleh[i].style.borderBottom='none';
                titleh[i].style.borderLeft='none';
                titleh[i].style.borderRight='none';
                //titleh[i].querySelector('h4').style.fontWeight='bold';
            }
        }

        function gbox(panel){

        }
    }

    function motd(){
        let wpanels=document.querySelectorAll('#myCarousel .item');
        for(let i=0;i<wpanels.length;i++){
            wpanels[i].querySelector('img').style.margin='0px auto';
        }
    }

    function forum(){
        var cRight=document.getElementById('col-right');
        var cLeft=document.getElementById('col-left');
        var content=document.getElementById('content');
        var row=content.querySelector('.row');
        if(kipath.startsWith('/forum/sujet')||kipath.startsWith('/kramail/post')){
            topicSetUp();
        }else if(!kipath.startsWith('/forum/post')&&!kipath.startsWith('/kramail')){
            //getForums();
            forumSetUp();
        }

        async function topicSetUp(){
            pinup();
            leftSetup(cLeft);
            cLeft.style.width = '15%';

            // avatar & cartouche
            var userinfo=document.querySelectorAll('div.user-info');
            for(let i=0;i<userinfo.length;i++){
                let ava=userinfo[i].querySelector('.avatar');
                if(ava){
                    ava.classList.remove('img-thumbnail');
                    ava.removeAttribute('width');
                    ava.style.display='inline';
                    ava.style.width=aparam.avaFora+'px';
                    ava.style.maxWidth='100%';
                    ava.style.maxHeight=(2*aparam.avaFora)+'px';
                    ava.style.marginBottom='5px';
                }

                //---
                let cart=userinfo[i].querySelector('.cartouche');

                const logoEmpDiv = cart.querySelector('div:has(img[src*="/world/"])');
                const nomLien = cart.querySelector('strong');
                const boutonPNJ = cart.querySelector('button.xmini');
                const rangImgDiv = cart.querySelector('div:has(img[src*="/rank/"])');

                if(nomLien){
                    nomLien.style.display = 'inline-block';
                }
                if(boutonPNJ){
                    if(aparam.fpnj){
                        let divpnj=boutonPNJ.parentNode;
                        divpnj.parentNode.style.display = 'inline-block';
                        divpnj.parentNode.style.marginLeft = '5px';
                        cart.appendChild(divpnj);
                    }else{
                        boutonPNJ.remove();
                    }
                }
                if(logoEmpDiv){
                    logoEmpDiv.style.marginTop = '5px';
                    cart.appendChild(logoEmpDiv);
                    let logoEmp=logoEmpDiv.querySelector('img');
                    switch(aparam.fempire){
                        case 0:
                            logoEmp.src='';
                            logoEmp.alt=logoEmp.title;
                            break;
                        case 1 :
                            logoEmp.style.width='auto';
                            logoEmp.style.height='auto';
                            break;
                        case 2 :
                            break;
                        default :
                            logoEmp.style.width='auto';
                            logoEmp.style.height='auto';
                    }
                }
                if(rangImgDiv){
                    cart.appendChild(rangImgDiv);
                    let rangImg=rangImgDiv.querySelector('img');
                    if(!aparam.ffonction){
                        rangImg.src='';
                        rangImg.alt=rangImg.title;
                        rangImg.style.fontWeight='bold';
                    }else{
                        rangImg.style.width='auto';
                        rangImg.style.height='auto';
                    }
                }
            }

            //--- post
            removeQ();
            ezSpoiler();
            //--- taille max img
            const fmsg=document.querySelectorAll('div.forum-msg');
            for(let i=0;i<fmsg.length;i++){
                fmsg[i].querySelectorAll('img').forEach(fimg=>{
                    fimg.style.maxHeight=aparam.imgFora+'vh';
                });

                const divs = fmsg[i].querySelectorAll(':scope > div');
                if(divs.length){
                    const sigimg = divs[divs.length - 1].querySelectorAll('img');
                    sigimg.forEach(simg=>{
                        simg.style.maxHeight=aparam.imgSig+'px';
                    })
                }
            }

            //--- insertion formulaire réponse
            var pscript=document.createElement('script');
            pscript.src='http://www.kraland.org/lib/kraland-7.0.0/js/post.js';
            document.body.appendChild(pscript);
            var replyb=cRight.querySelectorAll('a[title="répondre"]');
            for(let i=0;i<replyb.length;i++){
                applyDRF(replyb[i]);
            }
            var quoteb=cRight.querySelectorAll('a[title="citer"]');
            for(let i=0;i<quoteb.length;i++){
                applyDRF(quoteb[i]);
            }
            function applyDRF(onebtn){
                let replyu=onebtn.href;
                onebtn.addEventListener('click', (e)=>{
                    e.preventDefault();
                    displayReplyForm(replyu);
                });
            }
            async function displayReplyForm(urlr){
                try{
                    var tdoc= await loadPage(urlr);
                    const form = tdoc.querySelector('#col-right form');
                    if(!form){
                        console.log('No form found in ',urlr);
                        return;
                    }
                    form.querySelectorAll('div.form-group').forEach(rform=>{
                        rform.querySelector('label').remove();
                        rform.querySelector('div').style.width='100%';
                    });
                    cRight.querySelector('ul.media-list.forum').after(form);
                    const prevw=tdoc.getElementById('accordion2');
                    if(prevw){
                        let nhr=document.createElement('br');
                        nhr.style.marginTop='5px';
                        nhr.style.marginBottom='5px';
                        form.after(prevw);
                        form.after(nhr);
                    }
                    const textarea = form.querySelector('textarea');
                    if(textarea){
                        textarea.scrollIntoView({
                            behavior: 'smooth',
                            block: 'start'
                        });
                        textarea.focus();
                    }
                }catch(err){
                    console.log('tdoc failed : '+err);
                }
            }

            //--- naviguer avec les flèches
            try{
                let currentp=document.getElementById('col-right').querySelector('ul.pagination li.active');
                //arrowsHead(currentp);
            }catch(err){
                console.log(err);
            }

        }

        function forumSetUp(){
            const observer = new MutationObserver(() => {
                const self = document.querySelector('select[name="topics_length"]');
                if(!self) return;
                if(self.value !== '100') {
                    self.value = '100';
                    self.dispatchEvent(new Event('change', { bubbles: true }));
                }

                observer.disconnect(); // on arrête une fois fait
            });
            observer.observe(document.body, {
                childList: true,
                subtree: true
            });

            let fbtn=cRight.querySelector('h1 a');
            if(!fbtn){
                cRight.querySelector('h1').remove();
                getForums();
            }
            if(cLeft && true){
                cLeft.remove();
            }else{
                //pinup();
                leftSetup(cLeft);
                row.style.marginLeft="10%";
                row.style.marginRight="5%";
                cLeft.style.width = '15%';
                cLeft.style.paddingRight='5px';
                cLeft.style.paddingLeft='5px';
            }

            if(cRight && true){
                cRight.style.width=aparam.fwidth+'%';
                if(aparam.fwidth==100){
                    cRight.style.paddingLeft='5%';
                    cRight.style.paddingRight='5%';
                }else{
                    cRight.style.width=aparam.fwidth+'%';
                    let fw=parseFloat(aparam.fwidth);
                    let lmargin=(100-fw)/2;
                    cRight.style.marginLeft=lmargin+"%";
                    cRight.style.paddingLeft='0%';
                    cRight.style.paddingRight='0%';
                }
                let allurl=document.querySelectorAll('a');
                allurl.forEach(u=>{u.style.textDecoration='none';})
            }
        }
    }

    function monde(){
        //--- naviguer avec les flèches
        let titleLeft = document.querySelector('#col-left .list-group-item');
                titleLeft.style.padding='5px';
                if(titleLeft){
                    let nameLeft=titleLeft.textContent.trim();
                    switch(nameLeft){
                        case 'Événements' :
                            evr();
                            break;
                        default:
                            console.log('err not main 2');
                            return;
                    }
                }
    }

    //--- rapport d'évènement
    function evr(){
        const cRight=document.getElementById('col-right');
        // arrowsHead();
        // pLoader();

        const eimg=cRight.querySelectorAll('table.table-striped img.img-responsive');
        for(let i=0;i<eimg.length;i++){
            eimg[i].style.maxHeight=aparam.imgREh+'vh';
            eimg[i].style.maxWidth=aparam.imgREw+'vw';
            //eimg[i].style.maxWidth='80%';
        }
        pinup();
        ezSpoiler();
    }

    function km(){
        if(!kipath.startsWith('/kramail/post')){
            const observer = new MutationObserver(() => {
                const self = document.querySelector('select[name="topics_length"]');
                if(!self) return;
                if(self.value !== '100') {
                    self.value = '100';
                    self.dispatchEvent(new Event('change', { bubbles: true }));
                }

                observer.disconnect(); // on arrête une fois fait
            });
            observer.observe(document.body, {
                childList: true,
                subtree: true
            });
        }
        forum();
    }

    //--- chargement intelligent de boîte kramail
    function kmBoxLoader(kmLink){
        kmLink.addEventListener("click", e=>{
            e.preventDefault();
            loadkm();
        });

        async function loadkm(){
            const doc = await loadPage(kmLink.href);
            let plateauWithMail = null;
            let plateauEmpty = null;
            let membreWithMail = null;

            doc.querySelectorAll(".list-group").forEach(group => {
                let current = null;

                group.childNodes.forEach(node => {
                    if(node.nodeType!==1) return;

                    if(node.classList.contains("list-group-subtitle")) {
                        current=node.textContent.trim();
                        return;
                    }

                    if (node.tagName==="A"){
                        const badge=node.querySelector(".badge");
                        const hasMail=badge && parseInt(badge.textContent) > 0;

                        if(current==="Plateau") {
                            if(hasMail && !plateauWithMail){plateauWithMail = node.href;}
                            if(!plateauEmpty){plateauEmpty=node.href;}
                        }

                    if(current==="Compte Membre" && hasMail && !membreWithMail) {
                        membreWithMail=node.href;
                    }
                    }
                });
            });

            const target = plateauWithMail || plateauEmpty || membreWithMail;
            if(target){location.replace(target);}
                        console.log('testkm');
        }
    }

    //+------------ Carte du cybermonde --------------+
    function cybermap(){
        let mapCont=document.querySelector('#mapname-container');


        /*mapCont.style.textAlign='center';
        mapCont.parentNode.style.removeProperty('left');
        mapCont.parentNode.query

        mapCont.parentNode.parentNode.style.width='100%';
        mapCont.parentNode.parentNode.style.textAlign='center';
        mapCont.parentNode.parentNode.style.display='flex';
        mapCont.parentNode.parentNode.style.alignItems='center';
        mapCont.parentNode.parentNode.style.justifyContent='center';
        */

    }

    //+------------ Rapport privé --------------+
    function rp(){
        const newEv=document.querySelectorAll('.bg-info');
        for(let i=0;i<newEv.length;i++){
            newEv[i].style.backgroundColor=getComputedStyle(document.body).backgroundColor;
            newEv[i].style.borderLeft = `3px solid ${aparam.prc}`;
            /*if(i===newEv.length-1){
                newEv[i].style.borderBottom = '2px solid red';
                // bordure horizontale, discord style
            }*/
        }

        const irp=document.querySelector('table.table.table-condensed').querySelectorAll('img.img-responsive');
        for(let i=0;i<irp.length;i++){
            irp[i].style.maxHeight=aparam.imgRPh+'vh';
            //irp[i].style.maxWidth=aparam.imgRPw+'vw';
        }
        ezSpoiler();
        removeQ();
    }

    //+------------ Epingler les menus ---------------+
    function pinup(){
        var cLeft=document.getElementById('col-left');
        cLeft.style.padding='5px';
        let cLeftTitle=cLeft.querySelector('span.list-group-item.active');
        cLeftTitle.style.padding='5px';

        var cRight=document.getElementById('col-right');
        var content=document.getElementById('content');
        content.style.width='100%';
        var row=content.querySelector('.row');
        if(!aparam.pinup){
            row.style.display = 'flex';
            row.style.flexDirection = 'row';
            row.style.width = '100%';

            cLeft.style.flex = '0 0 auto';
            cLeft.style.width = 'fit-content';
            //cLeft.style.minWidth = 'fit-content';
            //cLeft.style.maxWidth = '17%';

            let hr=cLeft.querySelector('hr')
            if(hr){
                    hr.style.marginTop='3px';
                    hr.style.marginBottom='3px';
            }
            cRight.style.width = 'auto';
            cRight.style.display = 'flex';
            cRight.style.flex = '1 1 0';
            cRight.style.flexDirection = 'column';
        }else{
            const navbar = document.querySelector('nav');
            const footer = document.querySelector('footer');
            const parent = document.getElementById('content');
            document.getElementById('top-link').remove();

            const navbarHeight = navbar.offsetHeight;
            const footerHeight = footer.offsetHeight;

            parent.style.height = `calc(100vh - ${navbarHeight + footerHeight}px)`;
            parent.style.display = 'flex';
            parent.style.flexDirection = 'row';
            parent.style.overflow = 'hidden';

            // cLeft
            cLeft.style.width = 'fit-content';
            cLeft.style.overflow = 'hidden';

            // cRight
            cRight.style.display = 'flex';
            cRight.style.flexDirection = 'column';
            cRight.style.flex = '1 1 0';
            cRight.style.minWidth = '0';
            cRight.style.height = '100%';
            cRight.style.overflowY = 'auto';
        }
    }

    //------------ GUI pour Eleven --------------
    function elevenSetup(){
        var cRight=document.getElementById('col-right');
        var cLeft=document.getElementById('col-left');
        var listg=cLeft.querySelector('div.list-group');

        let aSetup=document.createElement('a');
        aSetup.classList.add('list-group-item');
        let aSpan=document.createElement('span');
        aSpan.classList.add('lefticon');
        let iel=document.createElement('i');
        iel.classList.add('fa','fa-cog');
        //iel.textContent='::before';
        let textc=document.createTextNode('Eleven script');
        aSpan.appendChild(iel);
        aSetup.appendChild(aSpan);
        aSetup.appendChild(textc);
        listg.appendChild(aSetup);

        aSetup.addEventListener('click',elevenUI);

        function elevenUI() {
            /*    var tailleDesAvatarsForum = 110;
    var tailleDesAvatarsJeu = 50;
    var tailleDesAvatarsPopup= 110;
    //Taille en pixels (défaut: 110 forum ; 50 jeu)

    var hauteurImgRapportPrivé = 30;
    //var largeurImgRapportPrivé = 80;
    var hauteurImgForum = 90;
    var hauteurImgEvenement = 80;
    var largeurImgEvenement = 50;
    // Taille % de la fenêtre

    var hauteurImgSignatures = 110;
    // taille en pixels (défaut: 110)
    */
            cRight.innerHTML=`
        <h1 class="page-header">Configuration du script Eleven</h1>
<h2>Forum</h2>
<p>Taille des avatars&nbsp;: <input class="localSave" type="text" name="avf" style="text-align:right;" placeholder="${tailleDesAvatarsForum}"> pixels (défaut : ${tailleDesAvatarsForum})</p>

<fieldset>
  <legend style="font-weight:300;font-size:15px;margin-bottom:5px;">Affichage de la fonction&nbsp;:</legend>
  <div style="float:left; margin-right:5px;">
    <input class="localSave" type="radio" id="fname" name="fname" value="0"/>
    <label for="fname">Nom</label>
  </div>
  <div style="float:left; margin-right:5px;">
    <input class="localSave" type="radio" id="iconame" name="fname" value="2" />
    <label for="iconam">Nom et icône</label>
  </div>
  <div style="float:left; margin-right:5px;">
    <input class="localSave" type="radio" id="ficon" name="fname" value="1" />
    <label for="ficon">Icône</label>
  </div>
</fieldset>
<br>
<fieldset>
  <legend style="font-weight:300;font-size:15px;margin-bottom:5px;">Affichage de la nationalité&nbsp;:</legend>
  <div style="float:left; margin-right:5px;">
    <input class="localSave" type="radio" id="fname" name="fname" value="0"/>
    <label for="fname">Nom</label>
  </div>
  <div style="float:left; margin-right:5px;">
    <input class="localSave" type="radio" id="iconame" name="fname" value="2" />
    <label for="iconam">Nom et icône</label>
  </div>
  <div style="float:left; margin-right:5px;">
    <input class="localSave" type="radio" id="ficon" name="fname" value="1" />
    <label for="ficon">Icône</label>
  </div>
</fieldset>
<br>
  <p><input id="npc" class="localSave" type="checkbox"> Icône PNJ</p>

<p>Hauteur des images&nbsp;: <input class="localSave" type="text" name="avf" style="text-align:right;" placeholder="${hauteurImgForum}"> % d'écran (défaut&nbsp;: ${hauteurImgForum})</p>

<h2>Jeu</h2>
<p>Taille des avatars&nbsp;: <input class="localSave" type="text" name="avj" style="text-align:right;" placeholder="${tailleDesAvatarsJeu}"> pixels (défaut&nbsp;: ${tailleDesAvatarsJeu})</p>
        `;
        }
        console.log('setup test');
    }

    //--- préconfig rapport d'event
    function eventLoader(){
        var link4=document.querySelector('#navbar a[href="monde/evenements"]');
        if(link4){link4.addEventListener('click',loadSelectedEvents);}
        function loadSelectedEvents(event){
            event.preventDefault();

            if(!sessionStorage.getItem('evToken')){
                sessionStorage.setItem('evToken','true');}
            else{
                window.location.href="http://www.kraland.org/main.php?p=4_4";
                return;
            }

            let evFrame=document.createElement('iframe');
            evFrame.id='evFrame';
            evFrame.name='evFrame';
            evFrame.style.display='none';
            evFrame.src="http://www.kraland.org/main.php?p=4_4";
            document.body.appendChild(evFrame);

            document.querySelector('#evFrame').addEventListener("load", function(){
                var evForm=document.querySelector('#evFrame').contentDocument.querySelector('#central-text').querySelector('form');
                evForm.target="_top";
                evForm.querySelector('textarea[name="p7"]').value=aparam.evEmpire;
                evForm.querySelector('select[name="p3"]').value=aparam.evAction;
                evForm.querySelector('select[name="p1"]').value=aparam.evNb;
                evForm.querySelector('input[name="p2"]').checked=aparam.evImg;
                evForm.querySelector('input[name="p4"]').checked=aparam.evRs;
                evForm.submit();
            });
        }
    }

    //------------ flèches pour navigation --------------
    function arrowsHead(){
    }

    //---GET forums
    async function getForums(){
        var ulf=document.querySelector('nav a[href="forum"]').parentElement.querySelector('ul');
        var fLinks=ulf.querySelectorAll('a');
        var mfdiv=document.getElementById('col-right');
        console.log(mfdiv);
        for(let i=0;i<fLinks.length-1;i++){
            let urlf=fLinks[i].href;
            if(fLinks[i].pathname===kipath){continue;}
            try{
                var fpage = await loadPage(urlf);
                var fdiv=fpage.getElementById('col-right').querySelector('div').cloneNode(true);
                mfdiv.appendChild(fdiv);
            }catch(err){
                console.error(err);
                continue;
            }
        }
    }

    //---GET request
    async function loadPage(theURL) {
        const response = await fetch(theURL, { credentials: 'same-origin' });
        if (!response.ok) {
            throw new Error('HTTP error ' + response.status);
        }
        const html = await response.text();
        const parser = new DOMParser();
        const htmlDoc = parser.parseFromString(html, 'text/html');
        //console.log(response.url, response.status);
        return htmlDoc;
    }

    //+------------ Retrait de l'image quote --------------+
    function removeQ(){
        var bquote=document.getElementById('col-right').querySelectorAll('blockquote');
        if(bquote.length>0){
            for(let i=0;i<bquote.length;i++){
                bquote[i].querySelector('i').remove();
            }
        }
    }
    //+------------ Ergonomie des Spoiler --------------+
    function ezSpoiler(){
        var allspoiler=document.querySelectorAll(".pre-spoiler");
        for(let i=0;i<allspoiler.length;i++){
            allspoiler[i].addEventListener("click",displayB,false);
        }
    }
    function displayB(){
        this.parentNode.querySelector(".spoiler").style.display="";
        this.removeEventListener("click", displayB);
        this.addEventListener("click",displayN,false);
    }
    function displayN(){
        this.parentNode.querySelector(".spoiler").style.display="none";
        this.removeEventListener("click",displayN);
        this.addEventListener("click",displayB,false);
    }

    //+------------ design bloc menu gauche --------------+
    function leftSetup(cLeft){
        let cLeftTitle=cLeft.querySelector('span.list-group-item.active');
        cLeftTitle.style.padding='5px';
        let furl=cLeft.querySelectorAll('a');
        for(let i=0;i<furl.length;i++){
            furl[i].style.padding='5px';
        }
    }
    //--- fin du code
})();