Feat: Game Rounds and Damage Log.

This commit is contained in:
2026-02-11 22:11:15 +00:00
parent 29ddd1ded0
commit 1cd9b7c976
20 changed files with 860 additions and 171 deletions

View File

@@ -21,8 +21,6 @@
"is_production": "{{ model.app.app_config.is_production | lower }}",
"is_development": "{{ model.app.app_config.is_development | lower }}",
};
var flagAccessLevel = "{{ model.FLAG_ACCESS_LEVEL }}";
var flagAccessLevelRequired = "{{ model.FLAG_ACCESS_LEVEL_REQUIRED }}";
var flagActive = "{{ model.FLAG_ACTIVE }}";
var flagActiveOnly = "{{ model.FLAG_ACTIVE_ONLY }}";
var flagAdd = "{{ model.FLAG_ADD }}";
@@ -75,7 +73,6 @@
var flagNameAttrOptionText = "{{ model.FLAG_NAME_ATTR_OPTION_TEXT}}";
var flagNameAttrOptionValue = "{{ model.FLAG_NAME_ATTR_OPTION_VALUE }}";
var flagNamePlural = "{{ model.FLAG_NAME_PLURAL }}";
var flagNavAdminHome = "{{ model.FLAG_NAV_ADMIN_HOME }}";
var flagNavMtgDecks = "{{ model.FLAG_NAV_MTG_DECKS }}";
var flagNavMtgGame = "{{ model.FLAG_NAV_MTG_GAME }}";
var flagNavMtgGames = "{{ model.FLAG_NAV_MTG_GAMES }}";
@@ -109,9 +106,6 @@
var hashGetALTCHAChallenge = "{{ model.HASH_GET_ALTCHA_CHALLENGE }}";
var hashPageAccessibilityReport = "{{ model.HASH_PAGE_ACCESSIBILITY_REPORT }}";
var hashPageAccessibilityStatement = "{{ model.HASH_PAGE_ACCESSIBILITY_STATEMENT }}";
var hashPageAdminHome = "{{ model.HASH_PAGE_ADMIN_HOME }}";
var hashPageContact = "{{ model.HASH_PAGE_CONTACT }}";
var hashPageContactSuccess = "{{ model.HASH_PAGE_CONTACT_SUCCESS }}";
var hashPageDataRetentionSchedule = "{{ model.HASH_PAGE_DATA_RETENTION_SCHEDULE }}";
var hashPageMtgDecks = "{{ model.HASH_PAGE_MTG_DECKS }}";
var hashPageMtgGame = "{{ model.HASH_PAGE_MTG_GAME }}";

View File

