Eleven

Améliore l'interface de Kraland

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(У мене вже є менеджер скриптів, дайте мені встановити його!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==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
})();