MediaWiki:Common.js
From The Jadnix Codex
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* 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;
let activeMaxScore = 0;
let criticalOverride = false;
// --- SECTION 1: SUBJECT ---
let subjScore = 0;
let subjSkip = $('#skip-subject').is(':checked');
if (!subjSkip) {
let s1 = parseInt($('#s-strength').val());
let s2 = parseInt($('#s-durability').val());
let s3 = parseInt($('#s-mobility').val());
let s4 = parseInt($('#s-intel').val());
let s5 = parseInt($('#s-stamina').val());
let s6 = parseInt($('#s-threat').val()); // Critical if > 24
let s7 = parseInt($('#s-swarm').val());
// Critical Check
if (s6 > 24) criticalOverride = true;
// Average (Max 33)
let avg = (s1+s2+s3+s4+s5+s6+s7) / 7;
subjScore = avg;
// Add to total
totalScore += avg;
activeMaxScore += 33;
// Local Result
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 + ")");
// Check Total Subject Critical
if (avg > 24) criticalOverride = true;
} else {
$('#result-subject').text("SKIPPED");
}
// --- SECTION 2: ITEM ---
let itemScore = 0;
let itemSkip = $('#skip-item').is(':checked');
if (!itemSkip) {
let i1 = parseInt($('#i-entropy').val());
let i2 = parseInt($('#i-instability').val());
let i3 = parseInt($('#i-radiation').val());
let i4 = parseInt($('#i-corrupt').val());
let i5 = parseInt($('#i-volatility').val());
let i6 = parseInt($('#i-unport').val());
let i7 = parseInt($('#i-anomalous').val()); // Critical if > 24
let i8 = parseInt($('#i-qty').val());
if (i7 > 24) criticalOverride = true;
let avg = (i1+i2+i3+i4+i5+i6+i7+i8) / 8;
itemScore = avg;
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 seamScore = 0;
let seamSkip = $('#skip-seam').is(':checked');
if (!seamSkip) {
let m1 = parseInt($('#m-instability').val());
let m2 = parseInt($('#m-leakage').val());
let m3 = parseInt($('#m-geo').val()); // Critical
let m4 = parseInt($('#m-atmo').val()); // Critical
let m5 = parseInt($('#m-topo').val());
let m6 = parseInt($('#m-dead').val()); // Critical
let m7 = parseInt($('#m-laws').val()); // Critical
if (m3 > 24 || m4 > 24 || m6 > 24 || m7 > 24) criticalOverride = true;
let avg = (m1+m2+m3+m4+m5+m6+m7) / 7;
seamScore = avg;
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 + ")");
// Check Total Seam Critical
if (avg > 24) criticalOverride = true;
} else {
$('#result-seam').text("SKIPPED");
}
// --- FINAL CALCULATION ---
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;
// Critical Override Check
if (criticalOverride) {
finalLabel.text("CRITICAL THREAT DETECTED");
finalBox.text("NULL (LEAVE NOW)");
finalBox.css('color', '#000000'); // Black
finalBox.css('background', '#fff'); // White bg for contrast
finalBox.css('text-shadow', '0 0 10px red');
} else {
// Normal Rating
let finalRating = "ANCHORED";
let finalColor = "#00ff9f"; // Green
let finalMsg = "YOU ARE SAFE";
if (percent > 25) {
finalRating = "VOLATILE";
finalColor = "#ffd700"; // Gold
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);
finalBox.text(finalRating + " (" + percent.toFixed(1) + "%)");
finalBox.css('color', finalColor);
finalBox.css('background', 'transparent');
finalBox.css('text-shadow', '0 0 10px ' + finalColor);
}
}
// Attach listener to all inputs
$('.crdd-range, input[type=checkbox]').on('input change', updateCRDD);
});