-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathlibrary.html
More file actions
118 lines (110 loc) · 5.49 KB
/
Copy pathlibrary.html
File metadata and controls
118 lines (110 loc) · 5.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<!doctype html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<meta
http-equiv="Content-Security-Policy"
content="default-src 'self'; script-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; base-uri 'self'; form-action 'self';"
/>
<meta name="referrer" content="no-referrer" />
<meta name="theme-color" content="#2e7d32" />
<link rel="manifest" href="manifest.json" />
<link
rel="icon"
type="image/svg+xml"
href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><rect width='32' height='32' rx='7' fill='%232e7d32'/><rect x='7' y='7' width='4.2' height='17' rx='1' fill='%23fff'/><rect x='12.2' y='9.5' width='4.2' height='14.5' rx='1' fill='%23fff' opacity='.82'/><g transform='rotate(11 21.5 24)'><rect x='18' y='8.5' width='4.2' height='15.5' rx='1' fill='%23fff' opacity='.66'/></g><rect x='5.5' y='24.2' width='21' height='2.4' rx='1.1' fill='%23fff'/><rect x='8' y='11' width='2.2' height='1.4' rx='.6' fill='%232e7d32'/><rect x='13.2' y='13' width='2.2' height='1.4' rx='.6' fill='%232e7d32'/></svg>"
/>
<link rel="dns-prefetch" href="https://cdnjs.cloudflare.com" />
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin />
<title>Lernkarten-Bibliothek</title>
<link rel="stylesheet" href="theme.css" />
<script src="theme.js"></script>
<script src="logger.js"></script>
<script src="sanitize.js"></script>
<link rel="stylesheet" href="library.css" />
</head>
<body>
<div class="container">
<header class="library-header">
<a href="index.html" class="back-link" title="Zur Startseite">←</a>
<div class="header-content">
<h1 id="library-title">📚 Lernkarten-Bibliothek</h1>
<p id="library-subtitle">Wähle ein Deck zum Importieren</p>
</div>
</header>
<div id="loading-state" class="state-message">Lade Bibliothek …</div>
<div id="error-state" class="state-message hidden"></div>
<!-- Grid view (default) -->
<section id="grid-view" class="hidden">
<div class="search-row">
<input
type="text"
id="library-search"
class="library-search-input"
placeholder="🔍 Decks durchsuchen …"
/>
<button
type="button"
id="facets-toggle"
class="facets-toggle-btn"
aria-expanded="false"
aria-controls="facets-panel"
>
🎛 Filter
</button>
</div>
<p id="result-count" class="result-count" hidden></p>
<div class="grid-layout">
<aside id="facets-panel" class="facets-panel">
<div class="facets-panel-header">
<h2 class="facets-panel-title">Filter</h2>
<button type="button" id="facets-clear" class="facets-clear-btn" hidden>
Zurücksetzen
</button>
</div>
<div id="facets"></div>
</aside>
<div class="grid-main">
<div id="deck-grid" class="deck-grid"></div>
<div id="empty-state" class="state-message hidden"></div>
</div>
</div>
</section>
<!-- Detail view (when ?deck=<id>) -->
<section id="detail-view" class="hidden">
<div id="detail-content"></div>
</section>
<div id="message-banner" class="message-banner hidden"></div>
</div>
<script
defer
src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"
integrity="sha512-XMVd28F1oH/O71fzwBnV7HucLxVwtxf26XV8P4wPk26EDxuGZ91N8bsOttmnomcCD3CS5ZMRL50H0GgOHvegtg=="
crossorigin="anonymous"
referrerpolicy="no-referrer"
></script>
<script
defer
src="https://cdnjs.cloudflare.com/ajax/libs/marked/16.3.0/lib/marked.umd.min.js"
integrity="sha512-V6rGY7jjOEUc7q5Ews8mMlretz1Vn2wLdMW/qgABLWunzsLfluM0FwHuGjGQ1lc8jO5vGpGIGFE+rTzB+63HdA=="
crossorigin="anonymous"
referrerpolicy="no-referrer"
></script>
<script
defer
src="https://cdnjs.cloudflare.com/ajax/libs/dompurify/3.2.7/purify.min.js"
integrity="sha512-78KH17QLT5e55GJqP76vutp1D2iAoy06WcYBXB6iBCsmO6wWzx0Qdg8EDpm8mKXv68BcvHOyeeP4wxAL0twJGQ=="
crossorigin="anonymous"
referrerpolicy="no-referrer"
></script>
<script defer src="library.js"></script>
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('./sw.js').catch(() => {});
});
}
</script>
</body>
</html>