diff --git a/controllers/tcg/mtg_game.py b/controllers/tcg/mtg_game.py index 2c1be12..7ab0ff7 100644 --- a/controllers/tcg/mtg_game.py +++ b/controllers/tcg/mtg_game.py @@ -92,8 +92,8 @@ def save_game(): form_filters = Filters_MTG_Game.from_json(data.get(Model_View_MTG_Base.FLAG_FORM_FILTERS, {})) if not form_filters.validate_on_submit(): return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}' }) form_filters = Filters_MTG_Game.get_default() """ @@ -106,8 +106,8 @@ def save_game(): games = data.get(Model_View_MTG_Base.FLAG_GAME, []) if len(games) == 0: return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: 'No games to save.' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: 'No games to save.' }) Helper_App.console_log(f"Games to save: {games}") @@ -118,20 +118,18 @@ def save_game(): if len(errors) > 0: return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: f'Error saving games.\n{Model_View_MTG_Game.convert_list_objects_to_json(errors)}' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: f'Error saving games.\n{Model_View_MTG_Game.convert_list_objects_to_json(errors)}' }) - """ return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_SUCCESS, - Model_View_MTG_Base.FLAG_DATA: Model_View_MTG_Base.convert_list_objects_to_json(model_return.games) + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_SUCCESS + , Model_View_MTG_Base.ATTR_GAME_ID: game_id }) - """ - return redirect(url_for('routes_mtg_game.game_detail', game_id = game_id)) + # return redirect(url_for('routes_mtg_game.game_detail', game_id = game_id)) except Exception as e: return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: f'Bad data received by controller.\n{e}' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: f'Bad data received by controller.\n{e}' }) @@ -155,13 +153,12 @@ def get_game_players(game_id): Helper_App.console_log(f'{_m}: game_id={game_id}') try: datastore = DataStore_MTG() - datastore_user = DataStore_User() user_session = datastore.get_user_session() if not user_session.get_is_logged_in(): return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: 'User not logged in' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: 'User not logged in' }), 401 # Get players for this game @@ -172,21 +169,21 @@ def get_game_players(game_id): if len(errors) > 0: return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: f'Error fetching players: {errors}' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: f'Error fetching players: {errors}' }), 500 players_json = [p.to_json() for p in players] return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_SUCCESS, - Model_View_MTG_Base.FLAG_DATA: players_json + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_SUCCESS + , Model_View_MTG_Base.FLAG_DATA: players_json }) except Exception as e: Helper_App.console_log(f'{_m} Error: {str(e)}') return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: f'Error: {str(e)}' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: f'Error: {str(e)}' }), 500 @@ -201,8 +198,8 @@ def get_many_game_round(game_id): if not user_session.get_is_logged_in(): return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: 'User not logged in' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: 'User not logged in' }), 401 # Get rounds for this game @@ -213,21 +210,21 @@ def get_many_game_round(game_id): if len(errors) > 0: return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: f'Error fetching rounds: {errors}' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: f'Error fetching rounds: {errors}' }), 500 rounds_json = [r.to_json() for r in rounds] return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_SUCCESS, - Model_View_MTG_Base.FLAG_DATA: rounds_json + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_SUCCESS + , Model_View_MTG_Base.FLAG_DATA: rounds_json }) except Exception as e: Helper_App.console_log(f'{_m} Error: {str(e)}') return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: f'Error: {str(e)}' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: f'Error: {str(e)}' }), 500 @@ -242,8 +239,8 @@ def get_many_game_player_damage(game_id): if not user_session.get_is_logged_in(): return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: 'User not logged in' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: 'User not logged in' }), 401 parameters_damage = Parameters_MTG_Game_Round_Player_Damage.get_default(user_session.user_id) @@ -253,21 +250,21 @@ def get_many_game_player_damage(game_id): if len(errors) > 0: return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: f'Error fetching damage records: {errors}' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: f'Error fetching damage records: {errors}' }), 500 damage_records = [d.to_json() for d in damages] return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_SUCCESS, - Model_View_MTG_Base.FLAG_DATA: damage_records + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_SUCCESS + , Model_View_MTG_Base.FLAG_DATA: damage_records }) except Exception as e: Helper_App.console_log(f'{_m} Error: {str(e)}') return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: f'Error: {str(e)}' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: f'Error: {str(e)}' }), 500 @@ -295,8 +292,8 @@ def save_game_player(): players = data.get(Model_View_MTG_Base.FLAG_PLAYER, []) if len(players) == 0: return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: 'No players to save.' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: 'No players to save.' }) objs_player = [] @@ -308,18 +305,18 @@ def save_game_player(): if len(errors) > 0: return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: f'Error saving players.\n{Model_View_MTG_Game.convert_list_objects_to_json(errors)}' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: f'Error saving players.\n{Model_View_MTG_Game.convert_list_objects_to_json(errors)}' }) return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_SUCCESS if success else Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_DATA: None + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_SUCCESS if success else Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_DATA: None }) # return redirect(url_for('routes_mtg_game.game_detail', game_id = game_id)) except Exception as e: return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: f'Bad data received by controller.\n{e}' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: f'Bad data received by controller.\n{e}' }) @routes_mtg_game.route(Model_View_MTG_Base.HASH_SAVE_MTG_GAME_ROUND_PLAYER_DAMAGE, methods=['POST']) @@ -336,8 +333,8 @@ def save_game_round_player_damage(): rounds = data.get(Model_View_MTG_Base.FLAG_ROUND, []) if len(rounds) == 0: return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: 'No rounds to save.' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: 'No rounds to save.' }) objs_round = [] @@ -349,8 +346,8 @@ def save_game_round_player_damage(): damages = data.get(Model_View_MTG_Base.FLAG_DAMAGE, []) if len(damages) == 0: return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: 'No damages to save.' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: 'No damages to save.' }) objs_damage = [] @@ -363,16 +360,16 @@ def save_game_round_player_damage(): if len(errors) > 0: return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: f'Error saving round player damages.\n{Model_View_MTG_Game.convert_list_objects_to_json(errors)}' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: f'Error saving round player damages.\n{Model_View_MTG_Game.convert_list_objects_to_json(errors)}' }) return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_SUCCESS if success else Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_DATA: None + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_SUCCESS if success else Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_DATA: None }) # return redirect(url_for('routes_mtg_game.game_detail', game_id = game_id)) except Exception as e: return jsonify({ - Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE, - Model_View_MTG_Base.FLAG_MESSAGE: f'Bad data received by controller.\n{e}' + Model_View_MTG_Base.FLAG_STATUS: Model_View_MTG_Base.FLAG_FAILURE + , Model_View_MTG_Base.FLAG_MESSAGE: f'Bad data received by controller.\n{e}' }) diff --git a/static/PostgreSQL/71209_usp_TCG_MTG_Game_Save.sql b/static/PostgreSQL/71209_usp_TCG_MTG_Game_Save.sql index 7dccb6a..3913eed 100644 --- a/static/PostgreSQL/71209_usp_TCG_MTG_Game_Save.sql +++ b/static/PostgreSQL/71209_usp_TCG_MTG_Game_Save.sql @@ -148,7 +148,7 @@ BEGIN , change_set_id ) VALUES ( - game_id -- game_id + v_game_id -- game_id , v_notes -- notes , 1 -- display_order , TRUE -- active @@ -158,7 +158,6 @@ BEGIN , v_user_id -- updated_last_by_user_id , v_change_set_id -- change_set_id ) - RETURNING game_id INTO v_game_id ; ELSE UPDATE tcg.public.TCG_MTG_Game GAME diff --git a/static/dist/js/main.bundle.js b/static/dist/js/main.bundle.js index 2fa3176..3248ba6 100644 --- a/static/dist/js/main.bundle.js +++ b/static/dist/js/main.bundle.js @@ -1918,7 +1918,7 @@ class PageMtgGame extends TableBasePage { damageDisplay.classList.remove('lethal'); } const latestRoundId = PageMtgGame.getLatestRoundId(); - const damageIndex = damageRecords.findIndex(damageRecord => damage[attrRoundId] == latestRoundId && damageRecord[attrPlayerId] == playerId && damageRecord[attrReceivedFromCommanderPlayerId] == sourceId); + const damageIndex = damageRecords.findIndex(damageRecord => damageRecord[attrRoundId] == latestRoundId && damageRecord[attrPlayerId] == playerId && damageRecord[attrReceivedFromCommanderPlayerId] == sourceId); damageRecords[damageIndex][flagHealthChange] -= amount; this.changeLife(playerId // playerId , -amount // amount @@ -2058,18 +2058,18 @@ class PageMtgGame extends TableBasePage { } } async saveGame() { - const gameState = { - [flagPlayer]: players, - [flagRound]: rounds, - [flagDamage]: damageRecords - }; /* + const gameState = { + [flagPlayer]: players + , [flagRound]: rounds + , [flagDamage]: damageRecords + }; if (gameState[flagPlayer].length > 0) { localStorage.setItem(`mtgGame_${gameId}`, JSON.stringify(gameState)); PageMtgGame.showSaveIndicator(); } */ - const comment = 'Save players'; + const comment = 'Save player damage'; const self = this; API.saveGameRoundPlayerDamages(rounds, damageRecords, null, comment).then(data => { if (data[flagStatus] == flagSuccess) { @@ -2140,13 +2140,13 @@ class PageMtgGames extends TableBasePage { this.hookupTcgGames(); } hookupTcgGames() { - PageMtgGames.initGamesPage(); + this.initGamesPage(); } - static initGamesPage() { + initGamesPage() { // Initialize form submission const newGameForm = document.getElementById('newGameForm'); if (newGameForm) { - newGameForm.addEventListener('submit', PageMtgGames.handleNewGameSubmit); + newGameForm.addEventListener('submit', this.handleNewGameSubmit.bind(this)); // () => { this.handleNewGameSubmit.bind(this); }); } // Initialize filter form @@ -2210,7 +2210,7 @@ class PageMtgGames extends TableBasePage { } } } - static async handleNewGameSubmit(e) { + async handleNewGameSubmit(e) { e.preventDefault(); const form = e.target; const formData = new FormData(form); @@ -2233,13 +2233,18 @@ class PageMtgGames extends TableBasePage { const games = [gameData]; const comment = 'Create new game'; debugger; + // const self = this; API.saveGame(games, form, comment).then(data => { if (data[flagStatus] == flagSuccess) { if (_verbose) { utils_Utils.consoleLogIfNotProductionEnvironment('Records saved!'); utils_Utils.consoleLogIfNotProductionEnvironment('Data received:', data); } - this.callFilterTableContent(gameData.game_id); + // this.callFilterTableContent(data[attrGameId]); // gameData.game_id + const gamePageHash = `${hashPageGame}/${data[attrGameId]}`; + let filtersJson = {}; + this.leave(); + API.goToHash(gamePageHash, filtersJson); } else { utils_Utils.consoleLogIfNotProductionEnvironment("error: " + data[flagMessage]); // OverlayError.show(data[flagMessage]); @@ -2253,13 +2258,6 @@ class PageMtgGames extends TableBasePage { submitBtn.disabled = false; }); } - callFilterTableContent(gameId) { - const gamePageHash = `${hashPageGame}/${gameId}`; - let filtersJson = {}; - utils_Utils.consoleLogIfNotProductionEnvironment("callFilterTableContent"); - this.leave(); - API.goToHash(gamePageHash, filtersJson); - } static handleFilterSubmit(e) { // Let the form submit normally - it will reload with query params // You can add client-side filtering here if needed diff --git a/static/dist/js/main.bundle.js.map b/static/dist/js/main.bundle.js.map index df8fe38..76b573c 100644 --- a/static/dist/js/main.bundle.js.map +++ b/static/dist/js/main.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"js/main.bundle.js","mappings":"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","sources":["webpack://app/./static/js/lib/validation.js","webpack://app/./static/js/dom.js","webpack://app/./static/js/api.js","webpack://app/./static/js/lib/business_objects/business_objects.js","webpack://app/./static/js/lib/events.js","webpack://app/./static/js/lib/local_storage.js","webpack://app/./static/js/lib/utils.js","webpack://app/./static/js/components/common/temporary/overlay_confirm.js","webpack://app/./static/js/pages/base.js","webpack://app/./static/js/components/common/temporary/overlay_error.js","webpack://app/./static/js/pages/base_table.js","webpack://app/./static/js/pages/tcg/mtg_game.js","webpack://app/./static/js/pages/tcg/mtg_games.js","webpack://app/./static/js/pages/tcg/mtg_home.js","webpack://app/./static/js/pages/legal/accessibility_report.js","webpack://app/./static/js/pages/legal/accessibility_statement.js","webpack://app/./static/js/pages/legal/license.js","webpack://app/./static/js/pages/legal/privacy_policy.js","webpack://app/./static/js/pages/legal/retention_schedule.js","webpack://app/./static/js/pages/mixin.js","webpack://app/./static/js/pages/mixin_table.js","webpack://app/./static/js/pages/user/user.js","webpack://app/./static/js/pages/user/users.js","webpack://app/./static/js/router.js","webpack://app/./static/js/app.js","webpack://app/./static/css/main.css?0a91","webpack://app/./static/css/components/button.css?0e0b","webpack://app/./static/css/components/card.css","webpack://app/./static/css/components/dialog.css","webpack://app/./static/css/components/form.css?94e1","webpack://app/./static/css/components/image.css?9f9c","webpack://app/./static/css/components/label.css?b78f","webpack://app/./static/css/components/modal.css","webpack://app/./static/css/components/navigation.css","webpack://app/./static/css/components/overlay.css?6dfd","webpack://app/./static/css/components/table.css?e553","webpack://app/./static/css/layouts/header.css?da75","webpack://app/./static/css/layouts/footer.css?65e3","webpack://app/./static/css/layouts/table-main.css?8c15","webpack://app/./static/css/lib/reset.css","webpack://app/./static/css/lib/typography.css","webpack://app/./static/css/lib/utils.css","webpack://app/./static/css/lib/variables.css","webpack://app/./static/css/themes/light.css?855e"],"sourcesContent":["\nexport default class Validation {\n /*\n isNullOrWhitespace(v) {\n let txt = JSON.stringify(v).replace('/\\s\\g', '');\n return (txt == '' || 'null');\n }\n */\n\n static isEmpty(object) {\n\n let isEmpty = true;\n\n if (object !== null && object !== \"null\" && object !== undefined && object !== \"undefined\") {\n\n if (object.length == undefined) {\n isEmpty = false; // object exists but isn't a collection\n }\n else if (typeof object === \"function\") {\n isEmpty = false; // object is reference\n }\n else { // string or collection\n\n let isString = (typeof object == \"string\");\n\n if (isString) object = object.trim();\n\n if (object.length > 0) {\n\n if (isString) {\n isEmpty = false; // String greater than length 0\n }\n else {\n\n if (typeof object[0] != \"string\") {\n isEmpty = false;\n }\n else {\n for(let i = 0; i < object.length; i++) {\n if (object[i] != \"\") {\n isEmpty = false;\n break\n }\n }\n }\n }\n }\n }\n }\n\n return isEmpty;\n }\n\n static isValidNumber(value, positiveOnly) {\n return !Validation.isEmpty(value) && !isNaN(value) && (!positiveOnly || parseFloat(value) > 0);\n }\n\n static getDataContentType(params) {\n\n var data = null;\n var contentType = '';\n\n if (!Validation.isEmpty(params)) {\n\n if (typeof params === \"string\") {\n data = params;\n contentType = \"application/x-www-form-urlencoded; charset=UTF-8\";\n }\n else {\n data = JSON.stringify(params);\n contentType = \"application/json; charset=UTF-8\";\n }\n }\n\n return { Data: data, ContentType: contentType };\n }\n\n static arrayContainsItem(array, itemValue) {\n\n var hasItem = false;\n\n if (!Validation.isEmpty(array) && !Validation.isEmpty(itemValue)) {\n\n var isJQueryElementArray = array[0] instanceof jQuery;\n\n if (isJQueryElementArray) {\n\n for (let i = 0; i < array.length; i++) {\n\n if (document.querySelectorAll(array[i]).is(itemValue)) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n var isDate = array[0] instanceof Date;\n\n if (isDate) {\n \n for (let i = 0; i < array.length; i++) {\n\n if (array[i].getTime() === itemValue.getTime()) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n for (let i = 0; i < array.length; i++) {\n\n if (array[i] == itemValue) {\n hasItem = true;\n break;\n }\n }\n }\n }\n }\n\n return hasItem;\n }\n\n static dictHasKey(d, k) {\n return (k in d);\n }\n static areEqualDicts(dict1, dict2) {\n const keys1 = Object.keys(dict1);\n const keys2 = Object.keys(dict2);\n \n if (keys1.length !== keys2.length) {\n return false;\n }\n \n for (let key of keys1) {\n if (dict1[key] !== dict2[key]) {\n return false;\n }\n }\n \n return true;\n }\n\n static imageExists(url, callback) {\n\n var img = new Image();\n\n img.onload = function() { callback(true); };\n img.onerror = function() { callback(false); };\n img.src = url;\n }\n\n static toFixedOrDefault(value, decimalPlaces, defaultValue = null) {\n return Validation.isValidNumber(value) ? parseFloat(value).toFixed(decimalPlaces) : defaultValue;\n }\n}\n","\nimport Utils from \"./lib/utils.js\";\nimport Validation from \"./lib/validation.js\";\n\nexport default class DOM {\n static setElementAttributesValuesCurrentAndPrevious(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementAttributeValueCurrent(element, data) {\n element.setAttribute(attrValueCurrent, data);\n }\n static setElementAttributeValuePrevious(element, data) {\n element.setAttribute(attrValuePrevious, data);\n }\n static setElementValuesCurrentAndPrevious(element, data) {\n DOM.setElementValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementValueCurrent(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n element.checked = data;\n }\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n element.value = data;\n }\n else {\n element.textContent = data;\n }\n }\n static setElementValueCurrentIfEmpty(element, data) {\n if (Validation.isEmpty(DOM.getElementValueCurrent(element))) {\n DOM.setElementValueCurrent(element, data);\n }\n }\n static getCellFromElement(element) {\n return element.closest('td');\n }\n static getRowFromElement(element, flagRow) {\n let selector = Validation.isEmpty(flagRow) ? 'tr' : 'tr.' + flagRow;\n return element.closest(selector);\n }\n static getClosestParent(element, parentSelector) {\n let parent = element.parentElement;\n while (parent) {\n if (parent.matches(parentSelector)) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n static convertForm2JSON(elementForm) {\n let dataForm = {};\n if (Validation.isEmpty(elementForm)) {\n return dataForm;\n }\n let containersFilter = elementForm.querySelectorAll('.' + flagContainerInput + '.' + flagFilter);\n let containerFilter, labelFilter, keyFilter, filter;\n for (let indexFilter = 0; indexFilter < containersFilter.length; indexFilter++) {\n containerFilter = containersFilter[indexFilter];\n labelFilter = containerFilter.querySelector('label');\n keyFilter = labelFilter.getAttribute('for');\n filter = containerFilter.querySelector(`#${keyFilter}`);\n dataForm[keyFilter] = DOM.getElementValueCurrent(filter);\n }\n return dataForm;\n }\n static loadPageBody(contentNew) {\n let pageBody = document.querySelector(idPageBody);\n pageBody.innerHTML = contentNew;\n }\n static getHashPageCurrent() {\n const hashPageCurrent = document.body.dataset.page;\n return hashPageCurrent;\n }\n static updateAndCheckIsElementDirty(element) {\n element.setAttribute(attrValueCurrent, DOM.getElementValueCurrent(element));\n return DOM.isElementDirty(element);\n }\n static isElementDirty(element) {\n let isDirty = element.getAttribute(attrValuePrevious) != element.getAttribute(attrValueCurrent);\n DOM.handleDirtyElement(element, isDirty);\n return isDirty;\n }\n static handleDirtyElement(element, isDirty) {\n DOM.toggleElementHasClassnameFlag(element, isDirty, flagDirty);\n }\n static toggleElementHasClassnameFlag(element, elementHasFlag, flag) {\n let elementAlreadyHasFlag = element.classList.contains(flag);\n if (elementHasFlag == elementAlreadyHasFlag) return;\n if (elementHasFlag) {\n element.classList.add(flag);\n } else {\n element.classList.remove(flag);\n }\n }\n static hasDirtyChildrenContainer(container) {\n if (container == null) return false;\n return container.querySelector('.' + flagDirty) != null;\n }\n static hasDirtyChildrenNotDeletedContainer(container) {\n if (container == null || container.classList.contains(flagDelete)) return false;\n return container.querySelector('.' + flagDirty + ':not(.' + flagDelete + ', .' + flagDelete + ' *)') != null;\n }\n static getElementValueCurrent(element) {\n let returnVal = '';\n \n if (!Validation.isEmpty(element)) {\n \n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n returnVal = element.checked;\n }\n /*\n else if (element.classList.contains(flagIsDatePicker)) {\n returnVal = getDatePickerDate(element, adjust4DayLightSavings);\n }\n */\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n returnVal = element.value;\n }\n else if (element.classList.contains(flagButton) && element.classList.contains(flagActive)) { // tagName === 'BUTTON'\n returnVal = element.classList.contains(flagDelete);\n }\n else if (tagName === 'TD') {\n returnVal = DOM.getElementAttributeValueCurrent(element);\n }\n else if (tagName == 'SVG' && element.classList.contains(flagCheckbox)) {\n returnVal = (element.classList.contains(flagIsChecked))\n }\n else {\n returnVal = element.textContent;\n }\n }\n \n if (Validation.isEmpty(returnVal)) returnVal = '';\n \n return returnVal;\n }\n static getElementAttributeValueCurrent(element) {\n // debugger;\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValueCurrent);\n }\n static getElementAttributeValuePrevious(element) {\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValuePrevious);\n }\n /* base_table.handleChangeElementCellTable\n static updateAndCheckIsTableElementDirty(element) {\n let wasDirty = DOM.isElementDirty(element);\n let row = DOM.getRowFromElement(element);\n let wasDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n let isDirty = DOM.updateAndCheckIsElementDirty(element);\n let cell = DOM.getCellFromElement(element);\n Utils.consoleLogIfNotProductionEnvironment({element, row, cell, isDirty, wasDirty});\n if (isDirty != wasDirty) {\n DOM.handleDirtyElement(cell, isDirty);\n let isDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow});\n if (isDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(row, isDirtyRow);\n }\n }\n }\n */\n static scrollToElement(parent, element) {\n // REQUIRED: parent has scroll-bar\n parent.scrollTop(parent.scrollTop() + (element.offset().top - parent.offset().top));\n }\n static isElementInContainer(container, element) {\n\n if (typeof jQuery === 'function') {\n if (container instanceof jQuery) container = container[0];\n if (element instanceof jQuery) element = element[0];\n }\n\n var containerBounds = container.getBoundingClientRect();\n var elementBounds = element.getBoundingClientRect();\n\n return (\n containerBounds.top <= elementBounds.top &&\n containerBounds.left <= elementBounds.left &&\n ((elementBounds.top + elementBounds.height) <= (containerBounds.top + containerBounds.height)) &&\n ((elementBounds.left + elementBounds.width) <= (containerBounds.left + containerBounds.width))\n );\n }\n static alertError(errorType, errorText) {\n alert(errorType + '\\n' + errorText);\n }\n static createOptionUnselectedProductVariation() {\n return {\n [flagProductVariationType]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariationType],\n [flagName]: 'Select Variation Type',\n [attrIdProductVariationType]: 0,\n },\n [flagProductVariation]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariation],\n [flagName]: 'Select Variation',\n [attrIdProductVariation]: 0,\n },\n };\n }\n static createOption(optionJson) {\n if (Validation.isEmpty(optionJson)) optionJson = {\n text: 'Select',\n value: 0,\n };\n let option = document.createElement('option');\n option.value = optionJson.value;\n option.textContent = optionJson.text;\n option.selected = optionJson.selected;\n return option;\n }\n\n static escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n static unescapeHtml(html) {\n const div = document.createElement('div');\n div.innerHTML = html;\n return div.textContent || div.innerText || '';\n }\n}\n","import DOM from './dom.js';\n\nexport default class API {\n \n static getCsrfToken() {\n return document.querySelector(idCSRFToken).getAttribute('content');\n }\n \n static async request(hashEndpoint, method = 'GET', data = null, params = null) {\n const url = API.getUrlFromHash(hashEndpoint, params);\n const csrfToken = API.getCsrfToken();\n const options = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n [flagCsrfToken]: csrfToken,\n }\n };\n\n if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {\n data = { \n ...data, \n [flagCsrfToken]: csrfToken,\n };\n options.body = JSON.stringify(data);\n }\n\n try {\n const response = await fetch(url, options);\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n return await response.json();\n } catch (error) {\n console.error('API request failed:', error);\n throw error;\n }\n }\n \n static getUrlFromHash(hash, params = null) {\n if (hash == null) hash = hashPageHome;\n let url = API.parameteriseUrl(_pathHost + hash, params);\n return url;\n }\n static parameteriseUrl(url, params) {\n if (params) {\n url += '?' + new URLSearchParams(params).toString();\n }\n return url;\n }\n static goToUrl(url) {\n window.location.href = url;\n }\n static goToHash(hash, params = null) {\n const url = API.getUrlFromHash(hash, params);\n API.goToUrl(url);\n }\n\n // specific api calls\n /* Example:\n getUsers: () => request('/users'),\n getUserById: (id) => request(`/users/${id}`),\n createUser: (userData) => request('/users', 'POST', userData),\n updateUser: (id, userData) => request(`/users/${id}`, 'PUT', userData),\n deleteUser: (id) => request(`/users/${id}`, 'DELETE'),\n */\n\n // User\n // user\n static async loginUser() {\n let callback = {};\n callback[flagCallback] = DOM.getHashPageCurrent();\n return await API.request(hashPageUserLogin, 'POST', callback);\n }\n static async saveUsers(users, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagUser] = users;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveUserUser, 'POST', dataRequest);\n }\n\n // MTG Game API methods\n static async saveGame(game, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagGame] = game;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveGame, 'POST', dataRequest);\n }\n\n static async getGamePlayers(gameId) {\n const url = `/mtg/api/game/${gameId}/players`;\n return await API.request(url, 'GET');\n }\n static async saveGamePlayers(players, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagPlayer] = players;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveGamePlayer, 'POST', dataRequest);\n }\n\n static async getGameRounds(gameId) {\n const url = `/mtg/api/game/${gameId}/rounds`;\n return await API.request(url, 'GET');\n }\n\n static async getGameDamageRecords(gameId) {\n const url = `/mtg/api/game/${gameId}/damage-records`;\n return await API.request(url, 'GET');\n }\n static async saveGameRoundPlayerDamages(rounds, damages, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagDamage] = damages;\n dataRequest[flagRound] = rounds;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveGameRoundPlayerDamage, 'POST', dataRequest);\n }\n\n\n}\n","\nimport Utils from '../utils.js';\n\nexport default class BusinessObjects {\n static getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected = null) {\n return {\n text: objectJson[keyText],\n value: objectJson[keyValue],\n selected: (objectJson[keyValue] == valueSelected),\n };\n }\n static getOptionJsonFromObjectJson(objectJson, valueSelected = null) {\n let keyText = objectJson[flagNameAttrOptionText];\n let keyValue = objectJson[flagNameAttrOptionValue];\n // Utils.consoleLogIfNotProductionEnvironment({objectJson, keyText, keyValue});\n return BusinessObjects.getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected);\n }\n static getObjectText(objectJson) {\n return objectJson == null ? '' : objectJson[objectJson[flagNameAttrOptionText]];\n }\n static getListObjectsFromIdDictAndCsv(idDict, idCsv) {\n let listObjects = [];\n let ids = idCsv.split(',');\n for (let id of ids) {\n listObjects.push(idDict[id]);\n }\n return listObjects;\n }\n}","\nexport default class Events {\n static initialiseEventHandler(selectorElement, classInitialised, eventHandler) {\n document.querySelectorAll(selectorElement).forEach(function(element) {\n if (element.classList.contains(classInitialised)) return;\n eventHandler(element);\n element.classList.add(classInitialised);\n });\n }\n static hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n}","\nimport Validation from \"./validation.js\";\n\nexport default class LocalStorage {\n/*\nfunction getPageLocalStorage(pageHash) {\n\n let ls;\n try {\n ls = JSON.parse(localStorage.getItem(pageHash));\n } catch {\n\n }\n\n if (Validation.isEmpty(ls)) return {}\n\n return ls;\n}\nfunction getPageLocalStorageCurrent() {\n\n return JSON.parse(localStorage.getItem(hashPageCurrent));\n}\n\nfunction setPageLocalStorage(pageHash, newLS) {\n\n localStorage.setItem(pageHash, JSON.stringify(newLS));\n}\n\nfunction clearPageLocalStorage(pageHash) {\n localStorage.removeItem(pageHash);\n}\n\nfunction setupPageLocalStorage(pageHash) {\n\n let ls = getPageLocalStorage(pageHash);\n\n if (Validation.isEmpty(ls)) ls = {};\n\n setPageLocalStorage(pageHash, ls);\n}\n*/\n\n static getLocalStorage(key) {\n return JSON.parse(localStorage.getItem(key));\n }\n\n static setLocalStorage(key, newLS) {\n localStorage.setItem(key, JSON.stringify(newLS));\n }\n\n/*\nfunction setupPageLocalStorageNext(pageHashNext) {\n let lsOld = getPageLocalStorage(hashPageCurrent);\n hashPageCurrent = pageHashNext;\n clearPageLocalStorage(hashPageCurrent);\n setupPageLocalStorage(hashPageCurrent);\n let lsNew = getPageLocalStorage(hashPageCurrent);\n lsNew[keyBasket] = (keyBasket in lsOld) ? lsOld[keyBasket] : {'items': []};\n setPageLocalStorage(hashPageCurrent, lsNew);\n}\n*/\n}","// Utility functions\n/*\nfunction $(selector) {\n return document.querySelector(selector);\n}\n\nfunction $$(selector) {\n return document.querySelectorAll(selector);\n}\n*/\nexport default class Utils {\n static getListFromDict(dict) {\n let list = [];\n for (let key in dict) {\n list.push(dict[key]);\n }\n return list;\n }\n static consoleLogIfNotProductionEnvironment(message) {\n if (environment.is_production != \"true\") {\n console.log(message);\n }\n }\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayConfirm {\n static hookup(callbackSuccess) {\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.style.visibility = 'hidden';\n });\n });\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagSubmit, flagInitialised, (buttonConfirm) => {\n buttonConfirm.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n let textarea = overlay.querySelector('textarea');\n overlay.style.visibility = 'hidden';\n callbackSuccess(textarea.value);\n });\n });\n }\n static show() {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.classList.remove(flagIsCollapsed);\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\nimport Validation from \"../lib/validation.js\";\n\nexport default class BasePage {\n constructor(router) {\n if (!router) {\n throw new Error(\"Router is required\");\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"initialising with router: \", router);\n }\n this.router = router;\n this.title = titlePageCurrent;\n if (this.constructor === BasePage) {\n throw new Error(\"Cannot instantiate abstract class\");\n }\n \n if (!this.constructor.hash) {\n throw new Error(`Class ${this.constructor.name} must have a static hash attribute.`);\n }\n }\n\n initialize() {\n throw new Error(\"Method 'initialize()' must be implemented.\");\n }\n\n sharedInitialize() {\n this.logInitialisation();\n this.hookupCommonElements();\n }\n\n logInitialisation() {\n Utils.consoleLogIfNotProductionEnvironment('Initialising ' + this.title + ' page');\n }\n \n hookupCommonElements() {\n // hookupVideos();\n this.hookupLogos();\n this.hookupNavigation();\n this.hookupOverlays();\n }\n hookupLogos() {\n Events.hookupEventHandler(\"click\", \".\" + flagImageLogo + \",\" + \".\" + flagLogo, (event, element) => {\n Utils.consoleLogIfNotProductionEnvironment('clicking logo');\n this.router.navigateToHash(hashPageHome);\n });\n }\n /*\n hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n */\n hookupNavigation() {\n Events.hookupEventHandler(\"click\", idButtonHamburger, (event, element) => {\n let overlayHamburger = document.querySelector(idOverlayHamburger);\n if (overlayHamburger.classList.contains(flagIsCollapsed)) {\n overlayHamburger.classList.remove(flagIsCollapsed);\n overlayHamburger.classList.add(flagExpanded);\n } else {\n overlayHamburger.classList.remove(flagExpanded);\n overlayHamburger.classList.add(flagIsCollapsed);\n }\n });\n\n this.hookupButtonsNavUserAccount();\n this.hookupButtonsNavUserLogout();\n this.hookupButtonsNavUserLogin();\n }\n hookupButtonsNav(buttonSelector) {\n Events.hookupEventHandler(\"click\", buttonSelector, (event, button) => {\n let pageHash = buttonSelector.getAttribute('href');\n this.router.navigateToHash(pageHash); \n });\n }\n hookupButtonsNavUserAccount() {\n // this.hookupButtonsNav('.' + flagNavUserAccount);\n }\n hookupButtonsNavUserLogout() {\n // this.hookupButtonsNav('.' + flagNavUserLogout);\n }\n hookupButtonsNavUserLogin() {\n Events.hookupEventHandler(\"click\", '.' + flagNavUserLogin, (event, navigator) => {\n event.preventDefault();\n event.stopPropagation();\n this.leave();\n API.loginUser()\n .then((response) => {\n if (response.Success) {\n window.location.href = response[flagCallback];\n } else {\n DOM.alertError(\"Error\", response.Message);\n }\n });\n });\n }\n\n hookupOverlays() {\n this.hookupOverlayFromId(idOverlayConfirm);\n this.hookupOverlayFromId(idOverlayError);\n }\n\n hookupOverlayFromId(idOverlay) {\n Events.initialiseEventHandler(idOverlay, flagInitialised, (overlay) => {\n overlay.querySelector('button.' + flagCancel).addEventListener(\"click\", (event) => {\n event.stopPropagation();\n overlay.style.display = 'none';\n });\n });\n }\n\n hookupButtonSave() {\n Events.initialiseEventHandler('.' + flagContainer + '.' + flagSave + '.' + flagCancel + ' button.' + flagSave, flagInitialised, (button) => {\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n button = event.target;\n if (button.classList.contains(flagIsCollapsed)) return;\n Utils.consoleLogIfNotProductionEnvironment('saving page: ', this.title);\n OverlayConfirm.show();\n });\n });\n }\n\n leave() {\n Utils.consoleLogIfNotProductionEnvironment('Leaving ' + this.title + ' page');\n if (this.constructor === BasePage) {\n throw new Error(\"Must implement leave() method.\");\n }\n }\n setLocalStoragePage(dataPage) {\n LocalStorage.setLocalStorage(this.hash, dataPage);\n }\n getLocalStoragePage() {\n return LocalStorage.getLocalStorage(this.hash);\n }\n\n toggleShowButtonsSaveCancel(show, buttonContainerSelector = null) { // , buttonSave = null, buttonCancel = null\n if (Validation.isEmpty(buttonContainerSelector)) buttonContainerSelector = '.' + flagContainer + '.' + flagSave + '.' + flagCancel;\n let buttonSave = document.querySelector(buttonContainerSelector + ' ' + idButtonSave);\n let buttonCancel = document.querySelector(buttonContainerSelector + ' ' + idButtonCancel);\n Utils.consoleLogIfNotProductionEnvironment({ show, buttonContainerSelector, buttonCancel, buttonSave });\n if (show) {\n buttonCancel.classList.remove(flagIsCollapsed);\n buttonSave.classList.remove(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('showing buttons');\n } else {\n buttonCancel.classList.add(flagIsCollapsed);\n buttonSave.classList.add(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('hiding buttons');\n }\n }\n\n static isDirtyFilter(filter) {\n let isDirty = DOM.updateAndCheckIsElementDirty(filter);\n if (isDirty) document.querySelectorAll(idTableMain + ' tbody tr').remove();\n return isDirty;\n }\n\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayError {\n static hookup() {\n Events.initialiseEventHandler(idOverlayError + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayError);\n overlay.style.visibility = 'hidden';\n });\n });\n }\n static show(msgError) {\n let overlay = document.querySelector(idOverlayError);\n let labelError = overlay.querySelector(idLabelError);\n labelError.innerText = msgError;\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport Validation from \"../lib/validation.js\";\nimport BasePage from \"./base.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\n\nexport default class TableBasePage extends BasePage {\n // static hash\n // static attrIdRowObject\n // callSaveTableContent\n\n constructor(router) {\n super(router);\n this.cursorYInitial = null;\n this.rowInitial = null;\n this.placeholder = null;\n this.dragSrcEl = null;\n this.dragSrcRow = null;\n\n this.hookupTableCellDdls = this.hookupTableCellDdls.bind(this);\n }\n \n initialize(isPopState = false) {\n throw new Error(\"Must implement initialize() method.\");\n }\n sharedInitialize(isPopState = false, isSinglePageApp = false) {\n if (!isPopState) {\n super.sharedInitialize();\n this.hookupFilters();\n this.hookupButtonsSaveCancel();\n this.hookupTableMain();\n OverlayConfirm.hookup(() => {\n if (isSinglePageApp) {\n this.saveRecordsTableDirtySinglePageApp();\n }\n else {\n this.saveRecordsTableDirty();\n }\n });\n } else {\n let dataPage = this.getLocalStoragePage();\n let filters = dataPage[flagFormFilters];\n let formFilters = TableBasePage.getFormFilters();\n let filtersDefault = DOM.convertForm2JSON(formFilters);\n if (!Validation.areEqualDicts(filters, filtersDefault)) {\n this.callFilterTableContent();\n }\n }\n }\n hookupFilters() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method hookupFilters().\");\n }\n }\n sharedHookupFilters() {\n this.hookupButtonApplyFilters();\n this.hookupSearchTextFilter();\n }\n hookupFilterActive() {\n let filterSelector = idFormFilters + ' #' + flagActiveOnly;\n let filterActiveOld = document.querySelector(filterSelector);\n filterActiveOld.removeAttribute('id');\n let parentDiv = filterActiveOld.parentElement;\n let isChecked = (DOM.getElementAttributeValuePrevious(parentDiv) == \"True\");\n let filterActiveNew = document.querySelector(idFormFilters + ' div.' + flagActiveOnly + '.' + flagContainerInput + ' svg.' + flagActiveOnly);\n filterActiveNew.setAttribute('id', flagActiveOnly);\n if (isChecked) filterActiveNew.classList.add(flagIsChecked);\n\n Events.hookupEventHandler(\"click\", filterSelector, (event, filterActive) => {\n Utils.consoleLogIfNotProductionEnvironment({ filterActive });\n Utils.consoleLogIfNotProductionEnvironment({ [filterActive.tagName]: filterActive.tagName });\n let svgElement = (filterActive.tagName.toUpperCase() == 'SVG') ? filterActive : filterActive.parentElement;\n let wasChecked = svgElement.classList.contains(flagIsChecked);\n if (wasChecked) {\n svgElement.classList.remove(flagIsChecked);\n }\n else {\n svgElement.classList.add(flagIsChecked);\n }\n return this.handleChangeFilter(event, filterActive);\n });\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n hookupFilter(filterFlag, handler = (event, filter) => { return this.handleChangeFilter(event, filter); }) {\n let filterSelector = idFormFilters + ' #' + filterFlag;\n Events.hookupEventHandler(\"change\", filterSelector, handler);\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n handleChangeFilter(event, filter) {\n let isDirtyFilter = DOM.updateAndCheckIsElementDirty(filter);\n let formFilters = TableBasePage.getFormFilters();\n let areDirtyFilters = isDirtyFilter || DOM.hasDirtyChildrenContainer(formFilters);\n let tbody = document.querySelector(idTableMain + ' tbody');\n let rows = tbody.querySelectorAll(':scope > tr');\n rows.forEach((row) => {\n if (areDirtyFilters && !row.classList.contains(flagIsCollapsed)) row.classList.add(flagIsCollapsed);\n if (!areDirtyFilters && row.classList.contains(flagIsCollapsed)) {\n row.classList.remove(flagIsCollapsed);\n let dirtyInputs = row.querySelectorAll('input.' + flagDirty);\n dirtyInputs.forEach((dirtyInput) => {\n dirtyInput.value = DOM.getElementAttributeValueCurrent(dirtyInput);\n });\n }\n });\n if (areDirtyFilters) {\n /*\n tbody.querySelectorAll('tr').forEach((tr) => { \n if (!DOM.hasDirtyChildrenContainer(tr)) tr.remove(); \n });\n */\n tbody.innerHTML = '
Press \"Apply Filters\" to refresh the table.
' + tbody.innerHTML;\n if (!tbody.classList.contains(flagIsCollapsed)) tbody.classList.add(flagIsCollapsed);\n }\n else {\n let isDirtyLabel = tbody.querySelector(\":scope > div\");\n if (isDirtyLabel != null) isDirtyLabel.remove();\n if (tbody.classList.contains(flagIsCollapsed)) tbody.classList.remove(flagIsCollapsed);\n let initialisedElements = tbody.querySelectorAll('.' + flagInitialised);\n initialisedElements.forEach((initialisedElement) => {\n initialisedElement.classList.remove(flagInitialised);\n });\n this.hookupTableMain();\n }\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupFilterIsNotEmpty() {\n this.hookupFilter(flagIsNotEmpty);\n }\n hookupButtonApplyFilters() {\n Events.hookupEventHandler(\"click\", idButtonApplyFilters, (event, button) => {\n event.stopPropagation();\n this.callFilterTableContent();\n });\n }\n hookupSearchTextFilter() {\n this.hookupFilter(flagSearch);\n }\n hookupFilterCommandCategory() {\n this.hookupFilter(attrIdCommandCategory, (event, filterCommandCategory) => {\n this.handleChangeFilter();\n let isDirtyFilter = filterCommandCategory.classList.contains(flagDirty);\n let idCommandCategory = DOM.getElementValueCurrent(filterCommandCategory);\n console.log(\"filter commands unsorted\");\n console.log(Utils.getListFromDict(filterCommands));\n let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => command[attrIdCommandCategory] == idCommandCategory);\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n let filterCommand = document.querySelector(idFormFilters + ' .' + flagCommand);\n let idCommandPrevious = DOM.getElementAttributeValuePrevious(filterCommand);\n filterCommand.innerHTML = '';\n let optionJson, option;\n option = DOM.createOption(null);\n filterCommand.appendChild(option);\n sortedCommands.forEach((command) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(command, idCommandPrevious);\n option = DOM.createOption(optionJson);\n filterCommand.appendChild(option);\n });\n filterCommand.dispatchEvent(new Event('change'));\n return isDirtyFilter;\n });\n }\n hookupFilterCommand() {\n this.hookupFilter(attrIdCommand);\n }\n hookupFilterLocation() {\n this.hookupFilter(attrIdLocation);\n }\n /*\n getAndLoadFilteredTableContent = () => {\n this.callFilterTableContent()\n .catch(error => console.error('Error:', error));\n }\n */\n static getFormFilters() {\n return document.querySelector(idFormFilters);\n }\n callFilterTableContent() {\n let formFilters = TableBasePage.getFormFilters();\n let filtersJson = DOM.convertForm2JSON(formFilters);\n Utils.consoleLogIfNotProductionEnvironment(\"callFilterTableContent\");\n Utils.consoleLogIfNotProductionEnvironment(\"formFilters\");\n Utils.consoleLogIfNotProductionEnvironment(formFilters);\n Utils.consoleLogIfNotProductionEnvironment(\"filtersJson\");\n Utils.consoleLogIfNotProductionEnvironment(filtersJson);\n this.leave();\n API.goToHash(this.constructor.hash, filtersJson);\n }\n callbackLoadTableContent(response) {\n let table = TableBasePage.getTableMain();\n let bodyTable = table.querySelector('tbody');\n bodyTable.querySelectorAll('tr').forEach(function(row) { row.remove(); });\n let rowsJson = response.data[flagRows];\n if (!Validation.isEmpty(rowsJson) && rowsJson.every(row => row.hasOwnProperty('display_order'))) {\n rowsJson = rowsJson.sort((a, b) => a.display_order - b.display_order);\n }\n rowsJson.forEach(this.loadRowTable.bind(this));\n this.hookupTableMain();\n }\n static getTableMain() {\n return document.querySelector(idTableMain);\n }\n loadRowTable(rowJson) {\n throw new Error(\"Subclass of TableBasePage must implement method loadRowTable().\");\n }\n getAndLoadFilteredTableContentSinglePageApp() {\n this.callFilterTableContent()\n .then(data => {\n Utils.consoleLogIfNotProductionEnvironment('Table data received:', data);\n this.callbackLoadTableContent(data);\n })\n .catch(error => console.error('Error:', error));\n }\n hookupButtonsSaveCancel() {\n this.hookupButtonSave();\n this.hookupButtonCancel();\n this.toggleShowButtonsSaveCancel(false);\n }\n saveRecordsTableDirty() {\n let records = this.getTableRecords(true);\n if (records.length == 0) {\n OverlayError.show('No records to save');\n return;\n }\n let formElement = TableBasePage.getFormFilters();\n let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));\n /*\n Utils.consoleLogIfNotProductionEnvironment({ formElement, comment, records });\n Utils.consoleLogIfNotProductionEnvironment('records');\n Utils.consoleLogIfNotProductionEnvironment(records);\n debugger;\n */\n this.callSaveTableContent(records, formElement, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n this.callFilterTableContent();\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \", data[flagMessage]);\n OverlayError.show(data[flagMessage]);\n }\n })\n .catch(error => console.error('Error:', error));\n }\n getTableRecords(dirtyOnly = false) {\n let records = [];\n let record;\n document.querySelectorAll(idTableMain + ' > tbody > tr').forEach((row) => {\n if (dirtyOnly && !DOM.hasDirtyChildrenContainer(row)) return;\n record = this.getJsonRow(row);\n records.push(record);\n });\n return records;\n }\n getJsonRow(row) {\n throw new Error(\"Subclass of TableBasePage must implement method getJsonRow().\");\n }\n saveRecordsTableDirtySinglePageApp() {\n let records = this.getTableRecords(true);\n if (records.length == 0) {\n OverlayError.show('No records to save');\n return;\n }\n let formElement = TableBasePage.getFormFilters();\n let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));\n this.callSaveTableContent(records, formElement, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n this.callbackLoadTableContent(data);\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \", data[flagMessage]);\n OverlayError.show(data[flagMessage]);\n }\n })\n .catch(error => console.error('Error:', error));\n }\n hookupButtonCancel() {\n Events.initialiseEventHandler('.' + flagContainer + '.' + flagSave + '.' + flagCancel + ' button.' + flagCancel, flagInitialised, (button) => {\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n button = event.target;\n if (button.classList.contains(flagIsCollapsed)) return;\n this.callFilterTableContent();\n });\n button.classList.add(flagIsCollapsed);\n });\n }\n handleClickAddRowTable(event, button) {\n event.stopPropagation();\n _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - _rowBlank.getAttribute(this.constructor.attrIdRowObject));\n let tbody = document.querySelector(idTableMain + ' tbody');\n if (tbody.classList.contains(flagIsCollapsed)) return;\n let row = _rowBlank.cloneNode(true);\n row.classList.remove(flagInitialised);\n row.querySelectorAll('.' + flagInitialised).forEach(function(element) {\n element.classList.remove(flagInitialised);\n });\n let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;\n row.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);\n this.initialiseRowNew(tbody, row);\n tbody.prepend(row);\n tbody.scrollTop = 0;\n this.hookupTableMain();\n this.postInitialiseRowNewCallback(tbody);\n }\n initialiseRowNew(tbody, row) {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method initialiseRowNew().\");\n }\n // row.classList.remove(flagRowNew);\n }\n hookupTableMain() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Must implement hookupTableMain() method.\");\n }\n Events.initialiseEventHandler(idTableMain, flagInitialised, (table) => {\n this.cacheRowBlank();\n });\n }\n cacheRowBlank() {\n let selectorRowNew = idTableMain + ' tbody tr.' + flagRowNew;\n let rowBlankTemp = document.querySelector(selectorRowNew);\n Utils.consoleLogIfNotProductionEnvironment(\"row blank temp: \", rowBlankTemp);\n let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;\n _rowBlank = rowBlankTemp.cloneNode(true);\n document.querySelectorAll(selectorRowNew).forEach(function(row) {\n row.remove();\n });\n _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);\n }\n postInitialiseRowNewCallback(tbody) {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method postInitialiseRowNewCallback(tbody).\");\n }\n }\n initialiseSliderDisplayOrderRowNew(tbody, row) {\n // let tdSelector = ':scope > tr > td.' + flagDisplayOrder;\n // let tbody = document.querySelector('table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody');\n let slidersDisplayOrder = tbody.querySelectorAll(':scope > tr > td.' + flagDisplayOrder + ' input.' + flagSlider);\n let maxDisplayOrder = 0;\n slidersDisplayOrder.forEach((slider) => {\n maxDisplayOrder = Math.max(maxDisplayOrder, parseFloat(DOM.getElementValueCurrent(slider)));\n });\n let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);\n DOM.setElementValuesCurrentAndPrevious(sliderDisplayOrder, maxDisplayOrder + 1);\n }\n hookupSlidersDisplayOrderTable() {\n let selectorDisplayOrder = idTableMain + ' tbody tr td.' + flagDisplayOrder + ' input.' + flagSlider + '.' + flagDisplayOrder;\n this.hookupChangeHandlerTableCells(selectorDisplayOrder);\n }\n hookupChangeHandlerTableCells(inputSelector, handler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.initialiseEventHandler(inputSelector, flagInitialised, (input) => {\n input.addEventListener(\"change\", (event) => {\n handler(event, input);\n });\n handler(null, input);\n });\n }\n handleChangeNestedElementCellTable(event, element) {\n let wasDirtyParentRows = this.getAllIsDirtyRowsInParentTree(element);\n let wasDirtyElement = element.classList.contains(flagDirty);\n let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);\n // Utils.consoleLogIfNotProductionEnvironment({isDirtyElement, wasDirtyElement, wasDirtyParentRows});\n // let td = DOM.getCellFromElement(element);\n // DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element));\n if (isDirtyElement != wasDirtyElement) {\n // DOM.handleDirtyElement(td, isDirtyElement);\n this.updateAndToggleShowButtonsSaveCancel();\n this.cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows);\n }\n }\n getAllIsDirtyRowsInParentTree(element) {\n let rows = [];\n let parent = element;\n let isDirty;\n while (parent) {\n if (parent.tagName.toUpperCase() == 'TR') {\n isDirty = parent.classList.contains(flagDirty)\n rows.push(isDirty);\n }\n parent = parent.parentElement;\n }\n return rows;\n }\n cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows) {\n if (Validation.isEmpty(wasDirtyParentRows)) return;\n let tr = DOM.getRowFromElement(element);\n let isDirtyRow = isDirtyElement || DOM.hasDirtyChildrenContainer(tr);\n let wasDirtyRow = wasDirtyParentRows.shift();\n Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow});\n if (isDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(tr, isDirtyRow);\n this.updateAndToggleShowButtonsSaveCancel();\n this.cascadeChangedIsDirtyNestedElementCellTable(tr.parentElement, isDirtyRow, wasDirtyParentRows);\n }\n }\n hookupChangeHandlerTableCellsWhenNotCollapsed(inputSelector, handler = (event, element) => {\n if (!element.classList.contains(flagIsCollapsed)) this.handleChangeNestedElementCellTable(event, element);\n }) {\n Events.hookupEventHandler(\"change\", inputSelector, handler);\n }\n hookupFieldsCodeTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagCode + ' > .' + flagCode);\n }\n hookupFieldsNameTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagName + ' > .' + flagName);\n }\n hookupFieldsDescriptionTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagDescription + ' > .' + flagDescription);\n }\n hookupFieldsNotesTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagNotes + ' > .' + flagNotes);\n }\n hookupFieldsActive(flagTable = '', handleClickRowNew = (event, element) => { this.handleClickAddRowTable(event, element); }) {\n let selectorButton = 'table.table-main' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody > tr > td.' + flagActive + ' .' + flagButton + '.' + flagActive;\n let selectorButtonDelete = selectorButton + '.' + flagDelete;\n let selectorButtonUndelete = selectorButton + ':not(.' + flagDelete + ')';\n Utils.consoleLogIfNotProductionEnvironment(\"hookupFieldsActive: \", selectorButtonDelete, selectorButtonUndelete);\n this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);\n this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);\n Events.hookupEventHandler(\n \"click\"\n , 'table.table-main' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > thead > tr > th.' + flagActive + ' .' + flagButton + '.' + flagActive\n , (event, button) => { handleClickRowNew(event, button); }\n );\n }\n hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.hookupEventHandler(\"click\", selectorButtonDelete, (event, element) => {\n this.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n });\n }\n handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;\n let valuePrevious = DOM.getElementAttributeValuePrevious(element);\n let wasDirty = element.classList.contains(flagDirty);\n let row = DOM.getRowFromElement(element);\n if (row.classList.contains(flagRowNew) && !DOM.hasDirtyChildrenContainer(row)) {\n row.parentNode.removeChild(row);\n }\n else {\n let buttonAddTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagAdd);\n let buttonAdd = buttonAddTemplate.cloneNode(true);\n DOM.setElementAttributeValuePrevious(buttonAdd, valuePrevious);\n DOM.setElementAttributeValueCurrent(buttonAdd, false);\n if (wasDirty) buttonAdd.classList.add(flagDirty);\n element.replaceWith(buttonAdd);\n changeHandler(null, buttonAdd);\n this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n }\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.hookupEventHandler(\"click\", selectorButtonUndelete, (event, element) => {\n this.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n });\n }\n handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;\n let valuePrevious = DOM.getElementAttributeValuePrevious(element);\n let wasDirty = DOM.isElementDirty(element);\n let buttonDeleteTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagDelete);\n let buttonDelete = buttonDeleteTemplate.cloneNode(true);\n DOM.setElementAttributeValuePrevious(buttonDelete, valuePrevious);\n DOM.setElementAttributeValueCurrent(buttonDelete, true);\n if (wasDirty) buttonDelete.classList.add(flagDirty);\n element.replaceWith(buttonDelete);\n changeHandler(null, buttonDelete);\n this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupTdsAccessLevel() {\n this.hookupTableCellDdlPreviews(flagAccessLevel, Utils.getListFromDict(accessLevels));\n }\n hookupTableCellDdlPreviews(\n fieldFlag\n , optionList\n , cellSelector = null\n , ddlHookup = (ddlSelector) => { this.hookupTableCellDdls(ddlSelector); }\n , changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }\n ) {\n if (cellSelector == null) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;\n Events.hookupEventHandler(\"click\", cellSelector + ' div.' + fieldFlag, (event, div) => {\n this.handleClickTableCellDdlPreview(\n event\n , div\n , fieldFlag\n , optionList\n , cellSelector\n , (ddlSelector) => { ddlHookup(\n ddlSelector\n , (event, element) => { changeHandler(event, element); }\n ); }\n );\n });\n ddlHookup(cellSelector + ' select.' + fieldFlag);\n }\n hookupTableCellDdls(ddlSelector, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { changeHandler(event, element); });\n }\n handleClickTableCellDdlPreview(event, div, fieldFlag, optionObjectList, cellSelector = null, ddlHookup = (cellSelector) => { this.hookupTableCellDdls(cellSelector); }) {\n if (Validation.isEmpty(cellSelector)) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;\n let idSelected = DOM.getElementAttributeValueCurrent(div);\n let td = DOM.getCellFromElement(div);\n td.innerHTML = '';\n let ddl = document.createElement('select');\n ddl.classList.add(fieldFlag);\n DOM.setElementValuesCurrentAndPrevious(ddl, idSelected);\n let optionJson, option;\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment(\"click table cell ddl preview\");\n Utils.consoleLogIfNotProductionEnvironment({optionObjectList, cellSelector});\n }\n option = DOM.createOption(null);\n ddl.appendChild(option);\n optionObjectList.forEach((optionObjectJson) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(optionObjectJson, idSelected);\n option = DOM.createOption(optionJson);\n ddl.appendChild(option);\n });\n td.appendChild(ddl);\n let ddlSelector = cellSelector + ' select.' + fieldFlag;\n ddlHookup(ddlSelector);\n }\n /*\n hookupTableCellDDlPreviewsWhenNotCollapsed(cellSelector, optionList, ddlHookup = (event, element) => { this.hookupTableCellDdls(event, element); }) {\n Events.hookupEventHandler(\"click\", cellSelector + ' div', (event, div) => {\n this.handleClickTableCellDdlPreview(event, div, optionList, cellSelector, (event, element) => { ddlHookup(event, element); });\n });\n }\n */\n toggleColumnCollapsed(flagColumn, isCollapsed) {\n this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagIsCollapsed);\n }\n toggleColumnHeaderCollapsed(flagColumn, isCollapsed) {\n this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagIsCollapsed);\n }\n\n hookupFieldsCommandCategory(idTable = null) {\n if (idTable == null) idTable = idTableMain;\n this.hookupTableCellDdlPreviews(\n flagCommandCategory\n , Utils.getListFromDict(filterCommandCategories).sort((a, b) => a[flagName].localeCompare(b[flagName]))\n , idTable + ' > tbody > tr > td.' + flagCommandCategory // + ' .' + flagCommandCategory\n , (cellSelector) => { this.hookupCommandCategoryDdls(cellSelector); }\n );\n }\n hookupCommandCategoryDdls(ddlSelector) {\n this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { this.handleChangeCommandCategoryDdl(event, element); });\n }\n handleChangeCommandCategoryDdl(event, ddlCategory) {\n let row = DOM.getRowFromElement(ddlCategory);\n let idCommandCategoryRowOld = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);\n this.handleChangeNestedElementCellTable(event, ddlCategory);\n let idCommandCategoryRowNew = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);\n if (\n idCommandCategoryRowOld == idCommandCategoryRowNew\n || idCommandCategoryRowNew == 0\n ) return;\n console.log({ idCommandCategoryRowNew, idCommandCategoryRowOld });\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n let tdCommand = row.querySelector('td.' + flagCommand);\n tdCommand.dispatchEvent(new Event('click'));\n let ddlCommand = row.querySelector('td.' + flagCommand + ' select.' + flagCommand);\n ddlCommand.innerHTML = '';\n ddlCommand.appendChild(DOM.createOption(null));\n let optionJson, option;\n let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => \n (\n command[attrIdCommandCategory] == idCommandCategoryRowNew\n || idCommandCategoryRowNew == 0\n )\n && (\n command[attrIdCommandCategory] == idCommandCategoryFilter\n || idCommandCategoryFilter == 0\n )\n );\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n sortedCommands.forEach((command) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(command);\n option = DOM.createOption(optionJson);\n ddlCommand.appendChild(option);\n });\n this.handleChangeNestedElementCellTable(event, ddlCommand);\n }\n hookupFieldsCommand(idTable = null) {\n if (idTable == null) idTable = idTableMain;\n Events.hookupEventHandler(\"click\", idTable + ' > tbody > tr > td.' + flagCommand + ' div.' + flagCommand, (event, div) => {\n Utils.consoleLogIfNotProductionEnvironment(div);\n let parentTr = DOM.getRowFromElement(div);\n Utils.consoleLogIfNotProductionEnvironment({ div, parentTr });\n let tdCommandCategory = parentTr.querySelector('td.' + flagCommandCategory);\n let idCommandCategoryRow = this.getIdCommandCategoryRow(parentTr); // DOM.getElementAttributeValueCurrent(tdCommandCategory);\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n let filterCommandList = Utils.getListFromDict(filterCommands);\n let commandsInCategory = filterCommandList.filter(command => \n (\n command[attrIdCommandCategory] == idCommandCategoryRow\n || idCommandCategoryRow == 0\n )\n && (\n command[attrIdCommandCategory] == idCommandCategoryFilter\n || idCommandCategoryFilter == 0\n )\n );\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n Utils.consoleLogIfNotProductionEnvironment({ tdCommandCategory, idCommandCategoryRow, idCommandCategoryFilter, filterCommandList, commandsInCategory });\n Utils.consoleLogIfNotProductionEnvironment(filterCommandList);\n this.handleClickTableCellDdlPreview(\n event\n , div\n , flagCommand // fieldFlag\n , sortedCommands // optionList\n , idTable + ' > tbody > tr > td.' + flagCommand // cellSelector\n , (cellSelector) => { this.hookupTableCellDdls(\n cellSelector\n , (event, element) => { this.handleChangeCommandDdl(event, element); }\n ); }\n );\n });\n this.hookupTableCellDdls(\n idTable + ' > tbody > tr > td.' + flagCommand + ' select.' + flagCommand\n , (event, element) => { this.handleChangeCommandDdl(event, element); }\n );\n }\n handleChangeCommandDdl(event, ddlCommand) {\n // console.log(\"handle change command ddl\");\n let row = DOM.getRowFromElement(ddlCommand);\n this.handleChangeNestedElementCellTable(event, ddlCommand);\n let idCommandCategoryRowOld = this.getIdCommandCategoryRow(row);\n let idCommandNew = this.getIdCommandRow(row);\n let commandNew = filterCommands[idCommandNew];\n // console.log({ idCommandCategoryRowOld, commandNew });\n if (commandNew == null || idCommandCategoryRowOld == commandNew[attrIdCommandCategory]) return;\n let divCommandCategory = row.querySelector('td.' + flagCommandCategory + ' div');\n if (divCommandCategory) divCommandCategory.dispatchEvent(new Event('click'));\n let ddlCommandCategory = row.querySelector('td.' + flagCommandCategory + ' select.' + flagCommandCategory);\n DOM.setElementValueCurrent(ddlCommandCategory, commandNew[attrIdCommandCategory]);\n // console.log({ ddlCommandCategory, commandNew });\n this.handleChangeNestedElementCellTable(event, ddlCommandCategory);\n }\n getIdCommandCategoryRow(tr) {\n let elementCommandCategory = tr.querySelector('td.' + flagCommandCategory + ' .' + flagCommandCategory);\n return DOM.getElementAttributeValueCurrent(elementCommandCategory);\n }\n getIdCommandCategoryFilter() {\n let formFilters = TableBasePage.getFormFilters();\n let idCommandCategory = 0;\n if (formFilters == null) return idCommandCategory;\n let commandCategoryFilter = formFilters.querySelector('#' + attrIdCommandCategory);\n let commandFilter = formFilters.querySelector('#' + attrIdCommand);\n let valueCurrentCommandCategoryFilter = DOM.getElementAttributeValueCurrent(commandCategoryFilter);\n Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandCategoryFilter });\n if (valueCurrentCommandCategoryFilter == \"\") {\n let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);\n Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandFilter });\n if (valueCurrentCommandFilter != \"\") {\n let command = filterCommands[valueCurrentCommandFilter];\n idCommandCategory = command[attrIdCommandCategory];\n }\n } else {\n idCommandCategory = Number(valueCurrentCommandCategoryFilter);\n }\n return idCommandCategory;\n }\n getHasCommandCategoryFilter() {\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n return !(Validation.isEmpty(idCommandCategoryFilter) || idCommandCategoryFilter == 0);\n }\n getIdCommandRow(tr) {\n let elementCommand = tr.querySelector('td.' + flagCommand + ' .' + flagCommand);\n return DOM.getElementAttributeValueCurrent(elementCommand);\n }\n getIdCommandFilter() {\n let formFilters = TableBasePage.getFormFilters();\n let commandFilter = formFilters.querySelector('#' + attrIdCommand);\n let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);\n let idCommand = Number(valueCurrentCommandFilter);\n return idCommand;\n }\n getHasCommandFilter() {\n let idCommandFilter = this.getIdCommandFilter();\n return !(Validation.isEmpty(idCommandFilter) || idCommandFilter == 0);\n }\n /*\n createTdActive(isActive) {\n let tdActive = document.createElement(\"td\");\n tdActive.classList.add(flagActive);\n let buttonActive = document.createElement(\"button\");\n buttonActive.classList.add(flagActive);\n buttonActive.classList.add(isActive ? flagDelete : flagAdd);\n buttonActive.textContent = isActive ? 'x' : '+';\n DOM.setElementAttributesValuesCurrentAndPrevious(buttonActive, isActive);\n tdActive.appendChild(buttonActive);\n return tdActive;\n }\n */\n leave() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Must implement leave() method.\");\n }\n super.leave();\n let formFilters = TableBasePage.getFormFilters();\n let dataPage = {};\n dataPage[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n this.setLocalStoragePage(dataPage);\n }\n\n toggleColumnHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {\n let table = TableBasePage.getTableMain();\n let columnTh = table.querySelector('th.' + columnFlag);\n let columnThHasFlag = columnTh.classList.contains(classnameFlag);\n if (isRequiredFlag == columnThHasFlag) return;\n DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);\n }\n toggleColumnHeaderHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {\n let table = TableBasePage.getTableMain();\n let columnTh = table.querySelector('th.' + columnFlag);\n DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);\n }\n\n updateAndToggleShowButtonsSaveCancel() {\n let pageBody = document.querySelector(idPageBody);\n let isDirty = DOM.hasDirtyChildrenContainer(pageBody);\n\n console.log({ pageBody, isDirty });\n\n this.toggleShowButtonsSaveCancel(isDirty);\n }\n}\n","\n\nimport API from \"../../api.js\";\nimport TableBasePage from \"../base_table.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\n\nexport default class PageMtgGame extends TableBasePage {\n static hash = hashPageMtgGame;\n static attrIdRowObject = attrGameId;\n callSaveTableContent = API.saveGame;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTcgGame();\n }\n hookupFilters() {\n // this.sharedHookupFilters();\n }\n loadRowTable(rowJson) {\n return;\n }\n getJsonRow(row) {\n return;\n }\n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n \n }\n\n hookupTableMain() {\n super.hookupTableMain();\n }\n hookupTcgGame() {\n this.initGamePage();\n let pageHeading = document.querySelector('.container.company-name .tcg-title.company-name');\n pageHeading.innerText = `MTG Game #${gameId}`;\n }\n\n initGamePage() {\n // Load existing game state from API or show setup\n PageMtgGame.updatePlayerSetup();\n if (typeof gameId !== 'undefined' && gameId) {\n this.loadGameFromServer();\n }\n /*\n else {\n PageMtgGame.updatePlayerSetup();\n }\n */\n \n PageMtgGame.hookupResetButton();\n PageMtgGame.hookupPlayerCountInput();\n this.hookupStartGameButton();\n /*\n this.hookupCommanderDeathIncrementButtons();\n this.hookupEliminateCommanderButtons();\n this.hookupPlayerLifeIncrementButtons();\n this.hookupCommanderDamageIncrementButtons();\n */\n }\n static hookupResetButton() {\n const resetGameButton = document.querySelector('header.game-header .header-right .btn-tcg.btn-tcg-secondary');\n if (resetGameButton) {\n resetGameButton.addEventListener('click', PageMtgGame.resetGame);\n }\n }\n static hookupPlayerCountInput() {\n const playerCountInput = document.getElementById('playerCount');\n if (playerCountInput) {\n playerCountInput.addEventListener('change', PageMtgGame.updatePlayerSetup);\n }\n }\n hookupStartGameButton() {\n const startGameButton = document.querySelector('.setup-section .setup-actions .btn-tcg');\n if (startGameButton) {\n startGameButton.addEventListener('click', () => { this.startGame(); });\n }\n }\n /*\n hookupCommanderDeathIncrementButtons() {\n const commanderDeathIncremementButtons = document.querySelectorAll('#players-grid .player-card .commander-deaths .death-btn');\n if (commanderDeathIncremementButtons) {\n commanderDeathIncremementButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.changeCommanderDeaths);\n });\n }\n }\n hookupEliminateCommanderButtons() {\n const eliminateCommanderButtons = document.querySelector('#players-grid .player-card .eliminate-btn');\n if (eliminateCommanderButtons) {\n eliminateCommanderButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.toggleEliminate);\n });\n }\n }\n hookupPlayerLifeIncrementButtons() {\n const playerLifeIncrementButtons = document.querySelector('#players-grid .player-card .eliminate-btn');\n if (playerLifeIncrementButtons) {\n playerLifeIncrementButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.changeLife);\n });\n }\n }\n hookupCommanderDamageIncrementButtons() {\n const commanderDamageIncrementButtons = document.querySelector('#players-grid .player-card .eliminate-btn');\n if (commanderDamageIncrementButtons) {\n commanderDamageIncrementButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.changeCommanderDamage);\n });\n }\n }\n */\n\n async loadGameFromServer() {\n console.log(\"loading game from server\");\n try {\n // Fetch players, rounds, and damage records from API\n const [playersResponse, roundsResponse, damageResponse] = await Promise.all([\n API.getGamePlayers(gameId)\n , API.getGameRounds(gameId)\n , API.getGameDamageRecords(gameId)\n ]);\n console.log({ playersResponse, damageResponse });\n\n let setupSection = document.getElementById('setupSection');\n let gameSection = document.getElementById('gameSection');\n setupSection.classList.remove('hidden');\n gameSection.classList.add('hidden');\n\n if (playersResponse.status !== 'success') {\n console.error('Failed to load players:', playersResponse.message);\n return;\n }\n\n const savedPlayers = playersResponse.data || [];\n const savedRounds = roundsResponse.status === 'success' ? (roundsResponse.data || []) : [];\n const savedDamageRecords = damageResponse.status === 'success' ? (damageResponse.data || []) : [];\n \n players = savedPlayers;\n rounds = savedRounds;\n damageRecords = savedDamageRecords;\n\n if (savedPlayers.length === 0) {\n // No players yet, show setup section\n return;\n }\n\n // Hide setup, show game\n setupSection.classList.add('hidden');\n gameSection.classList.remove('hidden');\n\n console.log({ savedPlayers, damageRecords });\n\n // Render players to DOM\n this.renderPlayers();\n\n } catch (error) {\n console.error('Error loading game from server:', error);\n }\n }\n\n renderPlayers() {\n const grid = document.getElementById('playersGrid');\n grid.innerHTML = '';\n\n // Build a damage lookup: { playerId: { fromPlayerId: damageAmount } }\n /*\n const damageLookup = {};\n damageRecords.forEach(damage => {\n if (!damageLookup[damage.player_id]) {\n damageLookup[damage.player_id] = {};\n }\n if (damage.received_from_commander_player_id) {\n damageLookup[damage.player_id][damage.received_from_commander_player_id] = damage.health_change || 0;\n }\n });\n */\n const latestRoundId = PageMtgGame.getLatestRoundId();\n\n players.forEach((player, index) => {\n // Build display name: prefer user_name + deck_name, fallback to player name\n const playerId = player[attrPlayerId];\n let displayName = PageMtgGame.makePlayerDisplayName(playerId, index);\n let damagePlayerPairs = [...players, { [attrPlayerId]: null }];\n let maxCommanderDamageReceived = 0;\n damagePlayerPairs.forEach(damagePlayerPair => {\n const sourceId = damagePlayerPair[attrPlayerId];\n const filteredPlayerDamages = damageRecords.filter(damage => (\n damage[attrRoundId] == latestRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == sourceId\n )); //[playerId] || {};\n if (filteredPlayerDamages.length == 0) {\n damageRecords.push(PageMtgGame.makeDefaultGameRoundPlayerDamage(playerId, sourceId));\n }\n maxCommanderDamageReceived = Math.max(\n maxCommanderDamageReceived\n , damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == sourceId\n ))\n .map(damage => damage[flagHealthChange])\n .reduce((acc, curr) => acc + curr, 0)\n );\n });\n\n const totalDamage = damageRecords.filter(damage => ( damage[attrPlayerId] == playerId ))\n .map(damage => damage[flagHealthChange])\n .reduce((acc, curr) => acc + curr, 0);\n let life = startingLife + totalDamage;\n\n let isEliminatedByForce = damageRecords.filter(damage => ( damage[attrPlayerId] == playerId ))\n .map(damage => damage[flagIsEliminated])\n .some(Boolean);\n const isEliminated = (\n isEliminatedByForce\n || !player[flagActive]\n || life < 1\n || maxCommanderDamageReceived >= 21\n );\n\n const playerOwnDamage = damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n && damage[attrRoundId] == latestRoundId\n ))[0];\n const card = document.createElement('div');\n card.className = `player-card ${isEliminated ? 'eliminated' : ''}`;\n card.style.animationDelay = `${index * 0.1}s`;\n card.dataset.playerId = playerId;\n card.dataset.userName = player.user_name || '';\n card.dataset.deckName = player.deck_name || '';\n\n card.innerHTML = `\n
\n
\n
${displayName}
\n
\n Commander Deaths:\n
\n \n ${playerOwnDamage[flagCommanderDeaths]}\n \n
\n
\n
\n \n
\n\n
\n \n
${life}
\n
\n \n \n \n \n
\n
\n\n
\n
Commander Damage Taken
\n
\n ${PageMtgGame.renderCommanderDamageRows(\n playerId // playerId\n , player[attrDeckId] // deckId\n )}\n
\n
\n `;\n\n grid.appendChild(card);\n });\n\n // Hookup all event handlers\n this.hookupPlayerCardEvents();\n }\n static makeDefaultGameRoundPlayerDamage(playerId, receivedFromCommanderPlayerId) {\n let roundId = PageMtgGame.getLatestRoundId();\n return {\n [attrDamageId]: -1 - damageRecords.length\n , [attrRoundId]: roundId\n , [attrPlayerId]: playerId\n , [attrReceivedFromCommanderPlayerId]: receivedFromCommanderPlayerId\n , [flagHealthChange]: 0\n , [flagCommanderDeaths]: 0\n , [flagActive]: true\n };\n }\n static getLatestRoundId() {\n let roundId = -1;\n if (rounds.length > 0) {\n let highestRoundDisplayOrder = Math.max(rounds.map(round => { return round[flagDisplayOrder]; }));\n roundId = rounds.filter(round => round[flagDisplayOrder] == highestRoundDisplayOrder)[0][attrRoundId];\n console.log({ \"method\": \"getLatestRoundId\", highestRoundDisplayOrder, roundId });\n }\n return roundId;\n }\n static makePlayerDisplayName(playerId, index) {\n if (playerId == null) {\n return `Player ${index + 1}`;\n }\n const player = players.filter(player => player[attrPlayerId] == playerId)[0];\n const deckId = player[attrDeckId];\n const deck = (deckId == null) ? null : decks.filter(deck => deck[attrDeckId] == deckId)[0];\n const user = (playerId == null) ? null : users[player[attrUserId]];\n return player[flagName] || `${(user == null) ? 'Error' : user[flagName]} - ${(deck == null) ? 'Error' : deck[flagName]}`;\n }\n static renderCommanderDamageRows(playerId) {\n // const roundId = PageMtgGame.getLatestRoundId();\n return players\n .filter(otherPlayer => otherPlayer[attrPlayerId] !== playerId)\n .map(otherPlayer => {\n const sourceId = otherPlayer[attrPlayerId];\n let otherPlayerDisplayName = PageMtgGame.makePlayerDisplayName(sourceId);\n const totalDamage = damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == sourceId\n ))\n .map(damage => -damage[flagHealthChange])\n .reduce((acc, curr) => acc + curr, 0);\n const isLethal = totalDamage >= 21;\n\n return `\n
\n from ${otherPlayerDisplayName}\n
\n \n \n ${totalDamage}\n \n
\n
\n `;\n })\n .join('');\n }\n\n hookupPlayerCardEvents() {\n // Life buttons\n let lifeButtonSelector = '.life-btn';\n Events.hookupEventHandler(\"click\", lifeButtonSelector, (event, button) => {\n const playerId = button.dataset.playerId;\n const amount = parseInt(button.dataset.amount);\n const latestRoundId = PageMtgGame.getLatestRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == latestRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n this.changeLife(\n playerId // playerId\n , amount // amount\n , true // updateDamage\n , damageIndex // damageIndex\n );\n });\n\n // Commander death buttons\n let commanderDeathButtonSelector = '.death-btn';\n Events.hookupEventHandler(\"click\", commanderDeathButtonSelector, (event, button) => {\n const playerId = button.dataset.playerId;\n const isMinusButton = button.classList.contains('death-minus');\n const amount = (isMinusButton) ? -1 : 1;\n this.changeCommanderDeaths(playerId, amount);\n });\n\n // Commander damage buttons\n let commmanderDamageButtonSelector = '.damage-btn';\n Events.hookupEventHandler(\"click\", commmanderDamageButtonSelector, (event, button) => {\n const playerId = button.dataset.playerId;\n const sourceId = button.dataset.sourceId;\n const isMinusButton = button.classList.contains('damage-minus');\n const amount = (isMinusButton) ? -1 : 1;\n this.changeCommanderDamage(playerId, sourceId, amount);\n });\n\n // Eliminate buttons\n let eliminatePlayerButtonSelector = '.eliminate-btn';\n Events.hookupEventHandler(\"click\", eliminatePlayerButtonSelector, (event, button) => {\n const playerId = button.dataset.playerId;\n this.toggleEliminate(playerId);\n });\n }\n\n changeLife(playerId, amount, updateDamage = false, damageIndex = null) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n if (!card || card.classList.contains('eliminated')) return;\n\n const lifeInput = card.querySelector(`.life-value[data-player-id=\"${playerId}\"]`);\n const lifeDisplay = card.querySelector(`.life-display[data-player-id=\"${playerId}\"]`);\n\n const currentLife = parseInt(lifeInput.value) || 0;\n const newLife = Math.max(0, currentLife + amount);\n DOM.setElementAttributeValueCurrent(lifeDisplay, newLife);\n DOM.isElementDirty(lifeDisplay);\n lifeInput.value = newLife;\n lifeDisplay.textContent = newLife;\n\n if (updateDamage) {\n damageRecords[damageIndex][flagHealthChange] += amount;\n }\n\n // PageMtgGame.debouncedSave();\n this.updateAndToggleShowButtonsSaveCancel();\n }\n\n changeCommanderDamage(playerId, sourceId, amount) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n if (!card || card.classList.contains('eliminated')) return;\n\n const damageInput = card.querySelector(`.damage-value[data-player-id=\"${playerId}\"][data-source-id=\"${sourceId}\"]`);\n const damageDisplay = card.querySelector(`.damage-display[data-player-id=\"${playerId}\"][data-source-id=\"${sourceId}\"]`);\n\n const currentDamage = parseInt(damageInput.value) || 0;\n const newDamage = Math.max(0, currentDamage + amount);\n amount = newDamage - currentDamage;\n DOM.setElementAttributeValueCurrent(damageDisplay, newDamage);\n DOM.isElementDirty(damageDisplay);\n damageInput.value = newDamage;\n damageDisplay.textContent = newDamage;\n\n // Update lethal class\n if (newDamage >= 21) {\n damageDisplay.classList.add('lethal');\n } else {\n damageDisplay.classList.remove('lethal');\n }\n\n const latestRoundId = PageMtgGame.getLatestRoundId();\n const damageIndex = damageRecords.findIndex(damageRecord => (\n damage[attrRoundId] == latestRoundId\n && damageRecord[attrPlayerId] == playerId\n && damageRecord[attrReceivedFromCommanderPlayerId] == sourceId\n ));\n damageRecords[damageIndex][flagHealthChange] -= amount;\n \n this.changeLife(\n playerId // playerId\n , -amount // amount\n , false // updateDamage\n , damageIndex // damageIndex\n );\n // PageMtgGame.debouncedSave();\n }\n\n changeCommanderDeaths(playerId, amount) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n if (!card || card.classList.contains('eliminated')) return;\n\n const deathDisplay = card.querySelector(`.death-display[data-player-id=\"${playerId}\"]`);\n const currentDeaths = parseInt(deathDisplay.textContent) || 0;\n const newDeaths = Math.max(0, currentDeaths + amount);\n\n deathDisplay.textContent = newDeaths;\n DOM.setElementAttributeValueCurrent(deathDisplay, newDeaths);\n DOM.isElementDirty(deathDisplay);\n\n const latestRoundId = PageMtgGame.getLatestRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == latestRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n damageRecords[damageIndex][flagCommanderDeaths] = newDeaths;\n\n // PageMtgGame.debouncedSave();\n this.updateAndToggleShowButtonsSaveCancel();\n }\n\n toggleEliminate(playerId) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n if (!card) return;\n\n const eliminateBtn = card.querySelector(`.eliminate-btn[data-player-id=\"${playerId}\"]`);\n const wasEliminated = card.classList.contains('eliminated');\n\n if (wasEliminated) {\n card.classList.remove('eliminated');\n eliminateBtn.textContent = 'Eliminate';\n } else {\n card.classList.add('eliminated');\n eliminateBtn.textContent = 'Revive';\n }\n const isEliminated = card.classList.contains('eliminated');\n\n const latestRoundId = PageMtgGame.getLatestRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == latestRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n damageRecords[damageIndex][flagIsEliminated] = isEliminated;\n\n DOM.setElementAttributeValueCurrent(eliminateBtn, isEliminated);\n DOM.isElementDirty(eliminateBtn);\n // PageMtgGame.debouncedSave();\n this.updateAndToggleShowButtonsSaveCancel();\n }\n\n static updatePlayerSetup() {\n const playerCountInput = document.getElementById('playerCount');\n if (!playerCountInput) return;\n\n const playerCount = parseInt(playerCountInput.value);\n const grid = document.getElementById('playerSetupGrid');\n if (!grid) return;\n\n grid.innerHTML = '';\n const wrapperTemplate = document.getElementById(playerSetupWrapperTemplateId);\n let player, wrapper, wrapperHeading, userDdl, deckDdl, nameInput;\n for (let i = 0; i < playerCount; i++) {\n if (i < players.length) {\n player = players[i];\n }\n else {\n player = PageMtgGame.makeDefaultGamePlayer();\n players.push(player);\n }\n wrapper = wrapperTemplate.cloneNode(true);\n wrapper.removeAttribute(\"id\");\n wrapper.setAttribute(flagDisplayOrder, i + 1);\n wrapper.classList.remove(flagIsCollapsed);\n wrapperHeading = wrapper.querySelector('label');\n wrapperHeading.innerText = 'Player ' + (i + 1);\n userDdl = wrapper.querySelector('.playerUser select');\n DOM.setElementValuesCurrentAndPrevious(userDdl, player[attrUserId]);\n deckDdl = wrapper.querySelector('.playerDeck select');\n DOM.setElementValuesCurrentAndPrevious(deckDdl, player[attrDeckId]);\n nameInput = wrapper.querySelector('.playerName input');\n DOM.setElementValuesCurrentAndPrevious(nameInput, player[flagName]);\n console.log('player: ', player);\n grid.appendChild(wrapper);\n }\n }\n static makeDefaultGamePlayer() {\n return {\n [attrPlayerId]: -players.length\n , [attrGameId]: gameId\n , [attrUserId]: user[attrUserId]\n , [attrDeckId]: 0\n , [flagName]: \"\"\n , [flagNotes]: null\n , [flagDisplayOrder]: players.length\n , [flagActive]: true\n };\n }\n\n async startGame() {\n const playerCountInput = document.getElementById('playerCount');\n if (!playerCountInput) return;\n\n const playerCount = parseInt(playerCountInput.value);\n const playersToSave = [];\n\n let playerSetupWrapper, playerId, player, userDdl, userId, deckDdl, deckId, nameInput, name;\n for (let i = 0; i < playerCount; i++) {\n playerSetupWrapper = document.querySelector('.player-name-input-wrapper[' + flagDisplayOrder + '=\"' + (i + 1) + '\"]');\n userDdl = playerSetupWrapper.querySelector('.playerUser select');\n deckDdl = playerSetupWrapper.querySelector('.playerDeck select');\n nameInput = playerSetupWrapper.querySelector('.playerName input');\n \n userId = DOM.getElementValueCurrent(userDdl);\n deckId = DOM.getElementValueCurrent(deckDdl);\n name = nameInput ? nameInput.value.trim() || `Player ${i + 1}` : `Player ${i + 1}`;\n\n playerId = playerSetupWrapper.getAttribute(attrPlayerId);\n player = players.filter(p => p[attrPlayerId] == playerId)[0];\n playersToSave.push({\n ...player\n , [attrGameId]: gameId\n , [attrUserId]: userId\n , [attrDeckId]: deckId\n , [flagName]: name\n , [flagDisplayOrder]: i + 1\n , [flagActive]: true\n });\n }\n\n // Save players to server\n const comment = 'Save players';\n const self = this;\n API.saveGamePlayers(playersToSave, null, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n self.leave();\n window.location.reload();\n }\n else {\n console.error('Failed to save players:', data[flagMessage]);\n PageMtgGame.showError('An error occurred while creating the game');\n }\n })\n .catch(error => {\n console.error('Error creating game:', error);\n PageMtgGame.showError('An error occurred while creating the game');\n })\n .finally(() => {\n });\n }\n\n static resetGame() {\n if (confirm('Are you sure you want to start a new game? Current game will be lost.')) {\n localStorage.removeItem(`mtgGame_${gameId}`);\n window.location.href = hashPageGames;\n }\n }\n\n async saveGame() {\n const gameState = {\n [flagPlayer]: players\n , [flagRound]: rounds\n , [flagDamage]: damageRecords\n };\n /*\n if (gameState[flagPlayer].length > 0) {\n localStorage.setItem(`mtgGame_${gameId}`, JSON.stringify(gameState));\n PageMtgGame.showSaveIndicator();\n }\n */\n const comment = 'Save players';\n const self = this;\n API.saveGameRoundPlayerDamages(rounds, damageRecords, null, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n self.leave();\n window.location.reload();\n }\n else {\n console.error('Failed to save players:', data[flagMessage]);\n PageMtgGame.showError('An error occurred while creating the game');\n }\n })\n .catch(error => {\n console.error('Error creating game:', error);\n PageMtgGame.showError('An error occurred while creating the game');\n })\n .finally(() => {\n });\n }\n /*\n static debouncedSave() {\n clearTimeout(PageMtgGame._saveTimeout);\n PageMtgGame._saveTimeout = setTimeout(() => PageMtgGame.saveGame(), 500);\n }\n\n static showSaveIndicator() {\n const indicator = document.getElementById('saveIndicator');\n if (indicator) {\n indicator.classList.add('show');\n setTimeout(() => {\n indicator.classList.remove('show');\n }, 2000);\n }\n }\n */\n saveRecordsTableDirty() {\n this.saveGame();\n }\n static showError(message) {\n // Check if there's an overlay error element\n const errorOverlay = document.getElementById('overlayError');\n if (errorOverlay) {\n const errorLabel = errorOverlay.querySelector('.error-message, #labelError');\n if (errorLabel) {\n errorLabel.textContent = message;\n }\n errorOverlay.classList.remove('hidden');\n errorOverlay.style.display = 'flex';\n } else {\n // Fallback to alert\n alert(message);\n }\n }\n\n leave() {\n super.leave();\n }\n}\n\n// Static timeout reference for debouncing\nPageMtgGame._saveTimeout = null;\n","\nimport API from \"../../api.js\";\nimport TableBasePage from \"../base_table.js\";\nimport Utils from \"../../lib/utils.js\";\n\nexport default class PageMtgGames extends TableBasePage {\n static hash = hashPageMtgGames;\n static attrIdRowObject = attrGameId;\n callSaveTableContent = API.saveGame;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTcgGames();\n }\n hookupTcgGames() {\n PageMtgGames.initGamesPage();\n }\n static initGamesPage() {\n // Initialize form submission\n const newGameForm = document.getElementById('newGameForm');\n if (newGameForm) {\n newGameForm.addEventListener('submit', PageMtgGames.handleNewGameSubmit);\n }\n\n // Initialize filter form\n const filterForm = document.getElementById('formFilters');\n if (filterForm) {\n filterForm.addEventListener('submit', PageMtgGames.handleFilterSubmit);\n }\n\n // Close modal on escape key\n document.addEventListener('keydown', function(e) {\n if (e.key === 'Escape') {\n PageMtgGames.hideNewGameForm();\n }\n });\n\n // Close modal on backdrop click\n const modal = document.getElementById('newGameModal');\n if (modal) {\n modal.addEventListener('click', function(e) {\n if (e.target === modal) {\n PageMtgGames.hideNewGameForm();\n }\n });\n }\n\n // Button onclicks\n const newGameButton = document.getElementById('btnNewGame');\n if (newGameButton) {\n newGameButton.addEventListener('click', PageMtgGames.showNewGameForm);\n }\n const cancelNewGameButtons = document.querySelectorAll(\n '#newGameForm .form-actions .btn-tcg.btn-tcg-secondary'\n + ','\n + '#newGameModal .modal-content .modal-header .modal-close'\n );\n if (cancelNewGameButtons.length > 0) {\n cancelNewGameButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGames.hideNewGameForm);\n });\n }\n\n }\n static showNewGameForm() {\n const modal = document.getElementById('newGameModal');\n if (modal) {\n modal.classList.remove('hidden');\n document.body.style.overflow = 'hidden';\n\n // Focus on first input\n const firstInput = modal.querySelector('input, select');\n if (firstInput) {\n firstInput.focus();\n }\n }\n }\n static hideNewGameForm() {\n const modal = document.getElementById('newGameModal');\n if (modal) {\n modal.classList.add('hidden');\n document.body.style.overflow = '';\n\n // Reset form\n const form = document.getElementById('newGameForm');\n if (form) {\n form.reset();\n }\n }\n }\n static async handleNewGameSubmit(e) {\n e.preventDefault();\n\n const form = e.target;\n const formData = new FormData(form);\n\n const gameType = formData.get('game_type');\n const gameData = {\n [attrGameId]: -1\n , [flagIsCommander]: gameType === 'commander'\n , [flagIsDraft]: gameType === 'draft'\n , [flagIsSealed]: gameType === 'sealed'\n , [flagLocationName]: formData.get(flagLocationName) || null\n , [flagNotes]: formData.get(flagNotes) || null\n , [flagStartOn]: new Date().toISOString()\n , [flagStartingLife]: formData.get(flagStartingLife) || 40\n , [flagActive]: true\n };\n\n const submitBtn = form.querySelector('button[type=\"submit\"]');\n const originalText = submitBtn.textContent;\n submitBtn.textContent = 'Creating...';\n submitBtn.disabled = true;\n\n const games = [gameData];\n const comment = 'Create new game';\n debugger;\n API.saveGame(games, form, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n this.callFilterTableContent(gameData.game_id);\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \" + data[flagMessage]);\n // OverlayError.show(data[flagMessage]);\n window.location.reload();\n }\n })\n .catch(error => {\n console.error('Error creating game:', error);\n PageMtgGames.showError('An error occurred while creating the game');\n })\n .finally(() => {\n submitBtn.textContent = originalText;\n submitBtn.disabled = false;\n });\n \n }\n callFilterTableContent(gameId) {\n const gamePageHash = `${hashPageGame}/${gameId}`;\n let filtersJson = {};\n Utils.consoleLogIfNotProductionEnvironment(\"callFilterTableContent\");\n this.leave();\n API.goToHash(gamePageHash, filtersJson);\n }\n static handleFilterSubmit(e) {\n // Let the form submit normally - it will reload with query params\n // You can add client-side filtering here if needed\n }\n static getCSRFToken() {\n // Try meta tag first\n const metaTag = document.querySelector('meta[name=\"csrf-token\"]');\n if (metaTag) {\n return metaTag.getAttribute('content');\n }\n\n // Try hidden input\n const hiddenInput = document.querySelector('input[name=\"csrf_token\"]');\n if (hiddenInput) {\n return hiddenInput.value;\n }\n\n // Try cookie\n const cookies = document.cookie.split(';');\n for (let cookie of cookies) {\n const [name, value] = cookie.trim().split('=');\n if (name === 'csrf_token') {\n return value;\n }\n }\n\n return '';\n }\n static showError(message) {\n // Check if there's an overlay error element\n const errorOverlay = document.getElementById('overlayError');\n if (errorOverlay) {\n const errorLabel = errorOverlay.querySelector('.error-message, #labelError');\n if (errorLabel) {\n errorLabel.textContent = message;\n }\n errorOverlay.classList.remove('hidden');\n errorOverlay.style.display = 'flex';\n } else {\n // Fallback to alert\n alert(message);\n }\n }\n static showSuccess(message) {\n // Could implement a toast notification here\n console.log('Success:', message);\n }\n static joinGame(gameId) {\n window.location.href = `${hashPageGame}/${gameId}`;\n }\n static async deleteGame(gameId) {\n if (!confirm('Are you sure you want to delete this game? This action cannot be undone.')) {\n return;\n }\n\n try {\n const gameData = {\n 'game_id': gameId,\n 'active': false\n };\n\n const response = await fetch(hashSaveGame, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRFToken': PageMtgGames.getCSRFToken()\n },\n body: JSON.stringify({\n [flagGame]: [gameData],\n 'form-filters': {},\n 'comment': 'Game deleted'\n })\n });\n\n const result = await response.json();\n\n if (result.status === 'success') {\n // Remove the row from the table\n const row = document.querySelector(`tr[data-game-id=\"${gameId}\"]`);\n if (row) {\n row.style.animation = 'tcg-fadeOut 0.3s ease-out forwards';\n setTimeout(() => row.remove(), 300);\n }\n } else {\n PageMtgGames.showError(result.message || 'Failed to delete game');\n }\n } catch (error) {\n console.error('Error deleting game:', error);\n PageMtgGames.showError('An error occurred while deleting the game');\n }\n }\n\n toggleShowButtonsSaveCancel() {}\n leave() {\n super.leave();\n }\n}\n","\n\nimport API from \"../../api.js\";\nimport BasePage from \"../base.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\n\nexport default class PageMtgHome extends BasePage {\n static hash = hashPageMtgHome;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTcgHome();\n }\n\n hookupTcgHome() {\n }\n\n leave() {\n super.leave();\n }\n}\n","import BasePage from \"../base.js\";\n\nexport default class PageAccessibilityReport extends BasePage {\n static hash = hashPageAccessibilityReport;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","import BasePage from \"../base.js\";\n\nexport default class PageAccessibilityStatement extends BasePage {\n static hash = hashPageAccessibilityStatement;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","\nimport BasePage from \"../base.js\";\n\nexport default class PageLicense extends BasePage {\n static hash = hashPageLicense;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}","\nimport BasePage from \"../base.js\";\n\nexport default class PagePrivacyPolicy extends BasePage {\n static hash = hashPagePrivacyPolicy;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}","import BasePage from \"../base.js\";\n\nexport default class PageRetentionSchedule extends BasePage {\n static hash = hashPageDataRetentionSchedule;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","\n\nexport default class MixinPage {\n constructor(pageCurrent) {\n this.page = pageCurrent;\n }\n\n initialize() {\n Utils.consoleLogIfNotProductionEnvironment('hookup start for ', this.page.hash);\n this.hookupFilters();\n this.hookupLocalStorage();\n }\n hookupFilters() {\n }\n hookupLocalStorage() {\n \n }\n \n leave() {}\n}\n","\nimport MixinPage from \"./mixin.js\";\n\nexport default class TableMixinPage extends MixinPage {\n constructor(pageCurrent) {\n super(pageCurrent);\n }\n initialize() {\n super.initialize();\n this.hookupFilters();\n this.hookupTable();\n }\n hookupFilters() {\n // Implement filter-specific functionality here\n }\n hookupTable() {\n // Implement table-specific functionality here\n }\n}","\nimport API from \"../../api.js\";\nimport TableMixinPage from \"../mixin_table.js\";\nimport DOM from \"../../dom.js\";\nimport TableBasePage from \"../base_table.js\";\n\nexport default class PageUser extends TableBasePage {\n static hash = hashPageUserAccount;\n static attrIdRowObject = attrUserId;\n callSaveTableContent = API.saveUsers;\n\n constructor(router) {\n super(router);\n this.mixin = new TableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTableMain();\n }\n\n\n hookupFilters() {\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getTableRecords(dirtyOnly = false) {\n dirtyOnly = true;\n let container = document.querySelector('.' + flagCard + '.' + flagUser);\n return [this.getJsonRow(container)];\n }\n getJsonRow(container) {\n console.log(\"getJsonRow: \", container);\n if (container == null) return;\n let inputFirstname = container.querySelector(' #' + flagFirstname);\n let inputSurname = container.querySelector(' #' + flagSurname);\n let inputEmail = container.querySelector(' #' + flagEmail);\n\n let idUser = container.getAttribute(attrUserId);\n \n let jsonRow = {\n [attrUserAuth0Id]: null\n , [flagEmail]: null\n , [flagIsEmailVerified]: null\n , [flagIsSuperUser]: null\n , [flagCanAdminUser]: null\n };\n\n jsonRow[attrUserId] = idUser;\n jsonRow[flagFirstname] = DOM.getElementAttributeValueCurrent(inputFirstname);\n jsonRow[flagSurname] = DOM.getElementAttributeValueCurrent(inputSurname);\n jsonRow[flagEmail] = DOM.getElementAttributeValueCurrent(inputEmail);\n return jsonRow;\n }\n \n initialiseRowNew(tbody, row) {\n }\n postInitialiseRowNewCallback(tbody) {\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsFirstname();\n this.hookupFieldsSurname();\n this.hookupFieldsEmail();\n }\n hookupFieldsFirstname() {\n this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagFirstname);\n }\n hookupFieldsSurname() {\n this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagSurname);\n }\n hookupFieldsEmail() {\n this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagEmail);\n }\n\n leave() {\n super.leave();\n }\n}\n","\nimport API from \"../../api\";\nimport TableMixinPage from \"../mixin_table\";\nimport DOM from \"../../dom\";\nimport TableBasePage from \"../base_table\";\nimport Utils from \"../../lib/utils\";\n\nexport default class PageUsers extends TableBasePage {\n static hash = hashPageUserAccounts;\n static attrIdRowObject = attrUserId;\n callSaveTableContent = API.saveUsers;\n\n constructor(router) {\n super(router);\n this.mixin = new TableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n hookupFilters() {\n this.sharedHookupFilters();\n this.hookupFilterActive();\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n if (row == null) return;\n let inputFirstname = row.querySelector('td.' + flagFirstname + ' .' + flagFirstname);\n let inputSurname = row.querySelector('td.' + flagSurname + ' .' + flagSurname);\n let inputNotes = row.querySelector('td.' + flagNotes + ' .' + flagNotes);\n let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);\n\n let jsonRow = {\n [attrUserAuth0Id]: null\n , [flagEmail]: null\n , [flagIsEmailVerified]: null\n , [flagIsSuperUser]: null\n , [flagCanAdminUser]: null\n };\n jsonRow[attrUserId] = row.getAttribute(attrUserId);\n jsonRow[flagFirstname] = DOM.getElementAttributeValueCurrent(inputFirstname);\n jsonRow[flagSurname] = DOM.getElementAttributeValueCurrent(inputSurname);\n jsonRow[flagNotes] = DOM.getElementAttributeValueCurrent(inputNotes);\n jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);\n\n console.log(\"jsonRow\");\n console.log(jsonRow);\n\n return jsonRow;\n }\n \n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n let newRows = tbody.querySelectorAll('tr.' + flagRowNew);\n let newestRow = newRows[0];\n let clickableElementsSelector = [].join('');\n newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {\n clickableElement.click();\n });\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsFirstname();\n this.hookupFieldsSurname();\n this.hookupFieldsNotesTable();\n this.hookupFieldsActive();\n }\n hookupFieldsFirstname() {\n this.hookupChangeHandlerTableCells(flagFirstname);\n }\n hookupFieldsSurname() {\n this.hookupChangeHandlerTableCells(flagSurname);\n }\n\n leave() {\n super.leave();\n }\n}\n","\n// Pages\n// Core\n// TCG\nimport PageMtgGame from './pages/tcg/mtg_game.js';\nimport PageMtgGames from './pages/tcg/mtg_games.js';\nimport PageMtgHome from './pages/tcg/mtg_home.js';\n// Legal\nimport PageAccessibilityReport from './pages/legal/accessibility_report.js';\nimport PageAccessibilityStatement from './pages/legal/accessibility_statement.js';\nimport PageLicense from './pages/legal/license.js';\nimport PagePrivacyPolicy from './pages/legal/privacy_policy.js';\nimport PageRetentionSchedule from './pages/legal/retention_schedule.js';\n// User\n// import PageUserLogin from './pages/user/login.js';\n// import PageUserLogout from './pages/user/logout.js';\nimport PageUser from './pages/user/user.js';\nimport PageUsers from './pages/user/users.js';\n\nimport API from './api.js';\nimport DOM from './dom.js';\nimport Utils from './lib/utils.js';\n\n\nexport default class Router {\n constructor() {\n // Pages\n this.pages = {};\n // Core\n // TCG\n this.pages[hashPageMtgGame] = { name: 'PageMtgGame', module: PageMtgGame };\n this.pages[hashPageMtgGames] = { name: 'PageMtgGames', module: PageMtgGames };\n this.pages[hashPageMtgHome] = { name: 'PageMtgGame', module: PageMtgHome };\n // Legal\n this.pages[hashPageAccessibilityStatement] = { name: 'PageAccessibilityStatement', module: PageAccessibilityStatement };\n this.pages[hashPageDataRetentionSchedule] = { name: 'PageDataRetentionSchedule', module: PageRetentionSchedule };\n this.pages[hashPageLicense] = { name: 'PageLicense', module: PageLicense };\n this.pages[hashPagePrivacyPolicy] = { name: 'PagePrivacyPolicy', module: PagePrivacyPolicy };\n // User\n // this.pages[hashPageUserLogin] = { name: 'PageUserLogin', module: PageUserLogin }; // pathModule: './pages/user/login.js' };\n // this.pages[hashPageUserLogout] = { name: 'PageUserLogout', module: PageUserLogout }; // pathModule: './pages/user/logout.js' };\n this.pages[hashPageUserAccount] = { name: 'PageUser', module: PageUser };\n this.pages[hashPageUserAccounts] = { name: 'PageUsers', module: PageUsers };\n // Routes\n this.routes = {};\n // Core\n // TCG\n this.routes[hashPageMtgGame] = (isPopState = false) => this.navigateToHash(hashPageMtgGame, isPopState);\n this.routes[hashPageMtgGames] = (isPopState = false) => this.navigateToHash(hashPageMtgGames, isPopState);\n this.routes[hashPageMtgHome] = (isPopState = false) => this.navigateToHash(hashPageMtgHome, isPopState);\n // Legal\n this.routes[hashPageAccessibilityStatement] = (isPopState = false) => this.navigateToHash(hashPageAccessibilityStatement, isPopState);\n this.routes[hashPageDataRetentionSchedule] = (isPopState = false) => this.navigateToHash(hashPageDataRetentionSchedule, isPopState);\n this.routes[hashPageLicense] = (isPopState = false) => this.navigateToHash(hashPageLicense, isPopState);\n this.routes[hashPagePrivacyPolicy] = (isPopState = false) => this.navigateToHash(hashPagePrivacyPolicy, isPopState);\n // User\n // this.routes[hashPageUserLogin] = (isPopState = false) => this.navigateToHash(hashPageUserLogin, isPopState);\n // this.routes[hashPageUserLogout] = (isPopState = false) => this.navigateToHash(hashPageUserLogout, isPopState);\n this.routes[hashPageUserAccount] = (isPopState = false) => this.navigateToHash(hashPageUserAccount, isPopState);\n this.routes[hashPageUserAccounts] = (isPopState = false) => this.navigateToHash(hashPageUserAccounts, isPopState);\n this.initialize();\n }\n loadPage(hashPage, isPopState = false) {\n const PageClass = this.getClassPageFromHash(hashPage);\n this.currentPage = new PageClass(this);\n this.currentPage.initialize(isPopState);\n window.addEventListener('beforeunload', () => this.currentPage.leave());\n }\n getClassPageFromHash(hashPage) {\n \n let pageJson = this.pages[hashPage];\n try {\n const module = pageJson.module;\n return module; \n }\n catch (error) {\n Utils.consoleLogIfNotProductionEnvironment(\"this.pages: \", this.pages);\n console.error('Page not found:', hashPage);\n throw error;\n }\n }\n initialize() {\n window.addEventListener('popstate', this.handlePopState.bind(this));\n }\n handlePopState(event) {\n this.loadPageCurrent();\n }\n loadPageCurrent() {\n const hashPageCurrent = DOM.getHashPageCurrent();\n this.loadPage(hashPageCurrent);\n }\n navigateToHash(hash, data = null, params = null, isPopState = false) {\n let url = API.getUrlFromHash(hash, params);\n history.pushState({data: data, params: params}, '', hash);\n API.goToUrl(url, data);\n }\n \n navigateToUrl(url, data = null, appendHistory = true) {\n // this.beforeLeave();\n if (appendHistory) history.pushState(data, '', url);\n url = API.parameteriseUrl(url, data);\n API.goToUrl(url);\n }\n\n static loadPageBodyFromResponse(response) {\n DOM.loadPageBody(response.data);\n }\n}\n\nexport const router = new Router();\n","\n'use strict';\n\nimport DOM from './dom.js';\nimport Router from './router.js';\n\n\nclass App {\n constructor() {\n this.dom = new DOM();\n this.router = new Router();\n }\n\n initialize() {\n this.setupEventListeners();\n this.start();\n }\n\n setupEventListeners() {\n // document.addEventListener('click', this.handleGlobalClick.bind(this));\n }\n\n handleGlobalClick(event) {\n }\n\n start() {\n this.initPageCurrent();\n }\n\n initPageCurrent() {\n this.router.loadPageCurrent();\n }\n \n}\n\nconst app = new App();\n\nfunction domReady(fn) {\n if (document.readyState !== 'loading') {\n fn();\n } else {\n document.addEventListener('DOMContentLoaded', fn);\n }\n}\n\ndomReady(() => {\n app.initialize();\n});\n\nwindow.app = app;\n\nexport default app;","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};"],"names":["Validation","isEmpty","object","undefined","length","isString","trim","i","isValidNumber","value","positiveOnly","isNaN","parseFloat","getDataContentType","params","data","contentType","JSON","stringify","Data","ContentType","arrayContainsItem","array","itemValue","hasItem","isJQueryElementArray","jQuery","document","querySelectorAll","is","isDate","Date","getTime","dictHasKey","d","k","areEqualDicts","dict1","dict2","keys1","Object","keys","keys2","key","imageExists","url","callback","img","Image","onload","onerror","src","toFixedOrDefault","decimalPlaces","defaultValue","toFixed","Utils","DOM","setElementAttributesValuesCurrentAndPrevious","element","setElementAttributeValueCurrent","setElementAttributeValuePrevious","setAttribute","attrValueCurrent","attrValuePrevious","setElementValuesCurrentAndPrevious","setElementValueCurrent","tagName","toUpperCase","type","checked","textContent","setElementValueCurrentIfEmpty","getElementValueCurrent","getCellFromElement","closest","getRowFromElement","flagRow","selector","getClosestParent","parentSelector","parent","parentElement","matches","convertForm2JSON","elementForm","dataForm","containersFilter","flagContainerInput","flagFilter","containerFilter","labelFilter","keyFilter","filter","indexFilter","querySelector","getAttribute","loadPageBody","contentNew","pageBody","idPageBody","innerHTML","getHashPageCurrent","hashPageCurrent","body","dataset","page","updateAndCheckIsElementDirty","isElementDirty","isDirty","handleDirtyElement","toggleElementHasClassnameFlag","flagDirty","elementHasFlag","flag","elementAlreadyHasFlag","classList","contains","add","remove","hasDirtyChildrenContainer","container","hasDirtyChildrenNotDeletedContainer","flagDelete","returnVal","flagButton","flagActive","getElementAttributeValueCurrent","flagCheckbox","flagIsChecked","getElementAttributeValuePrevious","scrollToElement","scrollTop","offset","top","isElementInContainer","containerBounds","getBoundingClientRect","elementBounds","left","height","width","alertError","errorType","errorText","alert","createOptionUnselectedProductVariation","flagProductVariationType","flagNameAttrOptionText","flagName","flagNameAttrOptionValue","attrIdProductVariationType","flagProductVariation","attrIdProductVariation","createOption","optionJson","text","option","createElement","selected","escapeHtml","div","unescapeHtml","html","innerText","API","getCsrfToken","idCSRFToken","request","hashEndpoint","method","getUrlFromHash","csrfToken","options","headers","flagCsrfToken","response","fetch","ok","Error","status","json","error","console","hash","hashPageHome","parameteriseUrl","_pathHost","URLSearchParams","toString","goToUrl","window","location","href","goToHash","loginUser","flagCallback","hashPageUserLogin","saveUsers","users","formFilters","comment","dataRequest","flagFormFilters","flagUser","flagComment","hashSaveUserUser","saveGame","game","flagGame","hashSaveGame","getGamePlayers","gameId","saveGamePlayers","players","flagPlayer","hashSaveGamePlayer","getGameRounds","getGameDamageRecords","saveGameRoundPlayerDamages","rounds","damages","flagDamage","flagRound","hashSaveGameRoundPlayerDamage","BusinessObjects","getOptionJsonFromObjectJsonAndKeys","objectJson","keyText","keyValue","valueSelected","getOptionJsonFromObjectJson","getObjectText","getListObjectsFromIdDictAndCsv","idDict","idCsv","listObjects","ids","split","id","push","Events","initialiseEventHandler","selectorElement","classInitialised","eventHandler","forEach","hookupEventHandler","eventType","flagInitialised","addEventListener","event","stopPropagation","LocalStorage","getLocalStorage","parse","localStorage","getItem","setLocalStorage","newLS","setItem","getListFromDict","dict","list","consoleLogIfNotProductionEnvironment","message","environment","is_production","log","OverlayConfirm","hookup","callbackSuccess","idOverlayConfirm","flagCancel","buttonCancel","overlay","style","visibility","flagSubmit","buttonConfirm","textarea","show","flagIsCollapsed","OverlayError","BasePage","constructor","router","title","titlePageCurrent","name","initialize","sharedInitialize","logInitialisation","hookupCommonElements","hookupLogos","hookupNavigation","hookupOverlays","flagImageLogo","flagLogo","navigateToHash","idButtonHamburger","overlayHamburger","idOverlayHamburger","flagExpanded","hookupButtonsNavUserAccount","hookupButtonsNavUserLogout","hookupButtonsNavUserLogin","hookupButtonsNav","buttonSelector","button","pageHash","flagNavUserLogin","navigator","preventDefault","leave","then","Success","Message","hookupOverlayFromId","idOverlayError","idOverlay","display","hookupButtonSave","flagContainer","flagSave","target","setLocalStoragePage","dataPage","getLocalStoragePage","toggleShowButtonsSaveCancel","buttonContainerSelector","buttonSave","idButtonSave","idButtonCancel","isDirtyFilter","idTableMain","msgError","labelError","idLabelError","TableBasePage","cursorYInitial","rowInitial","placeholder","dragSrcEl","dragSrcRow","hookupTableCellDdls","bind","isPopState","isSinglePageApp","hookupFilters","hookupButtonsSaveCancel","hookupTableMain","saveRecordsTableDirtySinglePageApp","saveRecordsTableDirty","filters","getFormFilters","filtersDefault","callFilterTableContent","sharedHookupFilters","hookupButtonApplyFilters","hookupSearchTextFilter","hookupFilterActive","filterSelector","idFormFilters","flagActiveOnly","filterActiveOld","removeAttribute","parentDiv","isChecked","filterActiveNew","filterActive","svgElement","wasChecked","handleChangeFilter","filterValuePrevious","hookupFilter","filterFlag","handler","areDirtyFilters","tbody","rows","row","dirtyInputs","dirtyInput","isDirtyLabel","initialisedElements","initialisedElement","updateAndToggleShowButtonsSaveCancel","hookupFilterIsNotEmpty","flagIsNotEmpty","idButtonApplyFilters","flagSearch","hookupFilterCommandCategory","attrIdCommandCategory","filterCommandCategory","idCommandCategory","filterCommands","commandsInCategory","command","sortedCommands","sort","a","b","localeCompare","filterCommand","flagCommand","idCommandPrevious","appendChild","dispatchEvent","Event","hookupFilterCommand","attrIdCommand","hookupFilterLocation","attrIdLocation","filtersJson","callbackLoadTableContent","table","getTableMain","bodyTable","rowsJson","flagRows","every","hasOwnProperty","display_order","loadRowTable","rowJson","getAndLoadFilteredTableContentSinglePageApp","catch","hookupButtonCancel","records","getTableRecords","formElement","idTextareaConfirm","callSaveTableContent","flagStatus","flagSuccess","_verbose","flagMessage","dirtyOnly","record","getJsonRow","handleClickAddRowTable","_rowBlank","attrIdRowObject","cloneNode","countRows","initialiseRowNew","prepend","postInitialiseRowNewCallback","cacheRowBlank","selectorRowNew","flagRowNew","rowBlankTemp","initialiseSliderDisplayOrderRowNew","slidersDisplayOrder","flagDisplayOrder","flagSlider","maxDisplayOrder","slider","Math","max","sliderDisplayOrder","hookupSlidersDisplayOrderTable","selectorDisplayOrder","hookupChangeHandlerTableCells","inputSelector","handleChangeNestedElementCellTable","input","wasDirtyParentRows","getAllIsDirtyRowsInParentTree","wasDirtyElement","isDirtyElement","cascadeChangedIsDirtyNestedElementCellTable","tr","isDirtyRow","wasDirtyRow","shift","hookupChangeHandlerTableCellsWhenNotCollapsed","hookupFieldsCodeTable","flagCode","hookupFieldsNameTable","hookupFieldsDescriptionTable","flagDescription","hookupFieldsNotesTable","flagNotes","hookupFieldsActive","flagTable","handleClickRowNew","selectorButton","selectorButtonDelete","selectorButtonUndelete","hookupButtonsRowDelete","hookupButtonsRowUndelete","changeHandler","handleClickButtonRowDelete","changeEvent","changeElement","valuePrevious","wasDirty","parentNode","removeChild","buttonAddTemplate","idContainerTemplateElements","flagAdd","buttonAdd","replaceWith","handleClickButtonRowUndelete","buttonDeleteTemplate","buttonDelete","hookupTdsAccessLevel","hookupTableCellDdlPreviews","flagAccessLevel","accessLevels","fieldFlag","optionList","cellSelector","ddlHookup","ddlSelector","handleClickTableCellDdlPreview","optionObjectList","idSelected","td","ddl","optionObjectJson","toggleColumnCollapsed","flagColumn","isCollapsed","toggleColumnHasClassnameFlag","toggleColumnHeaderCollapsed","hookupFieldsCommandCategory","idTable","flagCommandCategory","filterCommandCategories","hookupCommandCategoryDdls","handleChangeCommandCategoryDdl","ddlCategory","idCommandCategoryRowOld","getIdCommandCategoryRow","idCommandCategoryRowNew","idCommandCategoryFilter","getIdCommandCategoryFilter","tdCommand","ddlCommand","hookupFieldsCommand","parentTr","tdCommandCategory","idCommandCategoryRow","filterCommandList","handleChangeCommandDdl","idCommandNew","getIdCommandRow","commandNew","divCommandCategory","ddlCommandCategory","elementCommandCategory","commandCategoryFilter","commandFilter","valueCurrentCommandCategoryFilter","valueCurrentCommandFilter","Number","getHasCommandCategoryFilter","elementCommand","getIdCommandFilter","idCommand","getHasCommandFilter","idCommandFilter","columnFlag","isRequiredFlag","classnameFlag","columnTh","columnThHasFlag","toggleColumnHeaderHasClassnameFlag","PageMtgGame","hashPageMtgGame","attrGameId","hookupTcgGame","initGamePage","pageHeading","updatePlayerSetup","loadGameFromServer","hookupResetButton","hookupPlayerCountInput","hookupStartGameButton","resetGameButton","resetGame","playerCountInput","getElementById","startGameButton","startGame","playersResponse","roundsResponse","damageResponse","Promise","all","setupSection","gameSection","savedPlayers","savedRounds","savedDamageRecords","damageRecords","renderPlayers","grid","latestRoundId","getLatestRoundId","player","index","playerId","attrPlayerId","displayName","makePlayerDisplayName","damagePlayerPairs","maxCommanderDamageReceived","damagePlayerPair","sourceId","filteredPlayerDamages","damage","attrRoundId","attrReceivedFromCommanderPlayerId","makeDefaultGameRoundPlayerDamage","map","flagHealthChange","reduce","acc","curr","totalDamage","life","startingLife","isEliminatedByForce","flagIsEliminated","some","Boolean","isEliminated","playerOwnDamage","card","className","animationDelay","userName","user_name","deckName","deck_name","flagCommanderDeaths","renderCommanderDamageRows","attrDeckId","hookupPlayerCardEvents","receivedFromCommanderPlayerId","roundId","attrDamageId","highestRoundDisplayOrder","round","deckId","deck","decks","user","attrUserId","otherPlayer","otherPlayerDisplayName","isLethal","join","lifeButtonSelector","amount","parseInt","damageIndex","findIndex","changeLife","commanderDeathButtonSelector","isMinusButton","changeCommanderDeaths","commmanderDamageButtonSelector","changeCommanderDamage","eliminatePlayerButtonSelector","toggleEliminate","updateDamage","lifeInput","lifeDisplay","currentLife","newLife","damageInput","damageDisplay","currentDamage","newDamage","damageRecord","deathDisplay","currentDeaths","newDeaths","eliminateBtn","wasEliminated","playerCount","wrapperTemplate","playerSetupWrapperTemplateId","wrapper","wrapperHeading","userDdl","deckDdl","nameInput","makeDefaultGamePlayer","playersToSave","playerSetupWrapper","userId","p","self","reload","showError","finally","confirm","removeItem","hashPageGames","gameState","errorOverlay","errorLabel","_saveTimeout","PageMtgGames","hashPageMtgGames","hookupTcgGames","initGamesPage","newGameForm","handleNewGameSubmit","filterForm","handleFilterSubmit","e","hideNewGameForm","modal","newGameButton","showNewGameForm","cancelNewGameButtons","overflow","firstInput","focus","form","reset","formData","FormData","gameType","get","gameData","flagIsCommander","flagIsDraft","flagIsSealed","flagLocationName","flagStartOn","toISOString","flagStartingLife","submitBtn","originalText","disabled","games","game_id","gamePageHash","hashPageGame","getCSRFToken","metaTag","hiddenInput","cookies","cookie","showSuccess","joinGame","deleteGame","result","animation","setTimeout","PageMtgHome","hashPageMtgHome","hookupTcgHome","PageAccessibilityReport","hashPageAccessibilityReport","PageAccessibilityStatement","hashPageAccessibilityStatement","PageLicense","hashPageLicense","PagePrivacyPolicy","hashPagePrivacyPolicy","PageRetentionSchedule","hashPageDataRetentionSchedule","MixinPage","pageCurrent","hookupLocalStorage","TableMixinPage","hookupTable","PageUser","hashPageUserAccount","mixin","flagCard","inputFirstname","flagFirstname","inputSurname","flagSurname","inputEmail","flagEmail","idUser","jsonRow","attrUserAuth0Id","flagIsEmailVerified","flagIsSuperUser","flagCanAdminUser","hookupFieldsFirstname","hookupFieldsSurname","hookupFieldsEmail","PageUsers","hashPageUserAccounts","inputNotes","buttonActive","newRows","newestRow","clickableElementsSelector","clickableElement","click","Router","pages","module","routes","loadPage","hashPage","PageClass","getClassPageFromHash","currentPage","pageJson","handlePopState","loadPageCurrent","history","pushState","navigateToUrl","appendHistory","loadPageBodyFromResponse","App","dom","setupEventListeners","start","handleGlobalClick","initPageCurrent","app","domReady","fn","readyState"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js/main.bundle.js","mappings":"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","sources":["webpack://app/./static/js/lib/validation.js","webpack://app/./static/js/dom.js","webpack://app/./static/js/api.js","webpack://app/./static/js/lib/business_objects/business_objects.js","webpack://app/./static/js/lib/events.js","webpack://app/./static/js/lib/local_storage.js","webpack://app/./static/js/lib/utils.js","webpack://app/./static/js/components/common/temporary/overlay_confirm.js","webpack://app/./static/js/pages/base.js","webpack://app/./static/js/components/common/temporary/overlay_error.js","webpack://app/./static/js/pages/base_table.js","webpack://app/./static/js/pages/tcg/mtg_game.js","webpack://app/./static/js/pages/tcg/mtg_games.js","webpack://app/./static/js/pages/tcg/mtg_home.js","webpack://app/./static/js/pages/legal/accessibility_report.js","webpack://app/./static/js/pages/legal/accessibility_statement.js","webpack://app/./static/js/pages/legal/license.js","webpack://app/./static/js/pages/legal/privacy_policy.js","webpack://app/./static/js/pages/legal/retention_schedule.js","webpack://app/./static/js/pages/mixin.js","webpack://app/./static/js/pages/mixin_table.js","webpack://app/./static/js/pages/user/user.js","webpack://app/./static/js/pages/user/users.js","webpack://app/./static/js/router.js","webpack://app/./static/js/app.js","webpack://app/./static/css/main.css?0a91","webpack://app/./static/css/components/button.css?0e0b","webpack://app/./static/css/components/card.css","webpack://app/./static/css/components/dialog.css","webpack://app/./static/css/components/form.css?94e1","webpack://app/./static/css/components/image.css?9f9c","webpack://app/./static/css/components/label.css?b78f","webpack://app/./static/css/components/modal.css","webpack://app/./static/css/components/navigation.css","webpack://app/./static/css/components/overlay.css?6dfd","webpack://app/./static/css/components/table.css?e553","webpack://app/./static/css/layouts/header.css?da75","webpack://app/./static/css/layouts/footer.css?65e3","webpack://app/./static/css/layouts/table-main.css?8c15","webpack://app/./static/css/lib/reset.css","webpack://app/./static/css/lib/typography.css","webpack://app/./static/css/lib/utils.css","webpack://app/./static/css/lib/variables.css","webpack://app/./static/css/themes/light.css?855e"],"sourcesContent":["\nexport default class Validation {\n /*\n isNullOrWhitespace(v) {\n let txt = JSON.stringify(v).replace('/\\s\\g', '');\n return (txt == '' || 'null');\n }\n */\n\n static isEmpty(object) {\n\n let isEmpty = true;\n\n if (object !== null && object !== \"null\" && object !== undefined && object !== \"undefined\") {\n\n if (object.length == undefined) {\n isEmpty = false; // object exists but isn't a collection\n }\n else if (typeof object === \"function\") {\n isEmpty = false; // object is reference\n }\n else { // string or collection\n\n let isString = (typeof object == \"string\");\n\n if (isString) object = object.trim();\n\n if (object.length > 0) {\n\n if (isString) {\n isEmpty = false; // String greater than length 0\n }\n else {\n\n if (typeof object[0] != \"string\") {\n isEmpty = false;\n }\n else {\n for(let i = 0; i < object.length; i++) {\n if (object[i] != \"\") {\n isEmpty = false;\n break\n }\n }\n }\n }\n }\n }\n }\n\n return isEmpty;\n }\n\n static isValidNumber(value, positiveOnly) {\n return !Validation.isEmpty(value) && !isNaN(value) && (!positiveOnly || parseFloat(value) > 0);\n }\n\n static getDataContentType(params) {\n\n var data = null;\n var contentType = '';\n\n if (!Validation.isEmpty(params)) {\n\n if (typeof params === \"string\") {\n data = params;\n contentType = \"application/x-www-form-urlencoded; charset=UTF-8\";\n }\n else {\n data = JSON.stringify(params);\n contentType = \"application/json; charset=UTF-8\";\n }\n }\n\n return { Data: data, ContentType: contentType };\n }\n\n static arrayContainsItem(array, itemValue) {\n\n var hasItem = false;\n\n if (!Validation.isEmpty(array) && !Validation.isEmpty(itemValue)) {\n\n var isJQueryElementArray = array[0] instanceof jQuery;\n\n if (isJQueryElementArray) {\n\n for (let i = 0; i < array.length; i++) {\n\n if (document.querySelectorAll(array[i]).is(itemValue)) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n var isDate = array[0] instanceof Date;\n\n if (isDate) {\n \n for (let i = 0; i < array.length; i++) {\n\n if (array[i].getTime() === itemValue.getTime()) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n for (let i = 0; i < array.length; i++) {\n\n if (array[i] == itemValue) {\n hasItem = true;\n break;\n }\n }\n }\n }\n }\n\n return hasItem;\n }\n\n static dictHasKey(d, k) {\n return (k in d);\n }\n static areEqualDicts(dict1, dict2) {\n const keys1 = Object.keys(dict1);\n const keys2 = Object.keys(dict2);\n \n if (keys1.length !== keys2.length) {\n return false;\n }\n \n for (let key of keys1) {\n if (dict1[key] !== dict2[key]) {\n return false;\n }\n }\n \n return true;\n }\n\n static imageExists(url, callback) {\n\n var img = new Image();\n\n img.onload = function() { callback(true); };\n img.onerror = function() { callback(false); };\n img.src = url;\n }\n\n static toFixedOrDefault(value, decimalPlaces, defaultValue = null) {\n return Validation.isValidNumber(value) ? parseFloat(value).toFixed(decimalPlaces) : defaultValue;\n }\n}\n","\nimport Utils from \"./lib/utils.js\";\nimport Validation from \"./lib/validation.js\";\n\nexport default class DOM {\n static setElementAttributesValuesCurrentAndPrevious(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementAttributeValueCurrent(element, data) {\n element.setAttribute(attrValueCurrent, data);\n }\n static setElementAttributeValuePrevious(element, data) {\n element.setAttribute(attrValuePrevious, data);\n }\n static setElementValuesCurrentAndPrevious(element, data) {\n DOM.setElementValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementValueCurrent(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n element.checked = data;\n }\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n element.value = data;\n }\n else {\n element.textContent = data;\n }\n }\n static setElementValueCurrentIfEmpty(element, data) {\n if (Validation.isEmpty(DOM.getElementValueCurrent(element))) {\n DOM.setElementValueCurrent(element, data);\n }\n }\n static getCellFromElement(element) {\n return element.closest('td');\n }\n static getRowFromElement(element, flagRow) {\n let selector = Validation.isEmpty(flagRow) ? 'tr' : 'tr.' + flagRow;\n return element.closest(selector);\n }\n static getClosestParent(element, parentSelector) {\n let parent = element.parentElement;\n while (parent) {\n if (parent.matches(parentSelector)) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n static convertForm2JSON(elementForm) {\n let dataForm = {};\n if (Validation.isEmpty(elementForm)) {\n return dataForm;\n }\n let containersFilter = elementForm.querySelectorAll('.' + flagContainerInput + '.' + flagFilter);\n let containerFilter, labelFilter, keyFilter, filter;\n for (let indexFilter = 0; indexFilter < containersFilter.length; indexFilter++) {\n containerFilter = containersFilter[indexFilter];\n labelFilter = containerFilter.querySelector('label');\n keyFilter = labelFilter.getAttribute('for');\n filter = containerFilter.querySelector(`#${keyFilter}`);\n dataForm[keyFilter] = DOM.getElementValueCurrent(filter);\n }\n return dataForm;\n }\n static loadPageBody(contentNew) {\n let pageBody = document.querySelector(idPageBody);\n pageBody.innerHTML = contentNew;\n }\n static getHashPageCurrent() {\n const hashPageCurrent = document.body.dataset.page;\n return hashPageCurrent;\n }\n static updateAndCheckIsElementDirty(element) {\n element.setAttribute(attrValueCurrent, DOM.getElementValueCurrent(element));\n return DOM.isElementDirty(element);\n }\n static isElementDirty(element) {\n let isDirty = element.getAttribute(attrValuePrevious) != element.getAttribute(attrValueCurrent);\n DOM.handleDirtyElement(element, isDirty);\n return isDirty;\n }\n static handleDirtyElement(element, isDirty) {\n DOM.toggleElementHasClassnameFlag(element, isDirty, flagDirty);\n }\n static toggleElementHasClassnameFlag(element, elementHasFlag, flag) {\n let elementAlreadyHasFlag = element.classList.contains(flag);\n if (elementHasFlag == elementAlreadyHasFlag) return;\n if (elementHasFlag) {\n element.classList.add(flag);\n } else {\n element.classList.remove(flag);\n }\n }\n static hasDirtyChildrenContainer(container) {\n if (container == null) return false;\n return container.querySelector('.' + flagDirty) != null;\n }\n static hasDirtyChildrenNotDeletedContainer(container) {\n if (container == null || container.classList.contains(flagDelete)) return false;\n return container.querySelector('.' + flagDirty + ':not(.' + flagDelete + ', .' + flagDelete + ' *)') != null;\n }\n static getElementValueCurrent(element) {\n let returnVal = '';\n \n if (!Validation.isEmpty(element)) {\n \n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n returnVal = element.checked;\n }\n /*\n else if (element.classList.contains(flagIsDatePicker)) {\n returnVal = getDatePickerDate(element, adjust4DayLightSavings);\n }\n */\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n returnVal = element.value;\n }\n else if (element.classList.contains(flagButton) && element.classList.contains(flagActive)) { // tagName === 'BUTTON'\n returnVal = element.classList.contains(flagDelete);\n }\n else if (tagName === 'TD') {\n returnVal = DOM.getElementAttributeValueCurrent(element);\n }\n else if (tagName == 'SVG' && element.classList.contains(flagCheckbox)) {\n returnVal = (element.classList.contains(flagIsChecked))\n }\n else {\n returnVal = element.textContent;\n }\n }\n \n if (Validation.isEmpty(returnVal)) returnVal = '';\n \n return returnVal;\n }\n static getElementAttributeValueCurrent(element) {\n // debugger;\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValueCurrent);\n }\n static getElementAttributeValuePrevious(element) {\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValuePrevious);\n }\n /* base_table.handleChangeElementCellTable\n static updateAndCheckIsTableElementDirty(element) {\n let wasDirty = DOM.isElementDirty(element);\n let row = DOM.getRowFromElement(element);\n let wasDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n let isDirty = DOM.updateAndCheckIsElementDirty(element);\n let cell = DOM.getCellFromElement(element);\n Utils.consoleLogIfNotProductionEnvironment({element, row, cell, isDirty, wasDirty});\n if (isDirty != wasDirty) {\n DOM.handleDirtyElement(cell, isDirty);\n let isDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow});\n if (isDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(row, isDirtyRow);\n }\n }\n }\n */\n static scrollToElement(parent, element) {\n // REQUIRED: parent has scroll-bar\n parent.scrollTop(parent.scrollTop() + (element.offset().top - parent.offset().top));\n }\n static isElementInContainer(container, element) {\n\n if (typeof jQuery === 'function') {\n if (container instanceof jQuery) container = container[0];\n if (element instanceof jQuery) element = element[0];\n }\n\n var containerBounds = container.getBoundingClientRect();\n var elementBounds = element.getBoundingClientRect();\n\n return (\n containerBounds.top <= elementBounds.top &&\n containerBounds.left <= elementBounds.left &&\n ((elementBounds.top + elementBounds.height) <= (containerBounds.top + containerBounds.height)) &&\n ((elementBounds.left + elementBounds.width) <= (containerBounds.left + containerBounds.width))\n );\n }\n static alertError(errorType, errorText) {\n alert(errorType + '\\n' + errorText);\n }\n static createOptionUnselectedProductVariation() {\n return {\n [flagProductVariationType]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariationType],\n [flagName]: 'Select Variation Type',\n [attrIdProductVariationType]: 0,\n },\n [flagProductVariation]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariation],\n [flagName]: 'Select Variation',\n [attrIdProductVariation]: 0,\n },\n };\n }\n static createOption(optionJson) {\n if (Validation.isEmpty(optionJson)) optionJson = {\n text: 'Select',\n value: 0,\n };\n let option = document.createElement('option');\n option.value = optionJson.value;\n option.textContent = optionJson.text;\n option.selected = optionJson.selected;\n return option;\n }\n\n static escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n static unescapeHtml(html) {\n const div = document.createElement('div');\n div.innerHTML = html;\n return div.textContent || div.innerText || '';\n }\n}\n","import DOM from './dom.js';\n\nexport default class API {\n \n static getCsrfToken() {\n return document.querySelector(idCSRFToken).getAttribute('content');\n }\n \n static async request(hashEndpoint, method = 'GET', data = null, params = null) {\n const url = API.getUrlFromHash(hashEndpoint, params);\n const csrfToken = API.getCsrfToken();\n const options = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n [flagCsrfToken]: csrfToken,\n }\n };\n\n if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {\n data = { \n ...data, \n [flagCsrfToken]: csrfToken,\n };\n options.body = JSON.stringify(data);\n }\n\n try {\n const response = await fetch(url, options);\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n return await response.json();\n } catch (error) {\n console.error('API request failed:', error);\n throw error;\n }\n }\n \n static getUrlFromHash(hash, params = null) {\n if (hash == null) hash = hashPageHome;\n let url = API.parameteriseUrl(_pathHost + hash, params);\n return url;\n }\n static parameteriseUrl(url, params) {\n if (params) {\n url += '?' + new URLSearchParams(params).toString();\n }\n return url;\n }\n static goToUrl(url) {\n window.location.href = url;\n }\n static goToHash(hash, params = null) {\n const url = API.getUrlFromHash(hash, params);\n API.goToUrl(url);\n }\n\n // specific api calls\n /* Example:\n getUsers: () => request('/users'),\n getUserById: (id) => request(`/users/${id}`),\n createUser: (userData) => request('/users', 'POST', userData),\n updateUser: (id, userData) => request(`/users/${id}`, 'PUT', userData),\n deleteUser: (id) => request(`/users/${id}`, 'DELETE'),\n */\n\n // User\n // user\n static async loginUser() {\n let callback = {};\n callback[flagCallback] = DOM.getHashPageCurrent();\n return await API.request(hashPageUserLogin, 'POST', callback);\n }\n static async saveUsers(users, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagUser] = users;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveUserUser, 'POST', dataRequest);\n }\n\n // MTG Game API methods\n static async saveGame(game, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagGame] = game;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveGame, 'POST', dataRequest);\n }\n\n static async getGamePlayers(gameId) {\n const url = `/mtg/api/game/${gameId}/players`;\n return await API.request(url, 'GET');\n }\n static async saveGamePlayers(players, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagPlayer] = players;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveGamePlayer, 'POST', dataRequest);\n }\n\n static async getGameRounds(gameId) {\n const url = `/mtg/api/game/${gameId}/rounds`;\n return await API.request(url, 'GET');\n }\n\n static async getGameDamageRecords(gameId) {\n const url = `/mtg/api/game/${gameId}/damage-records`;\n return await API.request(url, 'GET');\n }\n static async saveGameRoundPlayerDamages(rounds, damages, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagDamage] = damages;\n dataRequest[flagRound] = rounds;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveGameRoundPlayerDamage, 'POST', dataRequest);\n }\n\n\n}\n","\nimport Utils from '../utils.js';\n\nexport default class BusinessObjects {\n static getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected = null) {\n return {\n text: objectJson[keyText],\n value: objectJson[keyValue],\n selected: (objectJson[keyValue] == valueSelected),\n };\n }\n static getOptionJsonFromObjectJson(objectJson, valueSelected = null) {\n let keyText = objectJson[flagNameAttrOptionText];\n let keyValue = objectJson[flagNameAttrOptionValue];\n // Utils.consoleLogIfNotProductionEnvironment({objectJson, keyText, keyValue});\n return BusinessObjects.getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected);\n }\n static getObjectText(objectJson) {\n return objectJson == null ? '' : objectJson[objectJson[flagNameAttrOptionText]];\n }\n static getListObjectsFromIdDictAndCsv(idDict, idCsv) {\n let listObjects = [];\n let ids = idCsv.split(',');\n for (let id of ids) {\n listObjects.push(idDict[id]);\n }\n return listObjects;\n }\n}","\nexport default class Events {\n static initialiseEventHandler(selectorElement, classInitialised, eventHandler) {\n document.querySelectorAll(selectorElement).forEach(function(element) {\n if (element.classList.contains(classInitialised)) return;\n eventHandler(element);\n element.classList.add(classInitialised);\n });\n }\n static hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n}","\nimport Validation from \"./validation.js\";\n\nexport default class LocalStorage {\n/*\nfunction getPageLocalStorage(pageHash) {\n\n let ls;\n try {\n ls = JSON.parse(localStorage.getItem(pageHash));\n } catch {\n\n }\n\n if (Validation.isEmpty(ls)) return {}\n\n return ls;\n}\nfunction getPageLocalStorageCurrent() {\n\n return JSON.parse(localStorage.getItem(hashPageCurrent));\n}\n\nfunction setPageLocalStorage(pageHash, newLS) {\n\n localStorage.setItem(pageHash, JSON.stringify(newLS));\n}\n\nfunction clearPageLocalStorage(pageHash) {\n localStorage.removeItem(pageHash);\n}\n\nfunction setupPageLocalStorage(pageHash) {\n\n let ls = getPageLocalStorage(pageHash);\n\n if (Validation.isEmpty(ls)) ls = {};\n\n setPageLocalStorage(pageHash, ls);\n}\n*/\n\n static getLocalStorage(key) {\n return JSON.parse(localStorage.getItem(key));\n }\n\n static setLocalStorage(key, newLS) {\n localStorage.setItem(key, JSON.stringify(newLS));\n }\n\n/*\nfunction setupPageLocalStorageNext(pageHashNext) {\n let lsOld = getPageLocalStorage(hashPageCurrent);\n hashPageCurrent = pageHashNext;\n clearPageLocalStorage(hashPageCurrent);\n setupPageLocalStorage(hashPageCurrent);\n let lsNew = getPageLocalStorage(hashPageCurrent);\n lsNew[keyBasket] = (keyBasket in lsOld) ? lsOld[keyBasket] : {'items': []};\n setPageLocalStorage(hashPageCurrent, lsNew);\n}\n*/\n}","// Utility functions\n/*\nfunction $(selector) {\n return document.querySelector(selector);\n}\n\nfunction $$(selector) {\n return document.querySelectorAll(selector);\n}\n*/\nexport default class Utils {\n static getListFromDict(dict) {\n let list = [];\n for (let key in dict) {\n list.push(dict[key]);\n }\n return list;\n }\n static consoleLogIfNotProductionEnvironment(message) {\n if (environment.is_production != \"true\") {\n console.log(message);\n }\n }\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayConfirm {\n static hookup(callbackSuccess) {\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.style.visibility = 'hidden';\n });\n });\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagSubmit, flagInitialised, (buttonConfirm) => {\n buttonConfirm.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n let textarea = overlay.querySelector('textarea');\n overlay.style.visibility = 'hidden';\n callbackSuccess(textarea.value);\n });\n });\n }\n static show() {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.classList.remove(flagIsCollapsed);\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\nimport Validation from \"../lib/validation.js\";\n\nexport default class BasePage {\n constructor(router) {\n if (!router) {\n throw new Error(\"Router is required\");\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"initialising with router: \", router);\n }\n this.router = router;\n this.title = titlePageCurrent;\n if (this.constructor === BasePage) {\n throw new Error(\"Cannot instantiate abstract class\");\n }\n \n if (!this.constructor.hash) {\n throw new Error(`Class ${this.constructor.name} must have a static hash attribute.`);\n }\n }\n\n initialize() {\n throw new Error(\"Method 'initialize()' must be implemented.\");\n }\n\n sharedInitialize() {\n this.logInitialisation();\n this.hookupCommonElements();\n }\n\n logInitialisation() {\n Utils.consoleLogIfNotProductionEnvironment('Initialising ' + this.title + ' page');\n }\n \n hookupCommonElements() {\n // hookupVideos();\n this.hookupLogos();\n this.hookupNavigation();\n this.hookupOverlays();\n }\n hookupLogos() {\n Events.hookupEventHandler(\"click\", \".\" + flagImageLogo + \",\" + \".\" + flagLogo, (event, element) => {\n Utils.consoleLogIfNotProductionEnvironment('clicking logo');\n this.router.navigateToHash(hashPageHome);\n });\n }\n /*\n hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n */\n hookupNavigation() {\n Events.hookupEventHandler(\"click\", idButtonHamburger, (event, element) => {\n let overlayHamburger = document.querySelector(idOverlayHamburger);\n if (overlayHamburger.classList.contains(flagIsCollapsed)) {\n overlayHamburger.classList.remove(flagIsCollapsed);\n overlayHamburger.classList.add(flagExpanded);\n } else {\n overlayHamburger.classList.remove(flagExpanded);\n overlayHamburger.classList.add(flagIsCollapsed);\n }\n });\n\n this.hookupButtonsNavUserAccount();\n this.hookupButtonsNavUserLogout();\n this.hookupButtonsNavUserLogin();\n }\n hookupButtonsNav(buttonSelector) {\n Events.hookupEventHandler(\"click\", buttonSelector, (event, button) => {\n let pageHash = buttonSelector.getAttribute('href');\n this.router.navigateToHash(pageHash); \n });\n }\n hookupButtonsNavUserAccount() {\n // this.hookupButtonsNav('.' + flagNavUserAccount);\n }\n hookupButtonsNavUserLogout() {\n // this.hookupButtonsNav('.' + flagNavUserLogout);\n }\n hookupButtonsNavUserLogin() {\n Events.hookupEventHandler(\"click\", '.' + flagNavUserLogin, (event, navigator) => {\n event.preventDefault();\n event.stopPropagation();\n this.leave();\n API.loginUser()\n .then((response) => {\n if (response.Success) {\n window.location.href = response[flagCallback];\n } else {\n DOM.alertError(\"Error\", response.Message);\n }\n });\n });\n }\n\n hookupOverlays() {\n this.hookupOverlayFromId(idOverlayConfirm);\n this.hookupOverlayFromId(idOverlayError);\n }\n\n hookupOverlayFromId(idOverlay) {\n Events.initialiseEventHandler(idOverlay, flagInitialised, (overlay) => {\n overlay.querySelector('button.' + flagCancel).addEventListener(\"click\", (event) => {\n event.stopPropagation();\n overlay.style.display = 'none';\n });\n });\n }\n\n hookupButtonSave() {\n Events.initialiseEventHandler('.' + flagContainer + '.' + flagSave + '.' + flagCancel + ' button.' + flagSave, flagInitialised, (button) => {\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n button = event.target;\n if (button.classList.contains(flagIsCollapsed)) return;\n Utils.consoleLogIfNotProductionEnvironment('saving page: ', this.title);\n OverlayConfirm.show();\n });\n });\n }\n\n leave() {\n Utils.consoleLogIfNotProductionEnvironment('Leaving ' + this.title + ' page');\n if (this.constructor === BasePage) {\n throw new Error(\"Must implement leave() method.\");\n }\n }\n setLocalStoragePage(dataPage) {\n LocalStorage.setLocalStorage(this.hash, dataPage);\n }\n getLocalStoragePage() {\n return LocalStorage.getLocalStorage(this.hash);\n }\n\n toggleShowButtonsSaveCancel(show, buttonContainerSelector = null) { // , buttonSave = null, buttonCancel = null\n if (Validation.isEmpty(buttonContainerSelector)) buttonContainerSelector = '.' + flagContainer + '.' + flagSave + '.' + flagCancel;\n let buttonSave = document.querySelector(buttonContainerSelector + ' ' + idButtonSave);\n let buttonCancel = document.querySelector(buttonContainerSelector + ' ' + idButtonCancel);\n Utils.consoleLogIfNotProductionEnvironment({ show, buttonContainerSelector, buttonCancel, buttonSave });\n if (show) {\n buttonCancel.classList.remove(flagIsCollapsed);\n buttonSave.classList.remove(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('showing buttons');\n } else {\n buttonCancel.classList.add(flagIsCollapsed);\n buttonSave.classList.add(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('hiding buttons');\n }\n }\n\n static isDirtyFilter(filter) {\n let isDirty = DOM.updateAndCheckIsElementDirty(filter);\n if (isDirty) document.querySelectorAll(idTableMain + ' tbody tr').remove();\n return isDirty;\n }\n\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayError {\n static hookup() {\n Events.initialiseEventHandler(idOverlayError + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayError);\n overlay.style.visibility = 'hidden';\n });\n });\n }\n static show(msgError) {\n let overlay = document.querySelector(idOverlayError);\n let labelError = overlay.querySelector(idLabelError);\n labelError.innerText = msgError;\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport Validation from \"../lib/validation.js\";\nimport BasePage from \"./base.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\n\nexport default class TableBasePage extends BasePage {\n // static hash\n // static attrIdRowObject\n // callSaveTableContent\n\n constructor(router) {\n super(router);\n this.cursorYInitial = null;\n this.rowInitial = null;\n this.placeholder = null;\n this.dragSrcEl = null;\n this.dragSrcRow = null;\n\n this.hookupTableCellDdls = this.hookupTableCellDdls.bind(this);\n }\n \n initialize(isPopState = false) {\n throw new Error(\"Must implement initialize() method.\");\n }\n sharedInitialize(isPopState = false, isSinglePageApp = false) {\n if (!isPopState) {\n super.sharedInitialize();\n this.hookupFilters();\n this.hookupButtonsSaveCancel();\n this.hookupTableMain();\n OverlayConfirm.hookup(() => {\n if (isSinglePageApp) {\n this.saveRecordsTableDirtySinglePageApp();\n }\n else {\n this.saveRecordsTableDirty();\n }\n });\n } else {\n let dataPage = this.getLocalStoragePage();\n let filters = dataPage[flagFormFilters];\n let formFilters = TableBasePage.getFormFilters();\n let filtersDefault = DOM.convertForm2JSON(formFilters);\n if (!Validation.areEqualDicts(filters, filtersDefault)) {\n this.callFilterTableContent();\n }\n }\n }\n hookupFilters() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method hookupFilters().\");\n }\n }\n sharedHookupFilters() {\n this.hookupButtonApplyFilters();\n this.hookupSearchTextFilter();\n }\n hookupFilterActive() {\n let filterSelector = idFormFilters + ' #' + flagActiveOnly;\n let filterActiveOld = document.querySelector(filterSelector);\n filterActiveOld.removeAttribute('id');\n let parentDiv = filterActiveOld.parentElement;\n let isChecked = (DOM.getElementAttributeValuePrevious(parentDiv) == \"True\");\n let filterActiveNew = document.querySelector(idFormFilters + ' div.' + flagActiveOnly + '.' + flagContainerInput + ' svg.' + flagActiveOnly);\n filterActiveNew.setAttribute('id', flagActiveOnly);\n if (isChecked) filterActiveNew.classList.add(flagIsChecked);\n\n Events.hookupEventHandler(\"click\", filterSelector, (event, filterActive) => {\n Utils.consoleLogIfNotProductionEnvironment({ filterActive });\n Utils.consoleLogIfNotProductionEnvironment({ [filterActive.tagName]: filterActive.tagName });\n let svgElement = (filterActive.tagName.toUpperCase() == 'SVG') ? filterActive : filterActive.parentElement;\n let wasChecked = svgElement.classList.contains(flagIsChecked);\n if (wasChecked) {\n svgElement.classList.remove(flagIsChecked);\n }\n else {\n svgElement.classList.add(flagIsChecked);\n }\n return this.handleChangeFilter(event, filterActive);\n });\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n hookupFilter(filterFlag, handler = (event, filter) => { return this.handleChangeFilter(event, filter); }) {\n let filterSelector = idFormFilters + ' #' + filterFlag;\n Events.hookupEventHandler(\"change\", filterSelector, handler);\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n handleChangeFilter(event, filter) {\n let isDirtyFilter = DOM.updateAndCheckIsElementDirty(filter);\n let formFilters = TableBasePage.getFormFilters();\n let areDirtyFilters = isDirtyFilter || DOM.hasDirtyChildrenContainer(formFilters);\n let tbody = document.querySelector(idTableMain + ' tbody');\n let rows = tbody.querySelectorAll(':scope > tr');\n rows.forEach((row) => {\n if (areDirtyFilters && !row.classList.contains(flagIsCollapsed)) row.classList.add(flagIsCollapsed);\n if (!areDirtyFilters && row.classList.contains(flagIsCollapsed)) {\n row.classList.remove(flagIsCollapsed);\n let dirtyInputs = row.querySelectorAll('input.' + flagDirty);\n dirtyInputs.forEach((dirtyInput) => {\n dirtyInput.value = DOM.getElementAttributeValueCurrent(dirtyInput);\n });\n }\n });\n if (areDirtyFilters) {\n /*\n tbody.querySelectorAll('tr').forEach((tr) => { \n if (!DOM.hasDirtyChildrenContainer(tr)) tr.remove(); \n });\n */\n tbody.innerHTML = '
Press \"Apply Filters\" to refresh the table.
' + tbody.innerHTML;\n if (!tbody.classList.contains(flagIsCollapsed)) tbody.classList.add(flagIsCollapsed);\n }\n else {\n let isDirtyLabel = tbody.querySelector(\":scope > div\");\n if (isDirtyLabel != null) isDirtyLabel.remove();\n if (tbody.classList.contains(flagIsCollapsed)) tbody.classList.remove(flagIsCollapsed);\n let initialisedElements = tbody.querySelectorAll('.' + flagInitialised);\n initialisedElements.forEach((initialisedElement) => {\n initialisedElement.classList.remove(flagInitialised);\n });\n this.hookupTableMain();\n }\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupFilterIsNotEmpty() {\n this.hookupFilter(flagIsNotEmpty);\n }\n hookupButtonApplyFilters() {\n Events.hookupEventHandler(\"click\", idButtonApplyFilters, (event, button) => {\n event.stopPropagation();\n this.callFilterTableContent();\n });\n }\n hookupSearchTextFilter() {\n this.hookupFilter(flagSearch);\n }\n hookupFilterCommandCategory() {\n this.hookupFilter(attrIdCommandCategory, (event, filterCommandCategory) => {\n this.handleChangeFilter();\n let isDirtyFilter = filterCommandCategory.classList.contains(flagDirty);\n let idCommandCategory = DOM.getElementValueCurrent(filterCommandCategory);\n console.log(\"filter commands unsorted\");\n console.log(Utils.getListFromDict(filterCommands));\n let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => command[attrIdCommandCategory] == idCommandCategory);\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n let filterCommand = document.querySelector(idFormFilters + ' .' + flagCommand);\n let idCommandPrevious = DOM.getElementAttributeValuePrevious(filterCommand);\n filterCommand.innerHTML = '';\n let optionJson, option;\n option = DOM.createOption(null);\n filterCommand.appendChild(option);\n sortedCommands.forEach((command) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(command, idCommandPrevious);\n option = DOM.createOption(optionJson);\n filterCommand.appendChild(option);\n });\n filterCommand.dispatchEvent(new Event('change'));\n return isDirtyFilter;\n });\n }\n hookupFilterCommand() {\n this.hookupFilter(attrIdCommand);\n }\n hookupFilterLocation() {\n this.hookupFilter(attrIdLocation);\n }\n /*\n getAndLoadFilteredTableContent = () => {\n this.callFilterTableContent()\n .catch(error => console.error('Error:', error));\n }\n */\n static getFormFilters() {\n return document.querySelector(idFormFilters);\n }\n callFilterTableContent() {\n let formFilters = TableBasePage.getFormFilters();\n let filtersJson = DOM.convertForm2JSON(formFilters);\n Utils.consoleLogIfNotProductionEnvironment(\"callFilterTableContent\");\n Utils.consoleLogIfNotProductionEnvironment(\"formFilters\");\n Utils.consoleLogIfNotProductionEnvironment(formFilters);\n Utils.consoleLogIfNotProductionEnvironment(\"filtersJson\");\n Utils.consoleLogIfNotProductionEnvironment(filtersJson);\n this.leave();\n API.goToHash(this.constructor.hash, filtersJson);\n }\n callbackLoadTableContent(response) {\n let table = TableBasePage.getTableMain();\n let bodyTable = table.querySelector('tbody');\n bodyTable.querySelectorAll('tr').forEach(function(row) { row.remove(); });\n let rowsJson = response.data[flagRows];\n if (!Validation.isEmpty(rowsJson) && rowsJson.every(row => row.hasOwnProperty('display_order'))) {\n rowsJson = rowsJson.sort((a, b) => a.display_order - b.display_order);\n }\n rowsJson.forEach(this.loadRowTable.bind(this));\n this.hookupTableMain();\n }\n static getTableMain() {\n return document.querySelector(idTableMain);\n }\n loadRowTable(rowJson) {\n throw new Error(\"Subclass of TableBasePage must implement method loadRowTable().\");\n }\n getAndLoadFilteredTableContentSinglePageApp() {\n this.callFilterTableContent()\n .then(data => {\n Utils.consoleLogIfNotProductionEnvironment('Table data received:', data);\n this.callbackLoadTableContent(data);\n })\n .catch(error => console.error('Error:', error));\n }\n hookupButtonsSaveCancel() {\n this.hookupButtonSave();\n this.hookupButtonCancel();\n this.toggleShowButtonsSaveCancel(false);\n }\n saveRecordsTableDirty() {\n let records = this.getTableRecords(true);\n if (records.length == 0) {\n OverlayError.show('No records to save');\n return;\n }\n let formElement = TableBasePage.getFormFilters();\n let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));\n /*\n Utils.consoleLogIfNotProductionEnvironment({ formElement, comment, records });\n Utils.consoleLogIfNotProductionEnvironment('records');\n Utils.consoleLogIfNotProductionEnvironment(records);\n debugger;\n */\n this.callSaveTableContent(records, formElement, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n this.callFilterTableContent();\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \", data[flagMessage]);\n OverlayError.show(data[flagMessage]);\n }\n })\n .catch(error => console.error('Error:', error));\n }\n getTableRecords(dirtyOnly = false) {\n let records = [];\n let record;\n document.querySelectorAll(idTableMain + ' > tbody > tr').forEach((row) => {\n if (dirtyOnly && !DOM.hasDirtyChildrenContainer(row)) return;\n record = this.getJsonRow(row);\n records.push(record);\n });\n return records;\n }\n getJsonRow(row) {\n throw new Error(\"Subclass of TableBasePage must implement method getJsonRow().\");\n }\n saveRecordsTableDirtySinglePageApp() {\n let records = this.getTableRecords(true);\n if (records.length == 0) {\n OverlayError.show('No records to save');\n return;\n }\n let formElement = TableBasePage.getFormFilters();\n let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));\n this.callSaveTableContent(records, formElement, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n this.callbackLoadTableContent(data);\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \", data[flagMessage]);\n OverlayError.show(data[flagMessage]);\n }\n })\n .catch(error => console.error('Error:', error));\n }\n hookupButtonCancel() {\n Events.initialiseEventHandler('.' + flagContainer + '.' + flagSave + '.' + flagCancel + ' button.' + flagCancel, flagInitialised, (button) => {\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n button = event.target;\n if (button.classList.contains(flagIsCollapsed)) return;\n this.callFilterTableContent();\n });\n button.classList.add(flagIsCollapsed);\n });\n }\n handleClickAddRowTable(event, button) {\n event.stopPropagation();\n _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - _rowBlank.getAttribute(this.constructor.attrIdRowObject));\n let tbody = document.querySelector(idTableMain + ' tbody');\n if (tbody.classList.contains(flagIsCollapsed)) return;\n let row = _rowBlank.cloneNode(true);\n row.classList.remove(flagInitialised);\n row.querySelectorAll('.' + flagInitialised).forEach(function(element) {\n element.classList.remove(flagInitialised);\n });\n let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;\n row.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);\n this.initialiseRowNew(tbody, row);\n tbody.prepend(row);\n tbody.scrollTop = 0;\n this.hookupTableMain();\n this.postInitialiseRowNewCallback(tbody);\n }\n initialiseRowNew(tbody, row) {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method initialiseRowNew().\");\n }\n // row.classList.remove(flagRowNew);\n }\n hookupTableMain() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Must implement hookupTableMain() method.\");\n }\n Events.initialiseEventHandler(idTableMain, flagInitialised, (table) => {\n this.cacheRowBlank();\n });\n }\n cacheRowBlank() {\n let selectorRowNew = idTableMain + ' tbody tr.' + flagRowNew;\n let rowBlankTemp = document.querySelector(selectorRowNew);\n Utils.consoleLogIfNotProductionEnvironment(\"row blank temp: \", rowBlankTemp);\n let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;\n _rowBlank = rowBlankTemp.cloneNode(true);\n document.querySelectorAll(selectorRowNew).forEach(function(row) {\n row.remove();\n });\n _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);\n }\n postInitialiseRowNewCallback(tbody) {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method postInitialiseRowNewCallback(tbody).\");\n }\n }\n initialiseSliderDisplayOrderRowNew(tbody, row) {\n // let tdSelector = ':scope > tr > td.' + flagDisplayOrder;\n // let tbody = document.querySelector('table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody');\n let slidersDisplayOrder = tbody.querySelectorAll(':scope > tr > td.' + flagDisplayOrder + ' input.' + flagSlider);\n let maxDisplayOrder = 0;\n slidersDisplayOrder.forEach((slider) => {\n maxDisplayOrder = Math.max(maxDisplayOrder, parseFloat(DOM.getElementValueCurrent(slider)));\n });\n let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);\n DOM.setElementValuesCurrentAndPrevious(sliderDisplayOrder, maxDisplayOrder + 1);\n }\n hookupSlidersDisplayOrderTable() {\n let selectorDisplayOrder = idTableMain + ' tbody tr td.' + flagDisplayOrder + ' input.' + flagSlider + '.' + flagDisplayOrder;\n this.hookupChangeHandlerTableCells(selectorDisplayOrder);\n }\n hookupChangeHandlerTableCells(inputSelector, handler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.initialiseEventHandler(inputSelector, flagInitialised, (input) => {\n input.addEventListener(\"change\", (event) => {\n handler(event, input);\n });\n handler(null, input);\n });\n }\n handleChangeNestedElementCellTable(event, element) {\n let wasDirtyParentRows = this.getAllIsDirtyRowsInParentTree(element);\n let wasDirtyElement = element.classList.contains(flagDirty);\n let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);\n // Utils.consoleLogIfNotProductionEnvironment({isDirtyElement, wasDirtyElement, wasDirtyParentRows});\n // let td = DOM.getCellFromElement(element);\n // DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element));\n if (isDirtyElement != wasDirtyElement) {\n // DOM.handleDirtyElement(td, isDirtyElement);\n this.updateAndToggleShowButtonsSaveCancel();\n this.cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows);\n }\n }\n getAllIsDirtyRowsInParentTree(element) {\n let rows = [];\n let parent = element;\n let isDirty;\n while (parent) {\n if (parent.tagName.toUpperCase() == 'TR') {\n isDirty = parent.classList.contains(flagDirty)\n rows.push(isDirty);\n }\n parent = parent.parentElement;\n }\n return rows;\n }\n cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows) {\n if (Validation.isEmpty(wasDirtyParentRows)) return;\n let tr = DOM.getRowFromElement(element);\n let isDirtyRow = isDirtyElement || DOM.hasDirtyChildrenContainer(tr);\n let wasDirtyRow = wasDirtyParentRows.shift();\n Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow});\n if (isDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(tr, isDirtyRow);\n this.updateAndToggleShowButtonsSaveCancel();\n this.cascadeChangedIsDirtyNestedElementCellTable(tr.parentElement, isDirtyRow, wasDirtyParentRows);\n }\n }\n hookupChangeHandlerTableCellsWhenNotCollapsed(inputSelector, handler = (event, element) => {\n if (!element.classList.contains(flagIsCollapsed)) this.handleChangeNestedElementCellTable(event, element);\n }) {\n Events.hookupEventHandler(\"change\", inputSelector, handler);\n }\n hookupFieldsCodeTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagCode + ' > .' + flagCode);\n }\n hookupFieldsNameTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagName + ' > .' + flagName);\n }\n hookupFieldsDescriptionTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagDescription + ' > .' + flagDescription);\n }\n hookupFieldsNotesTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagNotes + ' > .' + flagNotes);\n }\n hookupFieldsActive(flagTable = '', handleClickRowNew = (event, element) => { this.handleClickAddRowTable(event, element); }) {\n let selectorButton = 'table.table-main' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody > tr > td.' + flagActive + ' .' + flagButton + '.' + flagActive;\n let selectorButtonDelete = selectorButton + '.' + flagDelete;\n let selectorButtonUndelete = selectorButton + ':not(.' + flagDelete + ')';\n Utils.consoleLogIfNotProductionEnvironment(\"hookupFieldsActive: \", selectorButtonDelete, selectorButtonUndelete);\n this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);\n this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);\n Events.hookupEventHandler(\n \"click\"\n , 'table.table-main' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > thead > tr > th.' + flagActive + ' .' + flagButton + '.' + flagActive\n , (event, button) => { handleClickRowNew(event, button); }\n );\n }\n hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.hookupEventHandler(\"click\", selectorButtonDelete, (event, element) => {\n this.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n });\n }\n handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;\n let valuePrevious = DOM.getElementAttributeValuePrevious(element);\n let wasDirty = element.classList.contains(flagDirty);\n let row = DOM.getRowFromElement(element);\n if (row.classList.contains(flagRowNew) && !DOM.hasDirtyChildrenContainer(row)) {\n row.parentNode.removeChild(row);\n }\n else {\n let buttonAddTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagAdd);\n let buttonAdd = buttonAddTemplate.cloneNode(true);\n DOM.setElementAttributeValuePrevious(buttonAdd, valuePrevious);\n DOM.setElementAttributeValueCurrent(buttonAdd, false);\n if (wasDirty) buttonAdd.classList.add(flagDirty);\n element.replaceWith(buttonAdd);\n changeHandler(null, buttonAdd);\n this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n }\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.hookupEventHandler(\"click\", selectorButtonUndelete, (event, element) => {\n this.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n });\n }\n handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;\n let valuePrevious = DOM.getElementAttributeValuePrevious(element);\n let wasDirty = DOM.isElementDirty(element);\n let buttonDeleteTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagDelete);\n let buttonDelete = buttonDeleteTemplate.cloneNode(true);\n DOM.setElementAttributeValuePrevious(buttonDelete, valuePrevious);\n DOM.setElementAttributeValueCurrent(buttonDelete, true);\n if (wasDirty) buttonDelete.classList.add(flagDirty);\n element.replaceWith(buttonDelete);\n changeHandler(null, buttonDelete);\n this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupTdsAccessLevel() {\n this.hookupTableCellDdlPreviews(flagAccessLevel, Utils.getListFromDict(accessLevels));\n }\n hookupTableCellDdlPreviews(\n fieldFlag\n , optionList\n , cellSelector = null\n , ddlHookup = (ddlSelector) => { this.hookupTableCellDdls(ddlSelector); }\n , changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }\n ) {\n if (cellSelector == null) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;\n Events.hookupEventHandler(\"click\", cellSelector + ' div.' + fieldFlag, (event, div) => {\n this.handleClickTableCellDdlPreview(\n event\n , div\n , fieldFlag\n , optionList\n , cellSelector\n , (ddlSelector) => { ddlHookup(\n ddlSelector\n , (event, element) => { changeHandler(event, element); }\n ); }\n );\n });\n ddlHookup(cellSelector + ' select.' + fieldFlag);\n }\n hookupTableCellDdls(ddlSelector, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { changeHandler(event, element); });\n }\n handleClickTableCellDdlPreview(event, div, fieldFlag, optionObjectList, cellSelector = null, ddlHookup = (cellSelector) => { this.hookupTableCellDdls(cellSelector); }) {\n if (Validation.isEmpty(cellSelector)) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;\n let idSelected = DOM.getElementAttributeValueCurrent(div);\n let td = DOM.getCellFromElement(div);\n td.innerHTML = '';\n let ddl = document.createElement('select');\n ddl.classList.add(fieldFlag);\n DOM.setElementValuesCurrentAndPrevious(ddl, idSelected);\n let optionJson, option;\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment(\"click table cell ddl preview\");\n Utils.consoleLogIfNotProductionEnvironment({optionObjectList, cellSelector});\n }\n option = DOM.createOption(null);\n ddl.appendChild(option);\n optionObjectList.forEach((optionObjectJson) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(optionObjectJson, idSelected);\n option = DOM.createOption(optionJson);\n ddl.appendChild(option);\n });\n td.appendChild(ddl);\n let ddlSelector = cellSelector + ' select.' + fieldFlag;\n ddlHookup(ddlSelector);\n }\n /*\n hookupTableCellDDlPreviewsWhenNotCollapsed(cellSelector, optionList, ddlHookup = (event, element) => { this.hookupTableCellDdls(event, element); }) {\n Events.hookupEventHandler(\"click\", cellSelector + ' div', (event, div) => {\n this.handleClickTableCellDdlPreview(event, div, optionList, cellSelector, (event, element) => { ddlHookup(event, element); });\n });\n }\n */\n toggleColumnCollapsed(flagColumn, isCollapsed) {\n this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagIsCollapsed);\n }\n toggleColumnHeaderCollapsed(flagColumn, isCollapsed) {\n this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagIsCollapsed);\n }\n\n hookupFieldsCommandCategory(idTable = null) {\n if (idTable == null) idTable = idTableMain;\n this.hookupTableCellDdlPreviews(\n flagCommandCategory\n , Utils.getListFromDict(filterCommandCategories).sort((a, b) => a[flagName].localeCompare(b[flagName]))\n , idTable + ' > tbody > tr > td.' + flagCommandCategory // + ' .' + flagCommandCategory\n , (cellSelector) => { this.hookupCommandCategoryDdls(cellSelector); }\n );\n }\n hookupCommandCategoryDdls(ddlSelector) {\n this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { this.handleChangeCommandCategoryDdl(event, element); });\n }\n handleChangeCommandCategoryDdl(event, ddlCategory) {\n let row = DOM.getRowFromElement(ddlCategory);\n let idCommandCategoryRowOld = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);\n this.handleChangeNestedElementCellTable(event, ddlCategory);\n let idCommandCategoryRowNew = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);\n if (\n idCommandCategoryRowOld == idCommandCategoryRowNew\n || idCommandCategoryRowNew == 0\n ) return;\n console.log({ idCommandCategoryRowNew, idCommandCategoryRowOld });\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n let tdCommand = row.querySelector('td.' + flagCommand);\n tdCommand.dispatchEvent(new Event('click'));\n let ddlCommand = row.querySelector('td.' + flagCommand + ' select.' + flagCommand);\n ddlCommand.innerHTML = '';\n ddlCommand.appendChild(DOM.createOption(null));\n let optionJson, option;\n let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => \n (\n command[attrIdCommandCategory] == idCommandCategoryRowNew\n || idCommandCategoryRowNew == 0\n )\n && (\n command[attrIdCommandCategory] == idCommandCategoryFilter\n || idCommandCategoryFilter == 0\n )\n );\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n sortedCommands.forEach((command) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(command);\n option = DOM.createOption(optionJson);\n ddlCommand.appendChild(option);\n });\n this.handleChangeNestedElementCellTable(event, ddlCommand);\n }\n hookupFieldsCommand(idTable = null) {\n if (idTable == null) idTable = idTableMain;\n Events.hookupEventHandler(\"click\", idTable + ' > tbody > tr > td.' + flagCommand + ' div.' + flagCommand, (event, div) => {\n Utils.consoleLogIfNotProductionEnvironment(div);\n let parentTr = DOM.getRowFromElement(div);\n Utils.consoleLogIfNotProductionEnvironment({ div, parentTr });\n let tdCommandCategory = parentTr.querySelector('td.' + flagCommandCategory);\n let idCommandCategoryRow = this.getIdCommandCategoryRow(parentTr); // DOM.getElementAttributeValueCurrent(tdCommandCategory);\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n let filterCommandList = Utils.getListFromDict(filterCommands);\n let commandsInCategory = filterCommandList.filter(command => \n (\n command[attrIdCommandCategory] == idCommandCategoryRow\n || idCommandCategoryRow == 0\n )\n && (\n command[attrIdCommandCategory] == idCommandCategoryFilter\n || idCommandCategoryFilter == 0\n )\n );\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n Utils.consoleLogIfNotProductionEnvironment({ tdCommandCategory, idCommandCategoryRow, idCommandCategoryFilter, filterCommandList, commandsInCategory });\n Utils.consoleLogIfNotProductionEnvironment(filterCommandList);\n this.handleClickTableCellDdlPreview(\n event\n , div\n , flagCommand // fieldFlag\n , sortedCommands // optionList\n , idTable + ' > tbody > tr > td.' + flagCommand // cellSelector\n , (cellSelector) => { this.hookupTableCellDdls(\n cellSelector\n , (event, element) => { this.handleChangeCommandDdl(event, element); }\n ); }\n );\n });\n this.hookupTableCellDdls(\n idTable + ' > tbody > tr > td.' + flagCommand + ' select.' + flagCommand\n , (event, element) => { this.handleChangeCommandDdl(event, element); }\n );\n }\n handleChangeCommandDdl(event, ddlCommand) {\n // console.log(\"handle change command ddl\");\n let row = DOM.getRowFromElement(ddlCommand);\n this.handleChangeNestedElementCellTable(event, ddlCommand);\n let idCommandCategoryRowOld = this.getIdCommandCategoryRow(row);\n let idCommandNew = this.getIdCommandRow(row);\n let commandNew = filterCommands[idCommandNew];\n // console.log({ idCommandCategoryRowOld, commandNew });\n if (commandNew == null || idCommandCategoryRowOld == commandNew[attrIdCommandCategory]) return;\n let divCommandCategory = row.querySelector('td.' + flagCommandCategory + ' div');\n if (divCommandCategory) divCommandCategory.dispatchEvent(new Event('click'));\n let ddlCommandCategory = row.querySelector('td.' + flagCommandCategory + ' select.' + flagCommandCategory);\n DOM.setElementValueCurrent(ddlCommandCategory, commandNew[attrIdCommandCategory]);\n // console.log({ ddlCommandCategory, commandNew });\n this.handleChangeNestedElementCellTable(event, ddlCommandCategory);\n }\n getIdCommandCategoryRow(tr) {\n let elementCommandCategory = tr.querySelector('td.' + flagCommandCategory + ' .' + flagCommandCategory);\n return DOM.getElementAttributeValueCurrent(elementCommandCategory);\n }\n getIdCommandCategoryFilter() {\n let formFilters = TableBasePage.getFormFilters();\n let idCommandCategory = 0;\n if (formFilters == null) return idCommandCategory;\n let commandCategoryFilter = formFilters.querySelector('#' + attrIdCommandCategory);\n let commandFilter = formFilters.querySelector('#' + attrIdCommand);\n let valueCurrentCommandCategoryFilter = DOM.getElementAttributeValueCurrent(commandCategoryFilter);\n Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandCategoryFilter });\n if (valueCurrentCommandCategoryFilter == \"\") {\n let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);\n Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandFilter });\n if (valueCurrentCommandFilter != \"\") {\n let command = filterCommands[valueCurrentCommandFilter];\n idCommandCategory = command[attrIdCommandCategory];\n }\n } else {\n idCommandCategory = Number(valueCurrentCommandCategoryFilter);\n }\n return idCommandCategory;\n }\n getHasCommandCategoryFilter() {\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n return !(Validation.isEmpty(idCommandCategoryFilter) || idCommandCategoryFilter == 0);\n }\n getIdCommandRow(tr) {\n let elementCommand = tr.querySelector('td.' + flagCommand + ' .' + flagCommand);\n return DOM.getElementAttributeValueCurrent(elementCommand);\n }\n getIdCommandFilter() {\n let formFilters = TableBasePage.getFormFilters();\n let commandFilter = formFilters.querySelector('#' + attrIdCommand);\n let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);\n let idCommand = Number(valueCurrentCommandFilter);\n return idCommand;\n }\n getHasCommandFilter() {\n let idCommandFilter = this.getIdCommandFilter();\n return !(Validation.isEmpty(idCommandFilter) || idCommandFilter == 0);\n }\n /*\n createTdActive(isActive) {\n let tdActive = document.createElement(\"td\");\n tdActive.classList.add(flagActive);\n let buttonActive = document.createElement(\"button\");\n buttonActive.classList.add(flagActive);\n buttonActive.classList.add(isActive ? flagDelete : flagAdd);\n buttonActive.textContent = isActive ? 'x' : '+';\n DOM.setElementAttributesValuesCurrentAndPrevious(buttonActive, isActive);\n tdActive.appendChild(buttonActive);\n return tdActive;\n }\n */\n leave() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Must implement leave() method.\");\n }\n super.leave();\n let formFilters = TableBasePage.getFormFilters();\n let dataPage = {};\n dataPage[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n this.setLocalStoragePage(dataPage);\n }\n\n toggleColumnHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {\n let table = TableBasePage.getTableMain();\n let columnTh = table.querySelector('th.' + columnFlag);\n let columnThHasFlag = columnTh.classList.contains(classnameFlag);\n if (isRequiredFlag == columnThHasFlag) return;\n DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);\n }\n toggleColumnHeaderHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {\n let table = TableBasePage.getTableMain();\n let columnTh = table.querySelector('th.' + columnFlag);\n DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);\n }\n\n updateAndToggleShowButtonsSaveCancel() {\n let pageBody = document.querySelector(idPageBody);\n let isDirty = DOM.hasDirtyChildrenContainer(pageBody);\n\n console.log({ pageBody, isDirty });\n\n this.toggleShowButtonsSaveCancel(isDirty);\n }\n}\n","\n\nimport API from \"../../api.js\";\nimport TableBasePage from \"../base_table.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\n\nexport default class PageMtgGame extends TableBasePage {\n static hash = hashPageMtgGame;\n static attrIdRowObject = attrGameId;\n callSaveTableContent = API.saveGame;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTcgGame();\n }\n hookupFilters() {\n // this.sharedHookupFilters();\n }\n loadRowTable(rowJson) {\n return;\n }\n getJsonRow(row) {\n return;\n }\n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n \n }\n\n hookupTableMain() {\n super.hookupTableMain();\n }\n hookupTcgGame() {\n this.initGamePage();\n let pageHeading = document.querySelector('.container.company-name .tcg-title.company-name');\n pageHeading.innerText = `MTG Game #${gameId}`;\n }\n\n initGamePage() {\n // Load existing game state from API or show setup\n PageMtgGame.updatePlayerSetup();\n if (typeof gameId !== 'undefined' && gameId) {\n this.loadGameFromServer();\n }\n /*\n else {\n PageMtgGame.updatePlayerSetup();\n }\n */\n \n PageMtgGame.hookupResetButton();\n PageMtgGame.hookupPlayerCountInput();\n this.hookupStartGameButton();\n /*\n this.hookupCommanderDeathIncrementButtons();\n this.hookupEliminateCommanderButtons();\n this.hookupPlayerLifeIncrementButtons();\n this.hookupCommanderDamageIncrementButtons();\n */\n }\n static hookupResetButton() {\n const resetGameButton = document.querySelector('header.game-header .header-right .btn-tcg.btn-tcg-secondary');\n if (resetGameButton) {\n resetGameButton.addEventListener('click', PageMtgGame.resetGame);\n }\n }\n static hookupPlayerCountInput() {\n const playerCountInput = document.getElementById('playerCount');\n if (playerCountInput) {\n playerCountInput.addEventListener('change', PageMtgGame.updatePlayerSetup);\n }\n }\n hookupStartGameButton() {\n const startGameButton = document.querySelector('.setup-section .setup-actions .btn-tcg');\n if (startGameButton) {\n startGameButton.addEventListener('click', () => { this.startGame(); });\n }\n }\n /*\n hookupCommanderDeathIncrementButtons() {\n const commanderDeathIncremementButtons = document.querySelectorAll('#players-grid .player-card .commander-deaths .death-btn');\n if (commanderDeathIncremementButtons) {\n commanderDeathIncremementButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.changeCommanderDeaths);\n });\n }\n }\n hookupEliminateCommanderButtons() {\n const eliminateCommanderButtons = document.querySelector('#players-grid .player-card .eliminate-btn');\n if (eliminateCommanderButtons) {\n eliminateCommanderButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.toggleEliminate);\n });\n }\n }\n hookupPlayerLifeIncrementButtons() {\n const playerLifeIncrementButtons = document.querySelector('#players-grid .player-card .eliminate-btn');\n if (playerLifeIncrementButtons) {\n playerLifeIncrementButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.changeLife);\n });\n }\n }\n hookupCommanderDamageIncrementButtons() {\n const commanderDamageIncrementButtons = document.querySelector('#players-grid .player-card .eliminate-btn');\n if (commanderDamageIncrementButtons) {\n commanderDamageIncrementButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGame.changeCommanderDamage);\n });\n }\n }\n */\n\n async loadGameFromServer() {\n console.log(\"loading game from server\");\n try {\n // Fetch players, rounds, and damage records from API\n const [playersResponse, roundsResponse, damageResponse] = await Promise.all([\n API.getGamePlayers(gameId)\n , API.getGameRounds(gameId)\n , API.getGameDamageRecords(gameId)\n ]);\n console.log({ playersResponse, damageResponse });\n\n let setupSection = document.getElementById('setupSection');\n let gameSection = document.getElementById('gameSection');\n setupSection.classList.remove('hidden');\n gameSection.classList.add('hidden');\n\n if (playersResponse.status !== 'success') {\n console.error('Failed to load players:', playersResponse.message);\n return;\n }\n\n const savedPlayers = playersResponse.data || [];\n const savedRounds = roundsResponse.status === 'success' ? (roundsResponse.data || []) : [];\n const savedDamageRecords = damageResponse.status === 'success' ? (damageResponse.data || []) : [];\n \n players = savedPlayers;\n rounds = savedRounds;\n damageRecords = savedDamageRecords;\n\n if (savedPlayers.length === 0) {\n // No players yet, show setup section\n return;\n }\n\n // Hide setup, show game\n setupSection.classList.add('hidden');\n gameSection.classList.remove('hidden');\n\n console.log({ savedPlayers, damageRecords });\n\n // Render players to DOM\n this.renderPlayers();\n\n } catch (error) {\n console.error('Error loading game from server:', error);\n }\n }\n\n renderPlayers() {\n const grid = document.getElementById('playersGrid');\n grid.innerHTML = '';\n\n // Build a damage lookup: { playerId: { fromPlayerId: damageAmount } }\n /*\n const damageLookup = {};\n damageRecords.forEach(damage => {\n if (!damageLookup[damage.player_id]) {\n damageLookup[damage.player_id] = {};\n }\n if (damage.received_from_commander_player_id) {\n damageLookup[damage.player_id][damage.received_from_commander_player_id] = damage.health_change || 0;\n }\n });\n */\n const latestRoundId = PageMtgGame.getLatestRoundId();\n\n players.forEach((player, index) => {\n // Build display name: prefer user_name + deck_name, fallback to player name\n const playerId = player[attrPlayerId];\n let displayName = PageMtgGame.makePlayerDisplayName(playerId, index);\n let damagePlayerPairs = [...players, { [attrPlayerId]: null }];\n let maxCommanderDamageReceived = 0;\n damagePlayerPairs.forEach(damagePlayerPair => {\n const sourceId = damagePlayerPair[attrPlayerId];\n const filteredPlayerDamages = damageRecords.filter(damage => (\n damage[attrRoundId] == latestRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == sourceId\n )); //[playerId] || {};\n if (filteredPlayerDamages.length == 0) {\n damageRecords.push(PageMtgGame.makeDefaultGameRoundPlayerDamage(playerId, sourceId));\n }\n maxCommanderDamageReceived = Math.max(\n maxCommanderDamageReceived\n , damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == sourceId\n ))\n .map(damage => damage[flagHealthChange])\n .reduce((acc, curr) => acc + curr, 0)\n );\n });\n\n const totalDamage = damageRecords.filter(damage => ( damage[attrPlayerId] == playerId ))\n .map(damage => damage[flagHealthChange])\n .reduce((acc, curr) => acc + curr, 0);\n let life = startingLife + totalDamage;\n\n let isEliminatedByForce = damageRecords.filter(damage => ( damage[attrPlayerId] == playerId ))\n .map(damage => damage[flagIsEliminated])\n .some(Boolean);\n const isEliminated = (\n isEliminatedByForce\n || !player[flagActive]\n || life < 1\n || maxCommanderDamageReceived >= 21\n );\n\n const playerOwnDamage = damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n && damage[attrRoundId] == latestRoundId\n ))[0];\n const card = document.createElement('div');\n card.className = `player-card ${isEliminated ? 'eliminated' : ''}`;\n card.style.animationDelay = `${index * 0.1}s`;\n card.dataset.playerId = playerId;\n card.dataset.userName = player.user_name || '';\n card.dataset.deckName = player.deck_name || '';\n\n card.innerHTML = `\n
\n
\n
${displayName}
\n
\n Commander Deaths:\n
\n \n ${playerOwnDamage[flagCommanderDeaths]}\n \n
\n
\n
\n \n
\n\n
\n \n
${life}
\n
\n \n \n \n \n
\n
\n\n
\n
Commander Damage Taken
\n
\n ${PageMtgGame.renderCommanderDamageRows(\n playerId // playerId\n , player[attrDeckId] // deckId\n )}\n
\n
\n `;\n\n grid.appendChild(card);\n });\n\n // Hookup all event handlers\n this.hookupPlayerCardEvents();\n }\n static makeDefaultGameRoundPlayerDamage(playerId, receivedFromCommanderPlayerId) {\n let roundId = PageMtgGame.getLatestRoundId();\n return {\n [attrDamageId]: -1 - damageRecords.length\n , [attrRoundId]: roundId\n , [attrPlayerId]: playerId\n , [attrReceivedFromCommanderPlayerId]: receivedFromCommanderPlayerId\n , [flagHealthChange]: 0\n , [flagCommanderDeaths]: 0\n , [flagActive]: true\n };\n }\n static getLatestRoundId() {\n let roundId = -1;\n if (rounds.length > 0) {\n let highestRoundDisplayOrder = Math.max(rounds.map(round => { return round[flagDisplayOrder]; }));\n roundId = rounds.filter(round => round[flagDisplayOrder] == highestRoundDisplayOrder)[0][attrRoundId];\n console.log({ \"method\": \"getLatestRoundId\", highestRoundDisplayOrder, roundId });\n }\n return roundId;\n }\n static makePlayerDisplayName(playerId, index) {\n if (playerId == null) {\n return `Player ${index + 1}`;\n }\n const player = players.filter(player => player[attrPlayerId] == playerId)[0];\n const deckId = player[attrDeckId];\n const deck = (deckId == null) ? null : decks.filter(deck => deck[attrDeckId] == deckId)[0];\n const user = (playerId == null) ? null : users[player[attrUserId]];\n return player[flagName] || `${(user == null) ? 'Error' : user[flagName]} - ${(deck == null) ? 'Error' : deck[flagName]}`;\n }\n static renderCommanderDamageRows(playerId) {\n // const roundId = PageMtgGame.getLatestRoundId();\n return players\n .filter(otherPlayer => otherPlayer[attrPlayerId] !== playerId)\n .map(otherPlayer => {\n const sourceId = otherPlayer[attrPlayerId];\n let otherPlayerDisplayName = PageMtgGame.makePlayerDisplayName(sourceId);\n const totalDamage = damageRecords.filter(damage => (\n damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == sourceId\n ))\n .map(damage => -damage[flagHealthChange])\n .reduce((acc, curr) => acc + curr, 0);\n const isLethal = totalDamage >= 21;\n\n return `\n
\n from ${otherPlayerDisplayName}\n
\n \n \n ${totalDamage}\n \n
\n
\n `;\n })\n .join('');\n }\n\n hookupPlayerCardEvents() {\n // Life buttons\n let lifeButtonSelector = '.life-btn';\n Events.hookupEventHandler(\"click\", lifeButtonSelector, (event, button) => {\n const playerId = button.dataset.playerId;\n const amount = parseInt(button.dataset.amount);\n const latestRoundId = PageMtgGame.getLatestRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == latestRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n this.changeLife(\n playerId // playerId\n , amount // amount\n , true // updateDamage\n , damageIndex // damageIndex\n );\n });\n\n // Commander death buttons\n let commanderDeathButtonSelector = '.death-btn';\n Events.hookupEventHandler(\"click\", commanderDeathButtonSelector, (event, button) => {\n const playerId = button.dataset.playerId;\n const isMinusButton = button.classList.contains('death-minus');\n const amount = (isMinusButton) ? -1 : 1;\n this.changeCommanderDeaths(playerId, amount);\n });\n\n // Commander damage buttons\n let commmanderDamageButtonSelector = '.damage-btn';\n Events.hookupEventHandler(\"click\", commmanderDamageButtonSelector, (event, button) => {\n const playerId = button.dataset.playerId;\n const sourceId = button.dataset.sourceId;\n const isMinusButton = button.classList.contains('damage-minus');\n const amount = (isMinusButton) ? -1 : 1;\n this.changeCommanderDamage(playerId, sourceId, amount);\n });\n\n // Eliminate buttons\n let eliminatePlayerButtonSelector = '.eliminate-btn';\n Events.hookupEventHandler(\"click\", eliminatePlayerButtonSelector, (event, button) => {\n const playerId = button.dataset.playerId;\n this.toggleEliminate(playerId);\n });\n }\n\n changeLife(playerId, amount, updateDamage = false, damageIndex = null) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n if (!card || card.classList.contains('eliminated')) return;\n\n const lifeInput = card.querySelector(`.life-value[data-player-id=\"${playerId}\"]`);\n const lifeDisplay = card.querySelector(`.life-display[data-player-id=\"${playerId}\"]`);\n\n const currentLife = parseInt(lifeInput.value) || 0;\n const newLife = Math.max(0, currentLife + amount);\n DOM.setElementAttributeValueCurrent(lifeDisplay, newLife);\n DOM.isElementDirty(lifeDisplay);\n lifeInput.value = newLife;\n lifeDisplay.textContent = newLife;\n\n if (updateDamage) {\n damageRecords[damageIndex][flagHealthChange] += amount;\n }\n\n // PageMtgGame.debouncedSave();\n this.updateAndToggleShowButtonsSaveCancel();\n }\n\n changeCommanderDamage(playerId, sourceId, amount) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n if (!card || card.classList.contains('eliminated')) return;\n\n const damageInput = card.querySelector(`.damage-value[data-player-id=\"${playerId}\"][data-source-id=\"${sourceId}\"]`);\n const damageDisplay = card.querySelector(`.damage-display[data-player-id=\"${playerId}\"][data-source-id=\"${sourceId}\"]`);\n\n const currentDamage = parseInt(damageInput.value) || 0;\n const newDamage = Math.max(0, currentDamage + amount);\n amount = newDamage - currentDamage;\n DOM.setElementAttributeValueCurrent(damageDisplay, newDamage);\n DOM.isElementDirty(damageDisplay);\n damageInput.value = newDamage;\n damageDisplay.textContent = newDamage;\n\n // Update lethal class\n if (newDamage >= 21) {\n damageDisplay.classList.add('lethal');\n } else {\n damageDisplay.classList.remove('lethal');\n }\n\n const latestRoundId = PageMtgGame.getLatestRoundId();\n const damageIndex = damageRecords.findIndex(damageRecord => (\n damageRecord[attrRoundId] == latestRoundId\n && damageRecord[attrPlayerId] == playerId\n && damageRecord[attrReceivedFromCommanderPlayerId] == sourceId\n ));\n damageRecords[damageIndex][flagHealthChange] -= amount;\n \n this.changeLife(\n playerId // playerId\n , -amount // amount\n , false // updateDamage\n , damageIndex // damageIndex\n );\n // PageMtgGame.debouncedSave();\n }\n\n changeCommanderDeaths(playerId, amount) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n if (!card || card.classList.contains('eliminated')) return;\n\n const deathDisplay = card.querySelector(`.death-display[data-player-id=\"${playerId}\"]`);\n const currentDeaths = parseInt(deathDisplay.textContent) || 0;\n const newDeaths = Math.max(0, currentDeaths + amount);\n\n deathDisplay.textContent = newDeaths;\n DOM.setElementAttributeValueCurrent(deathDisplay, newDeaths);\n DOM.isElementDirty(deathDisplay);\n\n const latestRoundId = PageMtgGame.getLatestRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == latestRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n damageRecords[damageIndex][flagCommanderDeaths] = newDeaths;\n\n // PageMtgGame.debouncedSave();\n this.updateAndToggleShowButtonsSaveCancel();\n }\n\n toggleEliminate(playerId) {\n const card = document.querySelector(`.player-card[data-player-id=\"${playerId}\"]`);\n if (!card) return;\n\n const eliminateBtn = card.querySelector(`.eliminate-btn[data-player-id=\"${playerId}\"]`);\n const wasEliminated = card.classList.contains('eliminated');\n\n if (wasEliminated) {\n card.classList.remove('eliminated');\n eliminateBtn.textContent = 'Eliminate';\n } else {\n card.classList.add('eliminated');\n eliminateBtn.textContent = 'Revive';\n }\n const isEliminated = card.classList.contains('eliminated');\n\n const latestRoundId = PageMtgGame.getLatestRoundId();\n const damageIndex = damageRecords.findIndex(damage => (\n damage[attrRoundId] == latestRoundId\n && damage[attrPlayerId] == playerId\n && damage[attrReceivedFromCommanderPlayerId] == null\n ));\n damageRecords[damageIndex][flagIsEliminated] = isEliminated;\n\n DOM.setElementAttributeValueCurrent(eliminateBtn, isEliminated);\n DOM.isElementDirty(eliminateBtn);\n // PageMtgGame.debouncedSave();\n this.updateAndToggleShowButtonsSaveCancel();\n }\n\n static updatePlayerSetup() {\n const playerCountInput = document.getElementById('playerCount');\n if (!playerCountInput) return;\n\n const playerCount = parseInt(playerCountInput.value);\n const grid = document.getElementById('playerSetupGrid');\n if (!grid) return;\n\n grid.innerHTML = '';\n const wrapperTemplate = document.getElementById(playerSetupWrapperTemplateId);\n let player, wrapper, wrapperHeading, userDdl, deckDdl, nameInput;\n for (let i = 0; i < playerCount; i++) {\n if (i < players.length) {\n player = players[i];\n }\n else {\n player = PageMtgGame.makeDefaultGamePlayer();\n players.push(player);\n }\n wrapper = wrapperTemplate.cloneNode(true);\n wrapper.removeAttribute(\"id\");\n wrapper.setAttribute(flagDisplayOrder, i + 1);\n wrapper.classList.remove(flagIsCollapsed);\n wrapperHeading = wrapper.querySelector('label');\n wrapperHeading.innerText = 'Player ' + (i + 1);\n userDdl = wrapper.querySelector('.playerUser select');\n DOM.setElementValuesCurrentAndPrevious(userDdl, player[attrUserId]);\n deckDdl = wrapper.querySelector('.playerDeck select');\n DOM.setElementValuesCurrentAndPrevious(deckDdl, player[attrDeckId]);\n nameInput = wrapper.querySelector('.playerName input');\n DOM.setElementValuesCurrentAndPrevious(nameInput, player[flagName]);\n console.log('player: ', player);\n grid.appendChild(wrapper);\n }\n }\n static makeDefaultGamePlayer() {\n return {\n [attrPlayerId]: -players.length\n , [attrGameId]: gameId\n , [attrUserId]: user[attrUserId]\n , [attrDeckId]: 0\n , [flagName]: \"\"\n , [flagNotes]: null\n , [flagDisplayOrder]: players.length\n , [flagActive]: true\n };\n }\n\n async startGame() {\n const playerCountInput = document.getElementById('playerCount');\n if (!playerCountInput) return;\n\n const playerCount = parseInt(playerCountInput.value);\n const playersToSave = [];\n\n let playerSetupWrapper, playerId, player, userDdl, userId, deckDdl, deckId, nameInput, name;\n for (let i = 0; i < playerCount; i++) {\n playerSetupWrapper = document.querySelector('.player-name-input-wrapper[' + flagDisplayOrder + '=\"' + (i + 1) + '\"]');\n userDdl = playerSetupWrapper.querySelector('.playerUser select');\n deckDdl = playerSetupWrapper.querySelector('.playerDeck select');\n nameInput = playerSetupWrapper.querySelector('.playerName input');\n \n userId = DOM.getElementValueCurrent(userDdl);\n deckId = DOM.getElementValueCurrent(deckDdl);\n name = nameInput ? nameInput.value.trim() || `Player ${i + 1}` : `Player ${i + 1}`;\n\n playerId = playerSetupWrapper.getAttribute(attrPlayerId);\n player = players.filter(p => p[attrPlayerId] == playerId)[0];\n playersToSave.push({\n ...player\n , [attrGameId]: gameId\n , [attrUserId]: userId\n , [attrDeckId]: deckId\n , [flagName]: name\n , [flagDisplayOrder]: i + 1\n , [flagActive]: true\n });\n }\n\n // Save players to server\n const comment = 'Save players';\n const self = this;\n API.saveGamePlayers(playersToSave, null, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n self.leave();\n window.location.reload();\n }\n else {\n console.error('Failed to save players:', data[flagMessage]);\n PageMtgGame.showError('An error occurred while creating the game');\n }\n })\n .catch(error => {\n console.error('Error creating game:', error);\n PageMtgGame.showError('An error occurred while creating the game');\n })\n .finally(() => {\n });\n }\n\n static resetGame() {\n if (confirm('Are you sure you want to start a new game? Current game will be lost.')) {\n localStorage.removeItem(`mtgGame_${gameId}`);\n window.location.href = hashPageGames;\n }\n }\n\n async saveGame() {\n /*\n const gameState = {\n [flagPlayer]: players\n , [flagRound]: rounds\n , [flagDamage]: damageRecords\n };\n if (gameState[flagPlayer].length > 0) {\n localStorage.setItem(`mtgGame_${gameId}`, JSON.stringify(gameState));\n PageMtgGame.showSaveIndicator();\n }\n */\n const comment = 'Save player damage';\n const self = this;\n API.saveGameRoundPlayerDamages(rounds, damageRecords, null, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n self.leave();\n window.location.reload();\n }\n else {\n console.error('Failed to save players:', data[flagMessage]);\n PageMtgGame.showError('An error occurred while creating the game');\n }\n })\n .catch(error => {\n console.error('Error creating game:', error);\n PageMtgGame.showError('An error occurred while creating the game');\n })\n .finally(() => {\n });\n }\n /*\n static debouncedSave() {\n clearTimeout(PageMtgGame._saveTimeout);\n PageMtgGame._saveTimeout = setTimeout(() => PageMtgGame.saveGame(), 500);\n }\n\n static showSaveIndicator() {\n const indicator = document.getElementById('saveIndicator');\n if (indicator) {\n indicator.classList.add('show');\n setTimeout(() => {\n indicator.classList.remove('show');\n }, 2000);\n }\n }\n */\n saveRecordsTableDirty() {\n this.saveGame();\n }\n static showError(message) {\n // Check if there's an overlay error element\n const errorOverlay = document.getElementById('overlayError');\n if (errorOverlay) {\n const errorLabel = errorOverlay.querySelector('.error-message, #labelError');\n if (errorLabel) {\n errorLabel.textContent = message;\n }\n errorOverlay.classList.remove('hidden');\n errorOverlay.style.display = 'flex';\n } else {\n // Fallback to alert\n alert(message);\n }\n }\n\n leave() {\n super.leave();\n }\n}\n\n// Static timeout reference for debouncing\nPageMtgGame._saveTimeout = null;\n","\nimport API from \"../../api.js\";\nimport TableBasePage from \"../base_table.js\";\nimport Utils from \"../../lib/utils.js\";\n\nexport default class PageMtgGames extends TableBasePage {\n static hash = hashPageMtgGames;\n static attrIdRowObject = attrGameId;\n callSaveTableContent = API.saveGame;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTcgGames();\n }\n hookupTcgGames() {\n this.initGamesPage();\n }\n initGamesPage() {\n // Initialize form submission\n const newGameForm = document.getElementById('newGameForm');\n if (newGameForm) {\n newGameForm.addEventListener('submit', this.handleNewGameSubmit.bind(this)); // () => { this.handleNewGameSubmit.bind(this); });\n }\n\n // Initialize filter form\n const filterForm = document.getElementById('formFilters');\n if (filterForm) {\n filterForm.addEventListener('submit', PageMtgGames.handleFilterSubmit);\n }\n\n // Close modal on escape key\n document.addEventListener('keydown', function(e) {\n if (e.key === 'Escape') {\n PageMtgGames.hideNewGameForm();\n }\n });\n\n // Close modal on backdrop click\n const modal = document.getElementById('newGameModal');\n if (modal) {\n modal.addEventListener('click', function(e) {\n if (e.target === modal) {\n PageMtgGames.hideNewGameForm();\n }\n });\n }\n\n // Button onclicks\n const newGameButton = document.getElementById('btnNewGame');\n if (newGameButton) {\n newGameButton.addEventListener('click', PageMtgGames.showNewGameForm);\n }\n const cancelNewGameButtons = document.querySelectorAll(\n '#newGameForm .form-actions .btn-tcg.btn-tcg-secondary'\n + ','\n + '#newGameModal .modal-content .modal-header .modal-close'\n );\n if (cancelNewGameButtons.length > 0) {\n cancelNewGameButtons.forEach((button) => {\n button.addEventListener('click', PageMtgGames.hideNewGameForm);\n });\n }\n\n }\n static showNewGameForm() {\n const modal = document.getElementById('newGameModal');\n if (modal) {\n modal.classList.remove('hidden');\n document.body.style.overflow = 'hidden';\n\n // Focus on first input\n const firstInput = modal.querySelector('input, select');\n if (firstInput) {\n firstInput.focus();\n }\n }\n }\n static hideNewGameForm() {\n const modal = document.getElementById('newGameModal');\n if (modal) {\n modal.classList.add('hidden');\n document.body.style.overflow = '';\n\n // Reset form\n const form = document.getElementById('newGameForm');\n if (form) {\n form.reset();\n }\n }\n }\n async handleNewGameSubmit(e) {\n e.preventDefault();\n\n const form = e.target;\n const formData = new FormData(form);\n\n const gameType = formData.get('game_type');\n const gameData = {\n [attrGameId]: -1\n , [flagIsCommander]: gameType === 'commander'\n , [flagIsDraft]: gameType === 'draft'\n , [flagIsSealed]: gameType === 'sealed'\n , [flagLocationName]: formData.get(flagLocationName) || null\n , [flagNotes]: formData.get(flagNotes) || null\n , [flagStartOn]: new Date().toISOString()\n , [flagStartingLife]: formData.get(flagStartingLife) || 40\n , [flagActive]: true\n };\n\n const submitBtn = form.querySelector('button[type=\"submit\"]');\n const originalText = submitBtn.textContent;\n submitBtn.textContent = 'Creating...';\n submitBtn.disabled = true;\n\n const games = [gameData];\n const comment = 'Create new game';\n debugger;\n // const self = this;\n API.saveGame(games, form, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n // this.callFilterTableContent(data[attrGameId]); // gameData.game_id\n const gamePageHash = `${hashPageGame}/${data[attrGameId]}`;\n let filtersJson = {};\n this.leave();\n API.goToHash(gamePageHash, filtersJson);\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \" + data[flagMessage]);\n // OverlayError.show(data[flagMessage]);\n window.location.reload();\n }\n })\n .catch(error => {\n console.error('Error creating game:', error);\n PageMtgGames.showError('An error occurred while creating the game');\n })\n .finally(() => {\n submitBtn.textContent = originalText;\n submitBtn.disabled = false;\n });\n \n }\n static handleFilterSubmit(e) {\n // Let the form submit normally - it will reload with query params\n // You can add client-side filtering here if needed\n }\n static getCSRFToken() {\n // Try meta tag first\n const metaTag = document.querySelector('meta[name=\"csrf-token\"]');\n if (metaTag) {\n return metaTag.getAttribute('content');\n }\n\n // Try hidden input\n const hiddenInput = document.querySelector('input[name=\"csrf_token\"]');\n if (hiddenInput) {\n return hiddenInput.value;\n }\n\n // Try cookie\n const cookies = document.cookie.split(';');\n for (let cookie of cookies) {\n const [name, value] = cookie.trim().split('=');\n if (name === 'csrf_token') {\n return value;\n }\n }\n\n return '';\n }\n static showError(message) {\n // Check if there's an overlay error element\n const errorOverlay = document.getElementById('overlayError');\n if (errorOverlay) {\n const errorLabel = errorOverlay.querySelector('.error-message, #labelError');\n if (errorLabel) {\n errorLabel.textContent = message;\n }\n errorOverlay.classList.remove('hidden');\n errorOverlay.style.display = 'flex';\n } else {\n // Fallback to alert\n alert(message);\n }\n }\n static showSuccess(message) {\n // Could implement a toast notification here\n console.log('Success:', message);\n }\n static joinGame(gameId) {\n window.location.href = `${hashPageGame}/${gameId}`;\n }\n static async deleteGame(gameId) {\n if (!confirm('Are you sure you want to delete this game? This action cannot be undone.')) {\n return;\n }\n\n try {\n const gameData = {\n 'game_id': gameId,\n 'active': false\n };\n\n const response = await fetch(hashSaveGame, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRFToken': PageMtgGames.getCSRFToken()\n },\n body: JSON.stringify({\n [flagGame]: [gameData],\n 'form-filters': {},\n 'comment': 'Game deleted'\n })\n });\n\n const result = await response.json();\n\n if (result.status === 'success') {\n // Remove the row from the table\n const row = document.querySelector(`tr[data-game-id=\"${gameId}\"]`);\n if (row) {\n row.style.animation = 'tcg-fadeOut 0.3s ease-out forwards';\n setTimeout(() => row.remove(), 300);\n }\n } else {\n PageMtgGames.showError(result.message || 'Failed to delete game');\n }\n } catch (error) {\n console.error('Error deleting game:', error);\n PageMtgGames.showError('An error occurred while deleting the game');\n }\n }\n\n toggleShowButtonsSaveCancel() {}\n leave() {\n super.leave();\n }\n}\n","\n\nimport API from \"../../api.js\";\nimport BasePage from \"../base.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\n\nexport default class PageMtgHome extends BasePage {\n static hash = hashPageMtgHome;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTcgHome();\n }\n\n hookupTcgHome() {\n }\n\n leave() {\n super.leave();\n }\n}\n","import BasePage from \"../base.js\";\n\nexport default class PageAccessibilityReport extends BasePage {\n static hash = hashPageAccessibilityReport;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","import BasePage from \"../base.js\";\n\nexport default class PageAccessibilityStatement extends BasePage {\n static hash = hashPageAccessibilityStatement;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","\nimport BasePage from \"../base.js\";\n\nexport default class PageLicense extends BasePage {\n static hash = hashPageLicense;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}","\nimport BasePage from \"../base.js\";\n\nexport default class PagePrivacyPolicy extends BasePage {\n static hash = hashPagePrivacyPolicy;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}","import BasePage from \"../base.js\";\n\nexport default class PageRetentionSchedule extends BasePage {\n static hash = hashPageDataRetentionSchedule;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","\n\nexport default class MixinPage {\n constructor(pageCurrent) {\n this.page = pageCurrent;\n }\n\n initialize() {\n Utils.consoleLogIfNotProductionEnvironment('hookup start for ', this.page.hash);\n this.hookupFilters();\n this.hookupLocalStorage();\n }\n hookupFilters() {\n }\n hookupLocalStorage() {\n \n }\n \n leave() {}\n}\n","\nimport MixinPage from \"./mixin.js\";\n\nexport default class TableMixinPage extends MixinPage {\n constructor(pageCurrent) {\n super(pageCurrent);\n }\n initialize() {\n super.initialize();\n this.hookupFilters();\n this.hookupTable();\n }\n hookupFilters() {\n // Implement filter-specific functionality here\n }\n hookupTable() {\n // Implement table-specific functionality here\n }\n}","\nimport API from \"../../api.js\";\nimport TableMixinPage from \"../mixin_table.js\";\nimport DOM from \"../../dom.js\";\nimport TableBasePage from \"../base_table.js\";\n\nexport default class PageUser extends TableBasePage {\n static hash = hashPageUserAccount;\n static attrIdRowObject = attrUserId;\n callSaveTableContent = API.saveUsers;\n\n constructor(router) {\n super(router);\n this.mixin = new TableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupTableMain();\n }\n\n\n hookupFilters() {\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getTableRecords(dirtyOnly = false) {\n dirtyOnly = true;\n let container = document.querySelector('.' + flagCard + '.' + flagUser);\n return [this.getJsonRow(container)];\n }\n getJsonRow(container) {\n console.log(\"getJsonRow: \", container);\n if (container == null) return;\n let inputFirstname = container.querySelector(' #' + flagFirstname);\n let inputSurname = container.querySelector(' #' + flagSurname);\n let inputEmail = container.querySelector(' #' + flagEmail);\n\n let idUser = container.getAttribute(attrUserId);\n \n let jsonRow = {\n [attrUserAuth0Id]: null\n , [flagEmail]: null\n , [flagIsEmailVerified]: null\n , [flagIsSuperUser]: null\n , [flagCanAdminUser]: null\n };\n\n jsonRow[attrUserId] = idUser;\n jsonRow[flagFirstname] = DOM.getElementAttributeValueCurrent(inputFirstname);\n jsonRow[flagSurname] = DOM.getElementAttributeValueCurrent(inputSurname);\n jsonRow[flagEmail] = DOM.getElementAttributeValueCurrent(inputEmail);\n return jsonRow;\n }\n \n initialiseRowNew(tbody, row) {\n }\n postInitialiseRowNewCallback(tbody) {\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsFirstname();\n this.hookupFieldsSurname();\n this.hookupFieldsEmail();\n }\n hookupFieldsFirstname() {\n this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagFirstname);\n }\n hookupFieldsSurname() {\n this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagSurname);\n }\n hookupFieldsEmail() {\n this.hookupChangeHandlerTableCells('.' + flagCard + '.' + flagUser + ' #' + flagEmail);\n }\n\n leave() {\n super.leave();\n }\n}\n","\nimport API from \"../../api\";\nimport TableMixinPage from \"../mixin_table\";\nimport DOM from \"../../dom\";\nimport TableBasePage from \"../base_table\";\nimport Utils from \"../../lib/utils\";\n\nexport default class PageUsers extends TableBasePage {\n static hash = hashPageUserAccounts;\n static attrIdRowObject = attrUserId;\n callSaveTableContent = API.saveUsers;\n\n constructor(router) {\n super(router);\n this.mixin = new TableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n hookupFilters() {\n this.sharedHookupFilters();\n this.hookupFilterActive();\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n if (row == null) return;\n let inputFirstname = row.querySelector('td.' + flagFirstname + ' .' + flagFirstname);\n let inputSurname = row.querySelector('td.' + flagSurname + ' .' + flagSurname);\n let inputNotes = row.querySelector('td.' + flagNotes + ' .' + flagNotes);\n let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);\n\n let jsonRow = {\n [attrUserAuth0Id]: null\n , [flagEmail]: null\n , [flagIsEmailVerified]: null\n , [flagIsSuperUser]: null\n , [flagCanAdminUser]: null\n };\n jsonRow[attrUserId] = row.getAttribute(attrUserId);\n jsonRow[flagFirstname] = DOM.getElementAttributeValueCurrent(inputFirstname);\n jsonRow[flagSurname] = DOM.getElementAttributeValueCurrent(inputSurname);\n jsonRow[flagNotes] = DOM.getElementAttributeValueCurrent(inputNotes);\n jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);\n\n console.log(\"jsonRow\");\n console.log(jsonRow);\n\n return jsonRow;\n }\n \n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n let newRows = tbody.querySelectorAll('tr.' + flagRowNew);\n let newestRow = newRows[0];\n let clickableElementsSelector = [].join('');\n newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {\n clickableElement.click();\n });\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsFirstname();\n this.hookupFieldsSurname();\n this.hookupFieldsNotesTable();\n this.hookupFieldsActive();\n }\n hookupFieldsFirstname() {\n this.hookupChangeHandlerTableCells(flagFirstname);\n }\n hookupFieldsSurname() {\n this.hookupChangeHandlerTableCells(flagSurname);\n }\n\n leave() {\n super.leave();\n }\n}\n","\n// Pages\n// Core\n// TCG\nimport PageMtgGame from './pages/tcg/mtg_game.js';\nimport PageMtgGames from './pages/tcg/mtg_games.js';\nimport PageMtgHome from './pages/tcg/mtg_home.js';\n// Legal\nimport PageAccessibilityReport from './pages/legal/accessibility_report.js';\nimport PageAccessibilityStatement from './pages/legal/accessibility_statement.js';\nimport PageLicense from './pages/legal/license.js';\nimport PagePrivacyPolicy from './pages/legal/privacy_policy.js';\nimport PageRetentionSchedule from './pages/legal/retention_schedule.js';\n// User\n// import PageUserLogin from './pages/user/login.js';\n// import PageUserLogout from './pages/user/logout.js';\nimport PageUser from './pages/user/user.js';\nimport PageUsers from './pages/user/users.js';\n\nimport API from './api.js';\nimport DOM from './dom.js';\nimport Utils from './lib/utils.js';\n\n\nexport default class Router {\n constructor() {\n // Pages\n this.pages = {};\n // Core\n // TCG\n this.pages[hashPageMtgGame] = { name: 'PageMtgGame', module: PageMtgGame };\n this.pages[hashPageMtgGames] = { name: 'PageMtgGames', module: PageMtgGames };\n this.pages[hashPageMtgHome] = { name: 'PageMtgGame', module: PageMtgHome };\n // Legal\n this.pages[hashPageAccessibilityStatement] = { name: 'PageAccessibilityStatement', module: PageAccessibilityStatement };\n this.pages[hashPageDataRetentionSchedule] = { name: 'PageDataRetentionSchedule', module: PageRetentionSchedule };\n this.pages[hashPageLicense] = { name: 'PageLicense', module: PageLicense };\n this.pages[hashPagePrivacyPolicy] = { name: 'PagePrivacyPolicy', module: PagePrivacyPolicy };\n // User\n // this.pages[hashPageUserLogin] = { name: 'PageUserLogin', module: PageUserLogin }; // pathModule: './pages/user/login.js' };\n // this.pages[hashPageUserLogout] = { name: 'PageUserLogout', module: PageUserLogout }; // pathModule: './pages/user/logout.js' };\n this.pages[hashPageUserAccount] = { name: 'PageUser', module: PageUser };\n this.pages[hashPageUserAccounts] = { name: 'PageUsers', module: PageUsers };\n // Routes\n this.routes = {};\n // Core\n // TCG\n this.routes[hashPageMtgGame] = (isPopState = false) => this.navigateToHash(hashPageMtgGame, isPopState);\n this.routes[hashPageMtgGames] = (isPopState = false) => this.navigateToHash(hashPageMtgGames, isPopState);\n this.routes[hashPageMtgHome] = (isPopState = false) => this.navigateToHash(hashPageMtgHome, isPopState);\n // Legal\n this.routes[hashPageAccessibilityStatement] = (isPopState = false) => this.navigateToHash(hashPageAccessibilityStatement, isPopState);\n this.routes[hashPageDataRetentionSchedule] = (isPopState = false) => this.navigateToHash(hashPageDataRetentionSchedule, isPopState);\n this.routes[hashPageLicense] = (isPopState = false) => this.navigateToHash(hashPageLicense, isPopState);\n this.routes[hashPagePrivacyPolicy] = (isPopState = false) => this.navigateToHash(hashPagePrivacyPolicy, isPopState);\n // User\n // this.routes[hashPageUserLogin] = (isPopState = false) => this.navigateToHash(hashPageUserLogin, isPopState);\n // this.routes[hashPageUserLogout] = (isPopState = false) => this.navigateToHash(hashPageUserLogout, isPopState);\n this.routes[hashPageUserAccount] = (isPopState = false) => this.navigateToHash(hashPageUserAccount, isPopState);\n this.routes[hashPageUserAccounts] = (isPopState = false) => this.navigateToHash(hashPageUserAccounts, isPopState);\n this.initialize();\n }\n loadPage(hashPage, isPopState = false) {\n const PageClass = this.getClassPageFromHash(hashPage);\n this.currentPage = new PageClass(this);\n this.currentPage.initialize(isPopState);\n window.addEventListener('beforeunload', () => this.currentPage.leave());\n }\n getClassPageFromHash(hashPage) {\n \n let pageJson = this.pages[hashPage];\n try {\n const module = pageJson.module;\n return module; \n }\n catch (error) {\n Utils.consoleLogIfNotProductionEnvironment(\"this.pages: \", this.pages);\n console.error('Page not found:', hashPage);\n throw error;\n }\n }\n initialize() {\n window.addEventListener('popstate', this.handlePopState.bind(this));\n }\n handlePopState(event) {\n this.loadPageCurrent();\n }\n loadPageCurrent() {\n const hashPageCurrent = DOM.getHashPageCurrent();\n this.loadPage(hashPageCurrent);\n }\n navigateToHash(hash, data = null, params = null, isPopState = false) {\n let url = API.getUrlFromHash(hash, params);\n history.pushState({data: data, params: params}, '', hash);\n API.goToUrl(url, data);\n }\n \n navigateToUrl(url, data = null, appendHistory = true) {\n // this.beforeLeave();\n if (appendHistory) history.pushState(data, '', url);\n url = API.parameteriseUrl(url, data);\n API.goToUrl(url);\n }\n\n static loadPageBodyFromResponse(response) {\n DOM.loadPageBody(response.data);\n }\n}\n\nexport const router = new Router();\n","\n'use strict';\n\nimport DOM from './dom.js';\nimport Router from './router.js';\n\n\nclass App {\n constructor() {\n this.dom = new DOM();\n this.router = new Router();\n }\n\n initialize() {\n this.setupEventListeners();\n this.start();\n }\n\n setupEventListeners() {\n // document.addEventListener('click', this.handleGlobalClick.bind(this));\n }\n\n handleGlobalClick(event) {\n }\n\n start() {\n this.initPageCurrent();\n }\n\n initPageCurrent() {\n this.router.loadPageCurrent();\n }\n \n}\n\nconst app = new App();\n\nfunction domReady(fn) {\n if (document.readyState !== 'loading') {\n fn();\n } else {\n document.addEventListener('DOMContentLoaded', fn);\n }\n}\n\ndomReady(() => {\n app.initialize();\n});\n\nwindow.app = app;\n\nexport default app;","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};"],"names":["Validation","isEmpty","object","undefined","length","isString","trim","i","isValidNumber","value","positiveOnly","isNaN","parseFloat","getDataContentType","params","data","contentType","JSON","stringify","Data","ContentType","arrayContainsItem","array","itemValue","hasItem","isJQueryElementArray","jQuery","document","querySelectorAll","is","isDate","Date","getTime","dictHasKey","d","k","areEqualDicts","dict1","dict2","keys1","Object","keys","keys2","key","imageExists","url","callback","img","Image","onload","onerror","src","toFixedOrDefault","decimalPlaces","defaultValue","toFixed","Utils","DOM","setElementAttributesValuesCurrentAndPrevious","element","setElementAttributeValueCurrent","setElementAttributeValuePrevious","setAttribute","attrValueCurrent","attrValuePrevious","setElementValuesCurrentAndPrevious","setElementValueCurrent","tagName","toUpperCase","type","checked","textContent","setElementValueCurrentIfEmpty","getElementValueCurrent","getCellFromElement","closest","getRowFromElement","flagRow","selector","getClosestParent","parentSelector","parent","parentElement","matches","convertForm2JSON","elementForm","dataForm","containersFilter","flagContainerInput","flagFilter","containerFilter","labelFilter","keyFilter","filter","indexFilter","querySelector","getAttribute","loadPageBody","contentNew","pageBody","idPageBody","innerHTML","getHashPageCurrent","hashPageCurrent","body","dataset","page","updateAndCheckIsElementDirty","isElementDirty","isDirty","handleDirtyElement","toggleElementHasClassnameFlag","flagDirty","elementHasFlag","flag","elementAlreadyHasFlag","classList","contains","add","remove","hasDirtyChildrenContainer","container","hasDirtyChildrenNotDeletedContainer","flagDelete","returnVal","flagButton","flagActive","getElementAttributeValueCurrent","flagCheckbox","flagIsChecked","getElementAttributeValuePrevious","scrollToElement","scrollTop","offset","top","isElementInContainer","containerBounds","getBoundingClientRect","elementBounds","left","height","width","alertError","errorType","errorText","alert","createOptionUnselectedProductVariation","flagProductVariationType","flagNameAttrOptionText","flagName","flagNameAttrOptionValue","attrIdProductVariationType","flagProductVariation","attrIdProductVariation","createOption","optionJson","text","option","createElement","selected","escapeHtml","div","unescapeHtml","html","innerText","API","getCsrfToken","idCSRFToken","request","hashEndpoint","method","getUrlFromHash","csrfToken","options","headers","flagCsrfToken","response","fetch","ok","Error","status","json","error","console","hash","hashPageHome","parameteriseUrl","_pathHost","URLSearchParams","toString","goToUrl","window","location","href","goToHash","loginUser","flagCallback","hashPageUserLogin","saveUsers","users","formFilters","comment","dataRequest","flagFormFilters","flagUser","flagComment","hashSaveUserUser","saveGame","game","flagGame","hashSaveGame","getGamePlayers","gameId","saveGamePlayers","players","flagPlayer","hashSaveGamePlayer","getGameRounds","getGameDamageRecords","saveGameRoundPlayerDamages","rounds","damages","flagDamage","flagRound","hashSaveGameRoundPlayerDamage","BusinessObjects","getOptionJsonFromObjectJsonAndKeys","objectJson","keyText","keyValue","valueSelected","getOptionJsonFromObjectJson","getObjectText","getListObjectsFromIdDictAndCsv","idDict","idCsv","listObjects","ids","split","id","push","Events","initialiseEventHandler","selectorElement","classInitialised","eventHandler","forEach","hookupEventHandler","eventType","flagInitialised","addEventListener","event","stopPropagation","LocalStorage","getLocalStorage","parse","localStorage","getItem","setLocalStorage","newLS","setItem","getListFromDict","dict","list","consoleLogIfNotProductionEnvironment","message","environment","is_production","log","OverlayConfirm","hookup","callbackSuccess","idOverlayConfirm","flagCancel","buttonCancel","overlay","style","visibility","flagSubmit","buttonConfirm","textarea","show","flagIsCollapsed","OverlayError","BasePage","constructor","router","title","titlePageCurrent","name","initialize","sharedInitialize","logInitialisation","hookupCommonElements","hookupLogos","hookupNavigation","hookupOverlays","flagImageLogo","flagLogo","navigateToHash","idButtonHamburger","overlayHamburger","idOverlayHamburger","flagExpanded","hookupButtonsNavUserAccount","hookupButtonsNavUserLogout","hookupButtonsNavUserLogin","hookupButtonsNav","buttonSelector","button","pageHash","flagNavUserLogin","navigator","preventDefault","leave","then","Success","Message","hookupOverlayFromId","idOverlayError","idOverlay","display","hookupButtonSave","flagContainer","flagSave","target","setLocalStoragePage","dataPage","getLocalStoragePage","toggleShowButtonsSaveCancel","buttonContainerSelector","buttonSave","idButtonSave","idButtonCancel","isDirtyFilter","idTableMain","msgError","labelError","idLabelError","TableBasePage","cursorYInitial","rowInitial","placeholder","dragSrcEl","dragSrcRow","hookupTableCellDdls","bind","isPopState","isSinglePageApp","hookupFilters","hookupButtonsSaveCancel","hookupTableMain","saveRecordsTableDirtySinglePageApp","saveRecordsTableDirty","filters","getFormFilters","filtersDefault","callFilterTableContent","sharedHookupFilters","hookupButtonApplyFilters","hookupSearchTextFilter","hookupFilterActive","filterSelector","idFormFilters","flagActiveOnly","filterActiveOld","removeAttribute","parentDiv","isChecked","filterActiveNew","filterActive","svgElement","wasChecked","handleChangeFilter","filterValuePrevious","hookupFilter","filterFlag","handler","areDirtyFilters","tbody","rows","row","dirtyInputs","dirtyInput","isDirtyLabel","initialisedElements","initialisedElement","updateAndToggleShowButtonsSaveCancel","hookupFilterIsNotEmpty","flagIsNotEmpty","idButtonApplyFilters","flagSearch","hookupFilterCommandCategory","attrIdCommandCategory","filterCommandCategory","idCommandCategory","filterCommands","commandsInCategory","command","sortedCommands","sort","a","b","localeCompare","filterCommand","flagCommand","idCommandPrevious","appendChild","dispatchEvent","Event","hookupFilterCommand","attrIdCommand","hookupFilterLocation","attrIdLocation","filtersJson","callbackLoadTableContent","table","getTableMain","bodyTable","rowsJson","flagRows","every","hasOwnProperty","display_order","loadRowTable","rowJson","getAndLoadFilteredTableContentSinglePageApp","catch","hookupButtonCancel","records","getTableRecords","formElement","idTextareaConfirm","callSaveTableContent","flagStatus","flagSuccess","_verbose","flagMessage","dirtyOnly","record","getJsonRow","handleClickAddRowTable","_rowBlank","attrIdRowObject","cloneNode","countRows","initialiseRowNew","prepend","postInitialiseRowNewCallback","cacheRowBlank","selectorRowNew","flagRowNew","rowBlankTemp","initialiseSliderDisplayOrderRowNew","slidersDisplayOrder","flagDisplayOrder","flagSlider","maxDisplayOrder","slider","Math","max","sliderDisplayOrder","hookupSlidersDisplayOrderTable","selectorDisplayOrder","hookupChangeHandlerTableCells","inputSelector","handleChangeNestedElementCellTable","input","wasDirtyParentRows","getAllIsDirtyRowsInParentTree","wasDirtyElement","isDirtyElement","cascadeChangedIsDirtyNestedElementCellTable","tr","isDirtyRow","wasDirtyRow","shift","hookupChangeHandlerTableCellsWhenNotCollapsed","hookupFieldsCodeTable","flagCode","hookupFieldsNameTable","hookupFieldsDescriptionTable","flagDescription","hookupFieldsNotesTable","flagNotes","hookupFieldsActive","flagTable","handleClickRowNew","selectorButton","selectorButtonDelete","selectorButtonUndelete","hookupButtonsRowDelete","hookupButtonsRowUndelete","changeHandler","handleClickButtonRowDelete","changeEvent","changeElement","valuePrevious","wasDirty","parentNode","removeChild","buttonAddTemplate","idContainerTemplateElements","flagAdd","buttonAdd","replaceWith","handleClickButtonRowUndelete","buttonDeleteTemplate","buttonDelete","hookupTdsAccessLevel","hookupTableCellDdlPreviews","flagAccessLevel","accessLevels","fieldFlag","optionList","cellSelector","ddlHookup","ddlSelector","handleClickTableCellDdlPreview","optionObjectList","idSelected","td","ddl","optionObjectJson","toggleColumnCollapsed","flagColumn","isCollapsed","toggleColumnHasClassnameFlag","toggleColumnHeaderCollapsed","hookupFieldsCommandCategory","idTable","flagCommandCategory","filterCommandCategories","hookupCommandCategoryDdls","handleChangeCommandCategoryDdl","ddlCategory","idCommandCategoryRowOld","getIdCommandCategoryRow","idCommandCategoryRowNew","idCommandCategoryFilter","getIdCommandCategoryFilter","tdCommand","ddlCommand","hookupFieldsCommand","parentTr","tdCommandCategory","idCommandCategoryRow","filterCommandList","handleChangeCommandDdl","idCommandNew","getIdCommandRow","commandNew","divCommandCategory","ddlCommandCategory","elementCommandCategory","commandCategoryFilter","commandFilter","valueCurrentCommandCategoryFilter","valueCurrentCommandFilter","Number","getHasCommandCategoryFilter","elementCommand","getIdCommandFilter","idCommand","getHasCommandFilter","idCommandFilter","columnFlag","isRequiredFlag","classnameFlag","columnTh","columnThHasFlag","toggleColumnHeaderHasClassnameFlag","PageMtgGame","hashPageMtgGame","attrGameId","hookupTcgGame","initGamePage","pageHeading","updatePlayerSetup","loadGameFromServer","hookupResetButton","hookupPlayerCountInput","hookupStartGameButton","resetGameButton","resetGame","playerCountInput","getElementById","startGameButton","startGame","playersResponse","roundsResponse","damageResponse","Promise","all","setupSection","gameSection","savedPlayers","savedRounds","savedDamageRecords","damageRecords","renderPlayers","grid","latestRoundId","getLatestRoundId","player","index","playerId","attrPlayerId","displayName","makePlayerDisplayName","damagePlayerPairs","maxCommanderDamageReceived","damagePlayerPair","sourceId","filteredPlayerDamages","damage","attrRoundId","attrReceivedFromCommanderPlayerId","makeDefaultGameRoundPlayerDamage","map","flagHealthChange","reduce","acc","curr","totalDamage","life","startingLife","isEliminatedByForce","flagIsEliminated","some","Boolean","isEliminated","playerOwnDamage","card","className","animationDelay","userName","user_name","deckName","deck_name","flagCommanderDeaths","renderCommanderDamageRows","attrDeckId","hookupPlayerCardEvents","receivedFromCommanderPlayerId","roundId","attrDamageId","highestRoundDisplayOrder","round","deckId","deck","decks","user","attrUserId","otherPlayer","otherPlayerDisplayName","isLethal","join","lifeButtonSelector","amount","parseInt","damageIndex","findIndex","changeLife","commanderDeathButtonSelector","isMinusButton","changeCommanderDeaths","commmanderDamageButtonSelector","changeCommanderDamage","eliminatePlayerButtonSelector","toggleEliminate","updateDamage","lifeInput","lifeDisplay","currentLife","newLife","damageInput","damageDisplay","currentDamage","newDamage","damageRecord","deathDisplay","currentDeaths","newDeaths","eliminateBtn","wasEliminated","playerCount","wrapperTemplate","playerSetupWrapperTemplateId","wrapper","wrapperHeading","userDdl","deckDdl","nameInput","makeDefaultGamePlayer","playersToSave","playerSetupWrapper","userId","p","self","reload","showError","finally","confirm","removeItem","hashPageGames","errorOverlay","errorLabel","_saveTimeout","PageMtgGames","hashPageMtgGames","hookupTcgGames","initGamesPage","newGameForm","handleNewGameSubmit","filterForm","handleFilterSubmit","e","hideNewGameForm","modal","newGameButton","showNewGameForm","cancelNewGameButtons","overflow","firstInput","focus","form","reset","formData","FormData","gameType","get","gameData","flagIsCommander","flagIsDraft","flagIsSealed","flagLocationName","flagStartOn","toISOString","flagStartingLife","submitBtn","originalText","disabled","games","gamePageHash","hashPageGame","getCSRFToken","metaTag","hiddenInput","cookies","cookie","showSuccess","joinGame","deleteGame","result","animation","setTimeout","PageMtgHome","hashPageMtgHome","hookupTcgHome","PageAccessibilityReport","hashPageAccessibilityReport","PageAccessibilityStatement","hashPageAccessibilityStatement","PageLicense","hashPageLicense","PagePrivacyPolicy","hashPagePrivacyPolicy","PageRetentionSchedule","hashPageDataRetentionSchedule","MixinPage","pageCurrent","hookupLocalStorage","TableMixinPage","hookupTable","PageUser","hashPageUserAccount","mixin","flagCard","inputFirstname","flagFirstname","inputSurname","flagSurname","inputEmail","flagEmail","idUser","jsonRow","attrUserAuth0Id","flagIsEmailVerified","flagIsSuperUser","flagCanAdminUser","hookupFieldsFirstname","hookupFieldsSurname","hookupFieldsEmail","PageUsers","hashPageUserAccounts","inputNotes","buttonActive","newRows","newestRow","clickableElementsSelector","clickableElement","click","Router","pages","module","routes","loadPage","hashPage","PageClass","getClassPageFromHash","currentPage","pageJson","handlePopState","loadPageCurrent","history","pushState","navigateToUrl","appendHistory","loadPageBodyFromResponse","App","dom","setupEventListeners","start","handleGlobalClick","initPageCurrent","app","domReady","fn","readyState"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/pages/tcg/mtg_game.js b/static/js/pages/tcg/mtg_game.js index 274c034..867692b 100644 --- a/static/js/pages/tcg/mtg_game.js +++ b/static/js/pages/tcg/mtg_game.js @@ -438,7 +438,7 @@ export default class PageMtgGame extends TableBasePage { const latestRoundId = PageMtgGame.getLatestRoundId(); const damageIndex = damageRecords.findIndex(damageRecord => ( - damage[attrRoundId] == latestRoundId + damageRecord[attrRoundId] == latestRoundId && damageRecord[attrPlayerId] == playerId && damageRecord[attrReceivedFromCommanderPlayerId] == sourceId )); @@ -616,18 +616,18 @@ export default class PageMtgGame extends TableBasePage { } async saveGame() { + /* const gameState = { [flagPlayer]: players , [flagRound]: rounds , [flagDamage]: damageRecords }; - /* if (gameState[flagPlayer].length > 0) { localStorage.setItem(`mtgGame_${gameId}`, JSON.stringify(gameState)); PageMtgGame.showSaveIndicator(); } */ - const comment = 'Save players'; + const comment = 'Save player damage'; const self = this; API.saveGameRoundPlayerDamages(rounds, damageRecords, null, comment) .then(data => { diff --git a/static/js/pages/tcg/mtg_games.js b/static/js/pages/tcg/mtg_games.js index f2b3c7c..0e69c5d 100644 --- a/static/js/pages/tcg/mtg_games.js +++ b/static/js/pages/tcg/mtg_games.js @@ -17,13 +17,13 @@ export default class PageMtgGames extends TableBasePage { this.hookupTcgGames(); } hookupTcgGames() { - PageMtgGames.initGamesPage(); + this.initGamesPage(); } - static initGamesPage() { + initGamesPage() { // Initialize form submission const newGameForm = document.getElementById('newGameForm'); if (newGameForm) { - newGameForm.addEventListener('submit', PageMtgGames.handleNewGameSubmit); + newGameForm.addEventListener('submit', this.handleNewGameSubmit.bind(this)); // () => { this.handleNewGameSubmit.bind(this); }); } // Initialize filter form @@ -92,7 +92,7 @@ export default class PageMtgGames extends TableBasePage { } } } - static async handleNewGameSubmit(e) { + async handleNewGameSubmit(e) { e.preventDefault(); const form = e.target; @@ -119,6 +119,7 @@ export default class PageMtgGames extends TableBasePage { const games = [gameData]; const comment = 'Create new game'; debugger; + // const self = this; API.saveGame(games, form, comment) .then(data => { if (data[flagStatus] == flagSuccess) { @@ -126,7 +127,11 @@ export default class PageMtgGames extends TableBasePage { Utils.consoleLogIfNotProductionEnvironment('Records saved!'); Utils.consoleLogIfNotProductionEnvironment('Data received:', data); } - this.callFilterTableContent(gameData.game_id); + // this.callFilterTableContent(data[attrGameId]); // gameData.game_id + const gamePageHash = `${hashPageGame}/${data[attrGameId]}`; + let filtersJson = {}; + this.leave(); + API.goToHash(gamePageHash, filtersJson); } else { Utils.consoleLogIfNotProductionEnvironment("error: " + data[flagMessage]); @@ -144,13 +149,6 @@ export default class PageMtgGames extends TableBasePage { }); } - callFilterTableContent(gameId) { - const gamePageHash = `${hashPageGame}/${gameId}`; - let filtersJson = {}; - Utils.consoleLogIfNotProductionEnvironment("callFilterTableContent"); - this.leave(); - API.goToHash(gamePageHash, filtersJson); - } static handleFilterSubmit(e) { // Let the form submit normally - it will reload with query params // You can add client-side filtering here if needed diff --git a/templates/pages/tcg/mtg/_game.html b/templates/pages/tcg/mtg/_game.html index 851e378..f52901a 100644 --- a/templates/pages/tcg/mtg/_game.html +++ b/templates/pages/tcg/mtg/_game.html @@ -39,7 +39,7 @@
- +
@@ -164,5 +164,4 @@ var user = {{ model.user.to_json() | tojson | safe }}; var users = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.users) | tojson | safe }}; - {# #} {% endblock %}