@@ -53,7 +53,22 @@
<!-- Game Section (shown when game is active) -->
<div class="{% if not model.players or model.players|length == 0 %}hidden{% endif %}" id="gameSection">
<div class="{{ model.FLAG_ROW }} {{ model.FLAG_CONTAINER }} {{ model.FLAG_ROUND }}">
<div class="{{ model.FLAG_ROW }} {{ model.FLAG_CONTAINER }} {{ model.FLAG_ROUND }}">
{#
<label class="{{ model.FLAG_ROUND }}">Round</label>
<input type="number" id="{{ model.ID_INPUT_ROUND }}" class="{{ model.FLAG_ROUND }}" />
#}
<span class="{{ model.FLAG_ROUND }} {{ model.FLAG_DISPLAY_ORDER }}">Round:</span>
<div class="{{ model.FLAG_ROUND }} {{ model.FLAG_DISPLAY_ORDER}}">
<button class="{{ model.FLAG_ROUND_DISPLAY_ORDER_BUTTON }} {{ model.FLAG_ROUND_DISPLAY_ORDER_MINUS }}">&minus;</button>
<span class="{{ model.FLAG_ROUND }} {{ model.FLAG_DISPLAY_ORDER }}"></span>
<button class="{{ model.FLAG_ROUND_DISPLAY_ORDER_BUTTON }} {{ model.FLAG_ROUND_DISPLAY_ORDER_PLUS }}">+</button>
</div>
</div>
</div>
<div class="players-grid" id="playersGrid">
{#
{% for player in model.players %}
{% set player_damage = [] %}
{% for damage in model.damage_records %}
@@ -108,9 +123,27 @@
</div>
</div>
{% endfor %}
#}
</div>
</div>
<div class="{{ model.FLAG_DAMAGE_LOG }} {{ model.FLAG_CONTAINER }}">
<h2 class="tcg-section-title">Damage Log</h2>
<table>
<thead>
<tr>
<th class="{{ model.ATTR_ROUND_ID }}">Round</th>
<th class="{{ model.ATTR_PLAYER_ID }}">Player</th>
<th class="{{ model.ATTR_RECEIVED_FROM_COMMANDER_PLAYER_ID }}">Received From Commander</th>
<th class="{{ model.FLAG_HEALTH_CHANGE }}">Health Change</th>
<th class="{{ model.FLAG_COMMANDER_DEATHS }}">Commander Deaths</th>
<th class="{{ model.FLAG_IS_ELIMINATED }}">Is Eliminated</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="save-indicator" id="saveIndicator">Game Saved</div>
<div id="{{ model.PLAYER_SETUP_WRAPPER_TEMPLATE_ID }}" class="player-name-input-wrapper {{ model.FLAG_IS_COLLAPSED }}">
@@ -147,9 +180,13 @@
var attrReceivedFromCommanderPlayerId = "{{ model.ATTR_RECEIVED_FROM_COMMANDER_PLAYER_ID }}";
var damageRecords = {{ model.convert_list_objects_to_json(model.damage_records) | tojson | safe }};
var decks = {{ model.convert_list_objects_to_json(model.decks) | tojson | safe }};
var flagDamageLog = "{{ model.FLAG_DAMAGE_LOG }}";
var flagDisplayOrder = "{{ model.FLAG_DISPLAY_ORDER }}";
var flagHealthChange = "{{ model.FLAG_HEALTH_CHANGE }}";
var flagIsEliminated = "{{ model.FLAG_IS_ELIMINATED }}";
var flagRoundDisplayOrderButton = "{{ model.FLAG_ROUND_DISPLAY_ORDER_BUTTON }}";
var flagRoundDisplayOrderMinus = "{{ model.FLAG_ROUND_DISPLAY_ORDER_MINUS }}";
var flagRoundDisplayOrderPlus = "{{ model.FLAG_ROUND_DISPLAY_ORDER_PLUS }}";
var flagPlayer = "{{ model.FLAG_PLAYER }}";
var game = {{ model.game.to_json() | tojson | safe }};
var gameId = {{ model.game.game_id }};
@@ -157,6 +194,7 @@
var hashSaveGameRound = "{{ model.HASH_SAVE_MTG_GAME_ROUND }}";
var hashSaveGameRoundPlayerDamage = "{{ model.HASH_SAVE_MTG_GAME_ROUND_PLAYER_DAMAGE }}";
var hashPageGames = "{{ model.HASH_PAGE_MTG_GAMES }}";
var idInputRound = "#{{ model.ID_INPUT_ROUND }}";
var players = {{ model.convert_list_objects_to_json(model.players) | tojson | safe }};
var playerSetupWrapperTemplateId = "{{ model.PLAYER_SETUP_WRAPPER_TEMPLATE_ID }}";
var rounds = {{ model.convert_list_objects_to_json(model.rounds) | tojson | safe }};

View File

@@ -18,7 +18,7 @@
</div>
<!-- Filters Form -->
<form id="{{ model.ID_FORM_FILTERS }}" class="filters-form">
<form id="{{ model.ID_FORM_FILTERS }}" class="{{ model.FLAG_FORM_FILTERS }} {{ model.FLAG_IS_COLLAPSED }}">
{{ model.form_filters.hidden_tag() }}
<div class="filters-row">
<div class="filter-group">