MediaWiki:Common.js: Difference between revisions

From The Jadnix Codex

Created page with "Any JavaScript here will be loaded for all users on every page load.: ============================================================ R&R CRDD CALCULATOR LOGIC ============================================================: $(function() { // Only run if the calculator exists on the page if (!$('#crdd-interface').length) return; // The Logic Function function updateCRDD() { let log = []; // For debugging let totalScore = 0;..."
 
No edit summary
Line 1: Line 1:
/* Any JavaScript here will be loaded for all users on every page load. */
/* ============================================================
/* ============================================================
   R&R CRDD CALCULATOR LOGIC
   R&R CRDD CALCULATOR LOGIC (V2 - Fixed Display)
   ============================================================ */
   ============================================================ */
$(function() {
$(function() {
     // Only run if the calculator exists on the page
     // Only run if the calculator exists
     if (!$('#crdd-interface').length) return;
     if (!$('#crdd-interface').length) return;


     // The Logic Function
     // 1. UPDATE INDIVIDUAL NUMBERS INSTANTLY
    $('.crdd-range').on('input', function() {
        // Find the "0" next to this slider and update it
        $(this).next('.crdd-value-display').text($(this).val());
    });
 
    // 2. CALCULATE TOTALS
     function updateCRDD() {
     function updateCRDD() {
        let log = []; // For debugging
         let totalScore = 0;
         let totalScore = 0;
         let activeMaxScore = 0;
         let activeMaxScore = 0;
Line 16: Line 19:
          
          
         // --- SECTION 1: SUBJECT ---
         // --- SECTION 1: SUBJECT ---
        let subjScore = 0;
         let subjSkip = $('#skip-subject').is(':checked');
         let subjSkip = $('#skip-subject').is(':checked');
       
         if (!subjSkip) {
         if (!subjSkip) {
             let s1 = parseInt($('#s-strength').val());
             let s1 = parseInt($('#s-strength').val()) || 0;
             let s2 = parseInt($('#s-durability').val());
             let s2 = parseInt($('#s-durability').val()) || 0;
             let s3 = parseInt($('#s-mobility').val());
             let s3 = parseInt($('#s-mobility').val()) || 0;
             let s4 = parseInt($('#s-intel').val());
             let s4 = parseInt($('#s-intel').val()) || 0;
             let s5 = parseInt($('#s-stamina').val());
             let s5 = parseInt($('#s-stamina').val()) || 0;
             let s6 = parseInt($('#s-threat').val()); // Critical if > 24
             let s6 = parseInt($('#s-threat').val()) || 0;
             let s7 = parseInt($('#s-swarm').val());
             let s7 = parseInt($('#s-swarm').val()) || 0;
              
              
            // Critical Check
             if (s6 > 24) criticalOverride = true;
             if (s6 > 24) criticalOverride = true;
              
              
            // Average (Max 33)
             let avg = (s1+s2+s3+s4+s5+s6+s7) / 7;
             let avg = (s1+s2+s3+s4+s5+s6+s7) / 7;
            subjScore = avg;
           
            // Add to total
             totalScore += avg;
             totalScore += avg;
             activeMaxScore += 33;
             activeMaxScore += 33;
              
              
            // Local Result
             let rating = "DOCILE";
             let rating = "DOCILE";
             if (avg > 8) rating = "NEUTRAL";
             if (avg > 8) rating = "NEUTRAL";
Line 46: Line 41:
             $('#result-subject').text(avg.toFixed(1) + " (" + rating + ")");
             $('#result-subject').text(avg.toFixed(1) + " (" + rating + ")");
              
              
            // Check Total Subject Critical
             if (avg > 24) criticalOverride = true;
             if (avg > 24) criticalOverride = true;
         } else {
         } else {
Line 53: Line 47:


         // --- SECTION 2: ITEM ---
         // --- SECTION 2: ITEM ---
        let itemScore = 0;
         let itemSkip = $('#skip-item').is(':checked');
         let itemSkip = $('#skip-item').is(':checked');
       
         if (!itemSkip) {
         if (!itemSkip) {
             let i1 = parseInt($('#i-entropy').val());
             let i1 = parseInt($('#i-entropy').val()) || 0;
             let i2 = parseInt($('#i-instability').val());
             let i2 = parseInt($('#i-instability').val()) || 0;
             let i3 = parseInt($('#i-radiation').val());
             let i3 = parseInt($('#i-radiation').val()) || 0;
             let i4 = parseInt($('#i-corrupt').val());
             let i4 = parseInt($('#i-corrupt').val()) || 0;
             let i5 = parseInt($('#i-volatility').val());
             let i5 = parseInt($('#i-volatility').val()) || 0;
             let i6 = parseInt($('#i-unport').val());
             let i6 = parseInt($('#i-unport').val()) || 0;
             let i7 = parseInt($('#i-anomalous').val()); // Critical if > 24
             let i7 = parseInt($('#i-anomalous').val()) || 0;
             let i8 = parseInt($('#i-qty').val());
             let i8 = parseInt($('#i-qty').val()) || 0;


             if (i7 > 24) criticalOverride = true;
             if (i7 > 24) criticalOverride = true;


             let avg = (i1+i2+i3+i4+i5+i6+i7+i8) / 8;
             let avg = (i1+i2+i3+i4+i5+i6+i7+i8) / 8;
            itemScore = avg;
           
             totalScore += avg;
             totalScore += avg;
             activeMaxScore += 33;
             activeMaxScore += 33;
Line 84: Line 74:


         // --- SECTION 3: SEAM ---
         // --- SECTION 3: SEAM ---
        let seamScore = 0;
         let seamSkip = $('#skip-seam').is(':checked');
         let seamSkip = $('#skip-seam').is(':checked');
       
         if (!seamSkip) {
         if (!seamSkip) {
             let m1 = parseInt($('#m-instability').val());
             let m1 = parseInt($('#m-instability').val()) || 0;
             let m2 = parseInt($('#m-leakage').val());
             let m2 = parseInt($('#m-leakage').val()) || 0;
             let m3 = parseInt($('#m-geo').val()); // Critical
             let m3 = parseInt($('#m-geo').val()) || 0;
             let m4 = parseInt($('#m-atmo').val()); // Critical
             let m4 = parseInt($('#m-atmo').val()) || 0;
             let m5 = parseInt($('#m-topo').val());
             let m5 = parseInt($('#m-topo').val()) || 0;
             let m6 = parseInt($('#m-dead').val()); // Critical
             let m6 = parseInt($('#m-dead').val()) || 0;
             let m7 = parseInt($('#m-laws').val()); // Critical
             let m7 = parseInt($('#m-laws').val()) || 0;


             if (m3 > 24 || m4 > 24 || m6 > 24 || m7 > 24) criticalOverride = true;
             if (m3 > 24 || m4 > 24 || m6 > 24 || m7 > 24) criticalOverride = true;


             let avg = (m1+m2+m3+m4+m5+m6+m7) / 7;
             let avg = (m1+m2+m3+m4+m5+m6+m7) / 7;
            seamScore = avg;
           
             totalScore += avg;
             totalScore += avg;
             activeMaxScore += 33;
             activeMaxScore += 33;
Line 109: Line 95:
             if (avg > 24) rating = "NULL";
             if (avg > 24) rating = "NULL";
             $('#result-seam').text(avg.toFixed(1) + " (" + rating + ")");
             $('#result-seam').text(avg.toFixed(1) + " (" + rating + ")");
           
            // Check Total Seam Critical
             if (avg > 24) criticalOverride = true;
             if (avg > 24) criticalOverride = true;
         } else {
         } else {
Line 116: Line 100:
         }
         }


         // --- FINAL CALCULATION ---
         // --- FINAL RESULT ---
         let finalBox = $('#crdd-final-output');
         let finalBox = $('#crdd-final-output');
         let finalLabel = $('#crdd-final-label');
         let finalLabel = $('#crdd-final-label');
Line 128: Line 112:
         let percent = (totalScore / activeMaxScore) * 100;
         let percent = (totalScore / activeMaxScore) * 100;
          
          
        // Critical Override Check
         if (criticalOverride) {
         if (criticalOverride) {
             finalLabel.text("CRITICAL THREAT DETECTED");
             finalLabel.text("CRITICAL THREAT DETECTED");
             finalBox.text("NULL (LEAVE NOW)");
             finalBox.text("NULL (LEAVE NOW)");
             finalBox.css('color', '#000000'); // Black
             finalBox.css({
            finalBox.css('background', '#fff'); // White bg for contrast
                'color': '#000000',
            finalBox.css('text-shadow', '0 0 10px red');
                'background': '#fff',
                'text-shadow': '0 0 10px red'
            });
         } else {
         } else {
            // Normal Rating
             let finalRating = "ANCHORED";
             let finalRating = "ANCHORED";
             let finalColor = "#00ff9f"; // Green
             let finalColor = "#00ff9f";  
             let finalMsg = "YOU ARE SAFE";
             let finalMsg = "YOU ARE SAFE";


             if (percent > 25) {  
             if (percent > 25) { finalRating = "VOLATILE"; finalColor = "#ffd700"; finalMsg = "PROCEED WITH CAUTION"; }
                finalRating = "VOLATILE";  
             if (percent > 50) { finalRating = "FRACTURED"; finalColor = "#ff4500"; finalMsg = "YOU ARE IN DANGER"; }
                finalColor = "#ffd700"; // Gold
             if (percent > 75) { finalRating = "NULL"; finalColor = "#555"; finalMsg = "LEAVE NOW"; }
                finalMsg = "PROCEED WITH CAUTION";
            }
             if (percent > 50) {  
                finalRating = "FRACTURED";  
                finalColor = "#ff4500"; // OrangeRed
                finalMsg = "YOU ARE IN DANGER";
            }
             if (percent > 75) {  
                finalRating = "NULL";  
                finalColor = "#555"; // Grey/Black
                finalMsg = "LEAVE NOW";
            }


             finalLabel.text(finalMsg);
             finalLabel.text(finalMsg);
             finalBox.text(finalRating + " (" + percent.toFixed(1) + "%)");
             finalBox.text(finalRating + " (" + percent.toFixed(1) + "%)");
             finalBox.css('color', finalColor);
             finalBox.css({
            finalBox.css('background', 'transparent');
                'color': finalColor,
            finalBox.css('text-shadow', '0 0 10px ' + finalColor);
                'background': 'transparent',
                'text-shadow': '0 0 10px ' + finalColor
            });
         }
         }
     }
     }


     // Attach listener to all inputs
     // Trigger update on any change
     $('.crdd-range, input[type=checkbox]').on('input change', updateCRDD);
     $('.crdd-range, input[type=checkbox]').on('input change', updateCRDD);
});
});

Revision as of 13:34, 9 February 2026

/* ============================================================
   R&R CRDD CALCULATOR LOGIC (V2 - Fixed Display)
   ============================================================ */
$(function() {
    // Only run if the calculator exists
    if (!$('#crdd-interface').length) return;

    // 1. UPDATE INDIVIDUAL NUMBERS INSTANTLY
    $('.crdd-range').on('input', function() {
        // Find the "0" next to this slider and update it
        $(this).next('.crdd-value-display').text($(this).val());
    });

    // 2. CALCULATE TOTALS
    function updateCRDD() {
        let totalScore = 0;
        let activeMaxScore = 0;
        let criticalOverride = false;
        
        // --- SECTION 1: SUBJECT ---
        let subjSkip = $('#skip-subject').is(':checked');
        if (!subjSkip) {
            let s1 = parseInt($('#s-strength').val()) || 0;
            let s2 = parseInt($('#s-durability').val()) || 0;
            let s3 = parseInt($('#s-mobility').val()) || 0;
            let s4 = parseInt($('#s-intel').val()) || 0;
            let s5 = parseInt($('#s-stamina').val()) || 0;
            let s6 = parseInt($('#s-threat').val()) || 0;
            let s7 = parseInt($('#s-swarm').val()) || 0;
            
            if (s6 > 24) criticalOverride = true;
            
            let avg = (s1+s2+s3+s4+s5+s6+s7) / 7;
            totalScore += avg;
            activeMaxScore += 33;
            
            let rating = "DOCILE";
            if (avg > 8) rating = "NEUTRAL";
            if (avg > 16) rating = "HOSTILE";
            if (avg > 24) rating = "VILE";
            $('#result-subject').text(avg.toFixed(1) + " (" + rating + ")");
            
            if (avg > 24) criticalOverride = true;
        } else {
             $('#result-subject').text("SKIPPED");
        }

        // --- SECTION 2: ITEM ---
        let itemSkip = $('#skip-item').is(':checked');
        if (!itemSkip) {
            let i1 = parseInt($('#i-entropy').val()) || 0;
            let i2 = parseInt($('#i-instability').val()) || 0;
            let i3 = parseInt($('#i-radiation').val()) || 0;
            let i4 = parseInt($('#i-corrupt').val()) || 0;
            let i5 = parseInt($('#i-volatility').val()) || 0;
            let i6 = parseInt($('#i-unport').val()) || 0;
            let i7 = parseInt($('#i-anomalous').val()) || 0;
            let i8 = parseInt($('#i-qty').val()) || 0;

            if (i7 > 24) criticalOverride = true;

            let avg = (i1+i2+i3+i4+i5+i6+i7+i8) / 8;
            totalScore += avg;
            activeMaxScore += 33;
            
            let rating = "FUNCTIONAL";
            if (avg > 8) rating = "ALTERED";
            if (avg > 16) rating = "UNSTABLE";
            if (avg > 24) rating = "VOID";
            $('#result-item').text(avg.toFixed(1) + " (" + rating + ")");
        } else {
            $('#result-item').text("SKIPPED");
        }

        // --- SECTION 3: SEAM ---
        let seamSkip = $('#skip-seam').is(':checked');
        if (!seamSkip) {
            let m1 = parseInt($('#m-instability').val()) || 0;
            let m2 = parseInt($('#m-leakage').val()) || 0;
            let m3 = parseInt($('#m-geo').val()) || 0;
            let m4 = parseInt($('#m-atmo').val()) || 0;
            let m5 = parseInt($('#m-topo').val()) || 0;
            let m6 = parseInt($('#m-dead').val()) || 0;
            let m7 = parseInt($('#m-laws').val()) || 0;

            if (m3 > 24 || m4 > 24 || m6 > 24 || m7 > 24) criticalOverride = true;

            let avg = (m1+m2+m3+m4+m5+m6+m7) / 7;
            totalScore += avg;
            activeMaxScore += 33;
            
            let rating = "ANCHORED";
            if (avg > 8) rating = "VOLATILE";
            if (avg > 16) rating = "FRACTURED";
            if (avg > 24) rating = "NULL";
            $('#result-seam').text(avg.toFixed(1) + " (" + rating + ")");
            if (avg > 24) criticalOverride = true;
        } else {
            $('#result-seam').text("SKIPPED");
        }

        // --- FINAL RESULT ---
        let finalBox = $('#crdd-final-output');
        let finalLabel = $('#crdd-final-label');
        
        if (activeMaxScore === 0) {
            finalBox.text("ERROR: NO DATA");
            finalBox.css('color', 'red');
            return;
        }

        let percent = (totalScore / activeMaxScore) * 100;
        
        if (criticalOverride) {
            finalLabel.text("CRITICAL THREAT DETECTED");
            finalBox.text("NULL (LEAVE NOW)");
            finalBox.css({
                'color': '#000000',
                'background': '#fff',
                'text-shadow': '0 0 10px red'
            });
        } else {
            let finalRating = "ANCHORED";
            let finalColor = "#00ff9f"; 
            let finalMsg = "YOU ARE SAFE";

            if (percent > 25) { finalRating = "VOLATILE"; finalColor = "#ffd700"; finalMsg = "PROCEED WITH CAUTION"; }
            if (percent > 50) { finalRating = "FRACTURED"; finalColor = "#ff4500"; finalMsg = "YOU ARE IN DANGER"; }
            if (percent > 75) { finalRating = "NULL"; finalColor = "#555"; finalMsg = "LEAVE NOW"; }

            finalLabel.text(finalMsg);
            finalBox.text(finalRating + " (" + percent.toFixed(1) + "%)");
            finalBox.css({
                'color': finalColor,
                'background': 'transparent',
                'text-shadow': '0 0 10px ' + finalColor
            });
        }
    }

    // Trigger update on any change
    $('.crdd-range, input[type=checkbox]').on('input change', updateCRDD);
});