|
|
|
@ -56,9 +56,9 @@ |
|
|
|
|
id="player-{{ player.order }}-ready" |
|
|
|
|
value="true" |
|
|
|
|
{% if player.ready %} checked{% endif %}/>Done with |
|
|
|
|
<span class="phase">{{ phase }} phase of turn #{{ turn }}</span> |
|
|
|
|
<span class="phase"><span class="status-phase">{{ status.phase }}</span> phase of turn #<span class="status-turn">{{ status.turn }}</span></span> |
|
|
|
|
</label> |
|
|
|
|
<div class="player-effects"> |
|
|
|
|
<div class="player-effects" id="player-{{ player.order }}-effects"> |
|
|
|
|
{% for effect_num, effect in player.fear.items %} |
|
|
|
|
<div class="effect effect-{{ effect_num }}"> |
|
|
|
|
Effect #{{ effect_num|add:1 }} |
|
|
|
@ -91,7 +91,7 @@ |
|
|
|
|
{% endfor %} |
|
|
|
|
</div> |
|
|
|
|
<input type="submit" name="update" class="update-button" value="Update fear"> |
|
|
|
|
<input type="submit" name="advance" class="advance-button" value="Advance to next phase"{% if not all_ready %} disabled{% endif %}> |
|
|
|
|
<input type="submit" name="advance" class="advance-button" value="Advance to next phase"{% if not status.all_ready %} disabled{% endif %}> |
|
|
|
|
<input type="submit" name="revert" class="revert-button" value="Revert to previous phase"> |
|
|
|
|
</form> |
|
|
|
|
{% block game_refresh %} |
|
|
|
@ -104,15 +104,92 @@ |
|
|
|
|
{% endblock %} |
|
|
|
|
{% block header_script %} |
|
|
|
|
{% if not results_only %} |
|
|
|
|
<template id="effect-template"> |
|
|
|
|
<div class="effect"> |
|
|
|
|
Effect #<span class="effect-num">?</span> |
|
|
|
|
|
|
|
|
|
<input type="hidden" class="fear-orig" value="0"> |
|
|
|
|
<select class="fear"> |
|
|
|
|
{% for val in range %} |
|
|
|
|
<option value="{{ val }}"{% if val == 0 %} selected="selected"{% endif %}>{{ val }} 😱</option> |
|
|
|
|
{% endfor %} |
|
|
|
|
</select> |
|
|
|
|
|
|
|
|
|
<input type="hidden" class="towns-orig" value="0"> |
|
|
|
|
<select class="towns"> |
|
|
|
|
{% for val in range %} |
|
|
|
|
<option value="{{ val }}"{% if val == 0 %} selected="selected"{% endif %}>{{ val }} 🏠</option> |
|
|
|
|
{% endfor %} |
|
|
|
|
</select> |
|
|
|
|
|
|
|
|
|
<input type="hidden" class="cities-orig" value="0"> |
|
|
|
|
<select class="cities"> |
|
|
|
|
{% for val in range %} |
|
|
|
|
<option value="{{ val }}"{% if val == 0 %} selected="selected"{% endif %}>{{ val }} 🏙️</option> |
|
|
|
|
{% endfor %} |
|
|
|
|
</select> |
|
|
|
|
</div> |
|
|
|
|
</template> |
|
|
|
|
<script> |
|
|
|
|
var statusObj = JSON.parse("{{ status_json|escapejs }}"); |
|
|
|
|
function ensureEffectRowExists(playerOrd, effectNum) { |
|
|
|
|
if(document.querySelector(".player-" + playerOrd + " .effect-" + effectNum)) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
if(effectNum > 0) { |
|
|
|
|
ensureEffectRowExists(playerOrd, effectNum-1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
let effDiv = document.getElementById("player-" + playerOrd + "-effects"); |
|
|
|
|
let effectTemplate = document.querySelector("#effect-template"); |
|
|
|
|
let clone = effectTemplate.content.cloneNode(true); |
|
|
|
|
clone.querySelector("div.effect").classList.add("effect-" + effectNum); |
|
|
|
|
clone.querySelector(".effect-num").innerText = effectNum + 1; |
|
|
|
|
let prefix = "player-" + playerOrd + "-effect-" + effectNum + "-"; |
|
|
|
|
["fear", "towns", "cities"].forEach(suffix => { |
|
|
|
|
clone.querySelector("." + suffix).name = prefix + suffix; |
|
|
|
|
clone.querySelector("." + suffix + "-orig").name = prefix + suffix + "-orig"; |
|
|
|
|
}); |
|
|
|
|
effDiv.appendChild(clone); |
|
|
|
|
} |
|
|
|
|
function addEmptyEffects(clearAll) { |
|
|
|
|
for(let effDiv of document.getElementsByClassName("player-effects")) { |
|
|
|
|
if(clearAll) { |
|
|
|
|
while(effDiv.lastElementChild) { |
|
|
|
|
effDiv.removeChild(effDiv.lastElementChild); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var newEffectNum = null; |
|
|
|
|
if(effDiv.childElementCount == 0) { |
|
|
|
|
newEffectNum = 0; |
|
|
|
|
} else { |
|
|
|
|
let lastEffectDiv = effDiv.children[effDiv.children.length-1]; |
|
|
|
|
var lastEffectNum = null; |
|
|
|
|
lastEffectDiv.classList.forEach(cls => { |
|
|
|
|
if(cls.startsWith("effect-")) { |
|
|
|
|
lastEffectNum = parseInt(cls.substring(7)); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
lastEffectDiv.querySelectorAll("select").forEach(child => { |
|
|
|
|
if(child.value != "0") { |
|
|
|
|
newEffectNum = lastEffectNum + 1; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
if(newEffectNum != null) { |
|
|
|
|
let playerOrd = effDiv.id.split("-")[1]; |
|
|
|
|
ensureEffectRowExists(playerOrd, newEffectNum); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
function handleNewStatus(oldStatus, newStatus) { |
|
|
|
|
{% block game_handle_new_status %} |
|
|
|
|
if(oldStatus.hash == newStatus.hash) return true; |
|
|
|
|
if(oldStatus.phase_id != newStatus.phase_id |
|
|
|
|
|| oldStatus.turn != newStatus.turn) { |
|
|
|
|
// Reload for new phase. |
|
|
|
|
return false; |
|
|
|
|
addEmptyEffects(true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
let form = document.forms[0]; |
|
|
|
@ -125,7 +202,6 @@ |
|
|
|
|
el.disabled = !all_ready; |
|
|
|
|
} |
|
|
|
|
} else if(key == "players") { |
|
|
|
|
// TODO |
|
|
|
|
let players = newStatus[key]; |
|
|
|
|
for(let ord in players) { |
|
|
|
|
let prefix = "player-" + ord + "-"; |
|
|
|
@ -146,6 +222,7 @@ |
|
|
|
|
} else if(pkey == "fear") { |
|
|
|
|
let fear = player[pkey]; |
|
|
|
|
for(let effect_num in fear) { |
|
|
|
|
ensureEffectRowExists(ord, effect_num); |
|
|
|
|
let fprefix = prefix + "effect-" + effect_num + "-"; |
|
|
|
|
let effect = fear[effect_num]; |
|
|
|
|
for(let ekey in effect) { |
|
|
|
@ -162,6 +239,7 @@ |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
addEmptyEffects(false); |
|
|
|
|
} else { |
|
|
|
|
var matching_elements = document.getElementsByClassName("status-" |
|
|
|
|
+ key); |
|
|
|
|