Aller au contenu

« MediaWiki:Common.js » : différence entre les versions

aucun résumé des modifications
Aucun résumé des modifications
Balise : Révocation manuelle
Aucun résumé des modifications
Balise : Révoqué
Ligne 75 : Ligne 75 :
     window.addEventListener( 'load', initDoubleScroll );
     window.addEventListener( 'load', initDoubleScroll );
   }
   }
}() );
/* ============================================
  CALCULATEUR DE RÉSOLUTION — Nephilim 5e
  À ajouter dans MediaWiki:Common.js
  ============================================ */
( function () {
    'use strict';
    // Ne s'active que si le calculateur est présent sur la page
    var calc = document.querySelector( '.neph-calc' );
    if ( !calc ) {
        return;
    }
    // Raccourci pour trouver les éléments par data-neph ou data-neph-out
    function input( name ) {
        return calc.querySelector( '[data-neph="' + name + '"]' );
    }
    function output( name ) {
        return calc.querySelector( '[data-neph-out="' + name + '"]' );
    }
    function val( name ) {
        var el = input( name );
        return el ? ( parseInt( el.value, 10 ) || 0 ) : 0;
    }
    // Recalcule les scores à chaque changement de select
    function compute() {
        var vecu = val( 'vecu' );
        var approche = val( 'approche' );
        var metamorphe = val( 'metamorphe' );
        var bonus = val( 'bonus' );
        var malus = val( 'malus' );
        var brut = vecu + approche + metamorphe;
        var net = Math.max( 0, brut + bonus - malus );
        var seuil = Math.min( net * 10, 100 );
        output( 'scoreBrut' ).textContent = brut;
        output( 'scoreNet' ).textContent = net;
        output( 'seuil' ).textContent = seuil + '%';
        // Masquer le résultat précédent
        var panel = output( 'resultPanel' );
        panel.className = 'neph-calc-result';
        output( 'resetWrap' ).className = 'neph-calc-reset-wrap';
        output( 'marginBar' ).style.display = 'none';
        output( 'marginFill' ).style.width = '0';
    }
    // Résout l'action
    function resolve() {
        var net = Math.max( 0, val( 'vecu' ) + val( 'approche' ) + val( 'metamorphe' ) + val( 'bonus' ) - val( 'malus' ) );
        var seuil = Math.min( net * 10, 100 );
        var jetEl = input( 'jet' );
        var jetInput = jetEl.value.trim();
        if ( jetInput === '' ) {
            jetEl.focus();
            return;
        }
        var jetVal = parseInt( jetInput, 10 );
        var isMaladresse = ( jetInput === '00' || jetInput === '000' || jetVal === 0 || jetVal === 100 );
        if ( isMaladresse ) {
            jetVal = 100;
        }
        var panel = output( 'resultPanel' );
        var verdict = output( 'resultVerdict' );
        var detail = output( 'resultDetail' );
        var marginText = output( 'resultMargin' );
        var marginBar = output( 'marginBar' );
        var marginFill = output( 'marginFill' );
        var resetWrap = output( 'resetWrap' );
        // Reset classes
        panel.className = 'neph-calc-result neph-visible';
        marginBar.style.display = 'none';
        marginFill.style.width = '0';
        if ( isMaladresse ) {
            panel.className += ' neph-maladresse';
            verdict.textContent = '\u2620 Maladresse !';
            detail.textContent = 'Échec critique \u2014 le sort s\'acharne sur le Nephilim.';
            marginText.textContent = '';
        } else if ( jetVal <= seuil ) {
            // Réussite
            var dizaines = Math.floor( jetVal / 10 );
            var bonusMarge = Math.max( 0, net - 10 );
            var marge = dizaines + bonusMarge;
            panel.className += ' neph-success';
            verdict.textContent = '\u2726 Réussite';
            detail.textContent = 'Jet de ' + jetVal + ' \u2264 seuil de ' + seuil + '%';
            var margeLabel = '';
            if ( marge <= 1 ) { margeLabel = 'Réussite de justesse'; }
            else if ( marge <= 3 ) { margeLabel = 'Réussite convenable'; }
            else if ( marge <= 5 ) { margeLabel = 'Belle réussite'; }
            else if ( marge <= 7 ) { margeLabel = 'Réussite remarquable'; }
            else if ( marge <= 9 ) { margeLabel = 'Réussite mémorable'; }
            else { margeLabel = 'Réussite extraordinaire'; }
            var margeText = 'Marge de réussite : ' + marge;
            if ( bonusMarge > 0 ) {
                margeText += ' (' + dizaines + ' + ' + bonusMarge + ' bonus)';
            }
            margeText += ' \u2014 ' + margeLabel;
            marginText.textContent = margeText;
            marginBar.style.display = 'block';
            var pct = Math.min( 100, Math.round( ( marge / 15 ) * 100 ) );
            setTimeout( function () {
                marginFill.style.width = pct + '%';
            }, 50 );
        } else {
            // Échec
            panel.className += ' neph-failure';
            verdict.textContent = '\u2715 Échec';
            detail.textContent = 'Jet de ' + jetVal + ' > seuil de ' + seuil + '%';
            marginText.textContent = '';
        }
        resetWrap.className = 'neph-calc-reset-wrap neph-visible';
    }
    // Réinitialise tout
    function resetAll() {
        [ 'vecu', 'approche', 'metamorphe', 'bonus', 'malus' ].forEach( function ( name ) {
            var el = input( name );
            if ( el ) { el.value = '0'; }
        } );
        var jetEl = input( 'jet' );
        if ( jetEl ) { jetEl.value = ''; }
        compute();
    }
    // Attacher les événements aux selects
    var selects = calc.querySelectorAll( '.neph-calc-select' );
    for ( var i = 0; i < selects.length; i++ ) {
        selects[ i ].addEventListener( 'change', compute );
    }
    // Bouton Résoudre
    var btnResolve = calc.querySelector( '[data-neph-action="resolve"]' );
    if ( btnResolve ) {
        btnResolve.addEventListener( 'click', resolve );
    }
    // Bouton Réinitialiser
    var btnReset = calc.querySelector( '[data-neph-action="reset"]' );
    if ( btnReset ) {
        btnReset.addEventListener( 'click', resetAll );
    }
    // Entrée dans le champ dé → résoudre
    var jetEl = input( 'jet' );
    if ( jetEl ) {
        jetEl.addEventListener( 'keydown', function ( e ) {
            if ( e.key === 'Enter' ) {
                resolve();
            }
        } );
    }


}() );
}() );