Files
Beuz-Video-Game/index.html

293 lines
12 KiB
HTML

<!doctype html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Ma Collection Jeux Video</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;700&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<header class="topbar">
<div class="topbar-brand">
<p class="eyebrow">Collection Manager</p>
<h1>Collection Jeux Video</h1>
</div>
<nav class="topbar-nav" aria-label="Navigation principale">
<button type="button" class="topnav-btn active" data-view="catalogue">Catalogue</button>
<button type="button" class="topnav-btn" data-view="loans">Prets</button>
<button type="button" class="topnav-btn" data-view="stats">Statistiques</button>
<button id="toolsToggleBtn" type="button" class="topnav-btn">Outils</button>
</nav>
</header>
<button id="gamesToggleBtn" type="button" class="games-toggle-btn">Jeux</button>
<div id="drawerBackdrop" class="drawer-backdrop hidden" aria-hidden="true"></div>
<aside id="toolsDrawer" class="tools-drawer" aria-label="Menu outils">
<div class="tools-header">
<h2>Outils</h2>
<button id="toolsCloseBtn" type="button" class="btn-secondary tools-close-btn">Fermer</button>
</div>
<p class="tools-subtitle">Sauvegarde, restauration et migration.</p>
<p id="storageState" class="storage-state">Etat: detection...</p>
<button id="migrateBtn" type="button" class="btn-secondary hidden">
Migrer localStorage vers DB
</button>
<div id="backupControls" class="backup-controls hidden">
<button id="backupBtn" type="button" class="btn-secondary">Sauvegarder JSON</button>
<button id="restoreMergeBtn" type="button" class="btn-secondary">Restaurer (fusion)</button>
<button id="restoreReplaceBtn" type="button" class="btn-secondary">Restaurer (remplacement)</button>
<input id="restoreFileInput" type="file" accept="application/json" class="hidden" />
</div>
<div class="google-section">
<h3 class="google-title">☁ Google Drive Backup</h3>
<p id="googleDriveState" class="google-state">Etat Google Drive: detection...</p>
<div class="backup-controls">
<button id="googleConnectBtn" type="button" class="btn-secondary">Connecter Google</button>
<button id="googleBackupBtn" type="button" class="btn-secondary">Sauvegarder sur Drive</button>
<button id="googleRestoreBtn" type="button" class="btn-secondary">Restaurer depuis Drive</button>
</div>
</div>
</aside>
<aside id="gamesDrawer" class="games-drawer" aria-label="Menu jeux">
<div class="tools-header">
<h2>Jeux</h2>
<button id="gamesCloseBtn" type="button" class="btn-secondary tools-close-btn">Fermer</button>
</div>
<p class="tools-subtitle">Vue rapide globale de ta collection.</p>
<div class="quick-stats">
<article class="stat-card">
<p class="stat-label">Nombre total de jeux</p>
<p id="totalGamesCount" class="stat-value">0</p>
</article>
<article class="stat-card">
<p class="stat-label">Valeur totale estimee</p>
<p id="totalGamesValue" class="stat-value">0.00 EUR</p>
</article>
</div>
</aside>
<main class="app-shell v3-layout">
<aside class="v3-sidebar panel">
<section class="sidebar-block">
<h2 class="sidebar-title">Plateformes et consoles</h2>
<form id="platformForm" class="grid-form">
<label>
Marque (ex: SONY)
<input id="brandInput" required placeholder="SONY" />
</label>
<label>
Console (ex: PlayStation 5)
<input id="consoleInput" required placeholder="PlayStation 5" />
</label>
<button type="submit">Ajouter section</button>
</form>
</section>
<section class="sidebar-block">
<div id="brandTabs" class="tabs" aria-label="Onglets marques"></div>
<div id="consoleTabs" class="tabs secondary" aria-label="Onglets consoles"></div>
</section>
</aside>
<section class="v3-main">
<div id="v2StickyBar" class="v2-sticky hidden">
<div class="v2-sticky-title">Vue catalogue</div>
<div id="v2StickyCount" class="v2-sticky-count">0 jeu affiche</div>
<div class="v2-sticky-actions">
<button id="v2ToggleFormBtn" type="button" class="btn-secondary">Ajouter</button>
<button id="v2QuickBackupBtn" type="button" class="btn-secondary">Sauvegarder</button>
</div>
</div>
<header class="hero">
<div class="hero-copy">
<p class="eyebrow">Catalogue perso</p>
<p class="subtitle">Gere ta collection, tes prets et la valeur de tes jeux en un seul endroit.</p>
</div>
</header>
<section id="statsView" class="panel stats-view hidden">
<div class="panel-header">
<h2>Statistiques collection</h2>
</div>
<div class="stats-grid">
<article class="stat-card">
<p class="stat-label">Nombre total de jeux</p>
<p id="statsTotalGames" class="stat-value">0</p>
</article>
<article class="stat-card">
<p class="stat-label">Valeur totale estimee</p>
<p id="statsTotalValue" class="stat-value">0.00 EUR</p>
</article>
<article class="stat-card">
<p class="stat-label">Jeux pretes</p>
<p id="statsLoanedGames" class="stat-value">0</p>
</article>
<article class="stat-card">
<p class="stat-label">Consoles actives</p>
<p id="statsConsoleCount" class="stat-value">0</p>
</article>
</div>
</section>
<section id="gamesPanel" class="panel games-panel">
<div class="panel-header">
<h2 id="gameSectionTitle">Jeux</h2>
<p id="dataModeInfo" class="data-mode"></p>
</div>
<div id="v2Toolbar" class="v2-toolbar hidden">
<label>
Recherche
<input id="v2SearchInput" placeholder="Titre, editeur, code-barres..." />
</label>
<label>
Console
<select id="v2ConsoleFilter">
<option value="">Toutes</option>
</select>
</label>
<label>
Genre
<select id="v2GenreFilter">
<option value="">Tous</option>
</select>
</label>
<label>
Tri
<select id="v2SortSelect">
<option value="title_asc">Titre (A-Z)</option>
<option value="year_desc">Annee (recent d'abord)</option>
<option value="value_desc">Cote (elevee d'abord)</option>
</select>
</label>
</div>
<div class="games-actions-bar">
<button id="loanedFilterBtn" type="button" class="btn-secondary">Basculer vue prets</button>
</div>
<div id="bulkActionsBar" class="bulk-actions-bar">
<label class="checkbox-row">
<input id="bulkSelectPage" type="checkbox" />
Tout selectionner (page)
</label>
<span id="bulkSelectionInfo" class="bulk-selection-info">0 selectionne</span>
<button id="bulkLoanBtn" type="button" class="btn-secondary" disabled>Marquer prete</button>
<button id="bulkReturnBtn" type="button" class="btn-secondary" disabled>Marquer rendu</button>
<button id="bulkDeleteBtn" type="button" class="btn-inline danger" disabled>Supprimer</button>
</div>
<div id="scannerZone" class="scanner-zone">
<div class="scanner-header">
<strong>Scan camera (mobile)</strong>
<p id="scannerStatus" class="scanner-status">Camera inactive.</p>
</div>
<div class="scanner-actions">
<button id="scannerStartBtn" type="button" class="btn-secondary">Demarrer scan</button>
<button id="scannerStopBtn" type="button" class="btn-secondary hidden">Arreter scan</button>
</div>
<video id="scannerVideo" class="scanner-video hidden" autoplay playsinline muted></video>
<p id="scannerLastCode" class="scanner-last-code hidden"></p>
</div>
<div id="searchZone" class="search-zone">
<label>
Recherche rapide anti-doublon
<input id="quickSearchInput" placeholder="Ex: Destiny, Final Fantasy, Zelda..." />
</label>
<div id="quickSearchResults" class="quick-search-results">
<p class="empty">Saisis un titre pour verifier si tu possedes deja le jeu.</p>
</div>
</div>
<form id="gameForm" class="grid-form game-form">
<label>
Titre
<input id="titleInput" required placeholder="Final Fantasy X" />
</label>
<label>
Code-barres
<input id="barcodeInput" placeholder="EAN/UPC (auto via scan)" />
</label>
<label>
Version
<input id="versionInput" placeholder="Origine / Platinium / Complet..." />
</label>
<label>
Genre
<input id="genreInput" placeholder="RPG" />
</label>
<label>
Éditeur
<input id="publisherInput" placeholder="Square Enix" />
</label>
<label>
Pochette (image)
<input id="coverFileInput" type="file" accept="image/*" />
</label>
<label>
Année
<input id="yearInput" type="number" min="1970" max="2100" placeholder="2001" />
</label>
<label>
Cote estimée (€)
<input id="valueInput" type="number" min="0" step="0.01" placeholder="45" />
</label>
<label>
Prix d'achat (€)
<input id="purchasePriceInput" type="number" min="0" step="0.01" placeholder="12.5" />
</label>
<label>
Etat (0-10)
<input id="conditionInput" type="number" min="0" max="10" step="0.1" placeholder="5" />
</label>
<label class="checkbox-row">
<input id="isDuplicateInput" type="checkbox" />
Jeu en double
</label>
<label>
Prêté à
<input id="loanedToInput" placeholder="Nom (laisser vide si chez toi)" />
</label>
<button id="gameSubmitBtn" type="submit">Ajouter le jeu</button>
<button id="cancelEditBtn" type="button" class="btn-secondary hidden">Annuler edition</button>
</form>
<input id="coverUrlInput" type="hidden" />
<div id="gamesList" class="games-list"></div>
<div id="paginationBar" class="pagination-bar">
<button id="prevPageBtn" type="button" class="btn-secondary">Precedent</button>
<span id="pageInfo" class="page-info">Page 1/1</span>
<button id="nextPageBtn" type="button" class="btn-secondary">Suivant</button>
</div>
</section>
</section>
</main>
<div id="toastContainer" class="toast-container" aria-live="polite" aria-atomic="true"></div>
<template id="gameCardTemplate">
<article class="game-card">
<label class="game-select">
<input type="checkbox" data-action="select" />
<span>Selection</span>
</label>
<img class="game-cover hidden" alt="Pochette du jeu" loading="lazy" />
<div class="game-main">
<h3 class="game-title"></h3>
<div class="game-badges"></div>
<p class="game-meta"></p>
<p class="game-loan"></p>
</div>
<div class="game-actions">
<button class="btn-inline" data-action="edit">Editer</button>
<button class="btn-inline" data-action="toggle-loan"></button>
<button class="btn-inline danger" data-action="delete">Supprimer</button>
</div>
</article>
</template>
<script src="app.js"></script>
</body>
</html>