fontのフィルタリング対応
Browse files- index.html +14 -64
- index.js +43 -0
index.html
CHANGED
|
@@ -28,71 +28,21 @@
|
|
| 28 |
|
| 29 |
<div class="mb-3">
|
| 30 |
<label for="googleFontInput" class="form-label">フォント</label>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
<select name="googleFontInput" class="form-select" id="googleFontInput">
|
| 32 |
-
<option>Aoboshi One</option>
|
| 33 |
-
<option>BIZ UDGothic</option>
|
| 34 |
-
<option>BIZ UDMincho</option>
|
| 35 |
-
<option>BIZ UDPGothic</option>
|
| 36 |
-
<option>BIZ UDPMincho</option>
|
| 37 |
-
<option>Cherry Bomb One</option>
|
| 38 |
-
<option>Chokokutai</option>
|
| 39 |
-
<option>Darumadrop One</option>
|
| 40 |
-
<option>Dela Gothic One</option>
|
| 41 |
-
<option>DotGothic16</option>
|
| 42 |
-
<option>Hachi Maru Pop</option>
|
| 43 |
-
<option>Hina Mincho</option>
|
| 44 |
-
<option>IBM Plex Sans JP</option>
|
| 45 |
-
<option>Kaisei Decol</option>
|
| 46 |
-
<option>Kaisei HarunoUmi</option>
|
| 47 |
-
<option>Kaisei Opti</option>
|
| 48 |
-
<option>Kaisei Tokumin</option>
|
| 49 |
-
<option>Kiwi Maru</option>
|
| 50 |
-
<option>Klee One</option>
|
| 51 |
-
<option>Kosugi</option>
|
| 52 |
-
<option>Kosugi Maru</option>
|
| 53 |
-
<option>M PLUS 1</option>
|
| 54 |
-
<option>M PLUS 1 Code</option>
|
| 55 |
-
<option>M PLUS 1p</option>
|
| 56 |
-
<option>M PLUS 2</option>
|
| 57 |
-
<option>M PLUS Rounded 1c</option>
|
| 58 |
-
<option selected="selected">Mochiy Pop One</option>
|
| 59 |
-
<option>Mochiy Pop P One</option>
|
| 60 |
-
<option>Monomaniac One</option>
|
| 61 |
-
<option>Murecho</option>
|
| 62 |
-
<option>New Tegomin</option>
|
| 63 |
-
<option>Noto Sans JP</option>
|
| 64 |
-
<option>Noto Serif JP</option>
|
| 65 |
-
<option>Palette Mosaic</option>
|
| 66 |
-
<option>Potta One</option>
|
| 67 |
-
<option>Rampart One</option>
|
| 68 |
-
<option>Reggae One</option>
|
| 69 |
-
<option>Rock 3D</option>
|
| 70 |
-
<option>RocknRoll One</option>
|
| 71 |
-
<option>Sawarabi Gothic</option>
|
| 72 |
-
<option>Sawarabi Mincho</option>
|
| 73 |
-
<option>Shippori Antique</option>
|
| 74 |
-
<option>Shippori Antique B1</option>
|
| 75 |
-
<option>Shippori Mincho</option>
|
| 76 |
-
<option>Shippori Mincho B1</option>
|
| 77 |
-
<option>Shizuru</option>
|
| 78 |
-
<option>Slackside One</option>
|
| 79 |
-
<option>Stick</option>
|
| 80 |
-
<option>Train One</option>
|
| 81 |
-
<option>Tsukimi Rounded</option>
|
| 82 |
-
<option>Yomogi</option>
|
| 83 |
-
<option>Yuji Boku</option>
|
| 84 |
-
<option>Yuji Hentaigana Akari</option>
|
| 85 |
-
<option>Yuji Hentaigana Akebono</option>
|
| 86 |
-
<option>Yuji Mai</option>
|
| 87 |
-
<option>Yuji Syuku</option>
|
| 88 |
-
<option>Yusei Magic</option>
|
| 89 |
-
<option>Zen Antique</option>
|
| 90 |
-
<option>Zen Antique Soft</option>
|
| 91 |
-
<option>Zen Kaku Gothic Antique</option>
|
| 92 |
-
<option>Zen Kaku Gothic New</option>
|
| 93 |
-
<option>Zen Kurenaido</option>
|
| 94 |
-
<option>Zen Maru Gothic</option>
|
| 95 |
-
<option>Zen Old Mincho</option>
|
| 96 |
</select>
|
| 97 |
</div>
|
| 98 |
|
|
|
|
| 28 |
|
| 29 |
<div class="mb-3">
|
| 30 |
<label for="googleFontInput" class="form-label">フォント</label>
|
| 31 |
+
<div class="row g-2 mb-2">
|
| 32 |
+
<div class="col">
|
| 33 |
+
<div class="btn-group w-100" role="group" id="fontTagFilter">
|
| 34 |
+
<input type="radio" class="btn-check" name="fontFilter" id="filterAll" value="all" checked>
|
| 35 |
+
<label class="btn btn-outline-primary" for="filterAll">すべて表示</label>
|
| 36 |
+
|
| 37 |
+
<input type="radio" class="btn-check" name="fontFilter" id="filterJapanese" value="japanese">
|
| 38 |
+
<label class="btn btn-outline-primary" for="filterJapanese">日本語フォント</label>
|
| 39 |
+
|
| 40 |
+
<input type="radio" class="btn-check" name="fontFilter" id="filterKanji" value="kanji">
|
| 41 |
+
<label class="btn btn-outline-primary" for="filterKanji">漢字対応</label>
|
| 42 |
+
</div>
|
| 43 |
+
</div>
|
| 44 |
+
</div>
|
| 45 |
<select name="googleFontInput" class="form-select" id="googleFontInput">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
</select>
|
| 47 |
</div>
|
| 48 |
|
index.js
CHANGED
|
@@ -154,11 +154,54 @@ function debounceRender(callback, delay = 200) {
|
|
| 154 |
// イベントリスナーの設定を更新
|
| 155 |
document.addEventListener('DOMContentLoaded', async () => {
|
| 156 |
const fontSelect = document.getElementById('googleFontInput');
|
|
|
|
| 157 |
const textInput = document.getElementById('textInput');
|
| 158 |
const fontSizeInput = document.getElementById('fontSize');
|
| 159 |
const verticalTextInput = document.getElementById('verticalText');
|
| 160 |
const effectGrid = document.querySelector('.effect-grid');
|
| 161 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 162 |
await loadGoogleFont(fontSelect.value);
|
| 163 |
|
| 164 |
// 縦書きモードの状態をグリッドに反映
|
|
|
|
| 154 |
// イベントリスナーの設定を更新
|
| 155 |
document.addEventListener('DOMContentLoaded', async () => {
|
| 156 |
const fontSelect = document.getElementById('googleFontInput');
|
| 157 |
+
const fontTagFilter = document.getElementById('fontTagFilter');
|
| 158 |
const textInput = document.getElementById('textInput');
|
| 159 |
const fontSizeInput = document.getElementById('fontSize');
|
| 160 |
const verticalTextInput = document.getElementById('verticalText');
|
| 161 |
const effectGrid = document.querySelector('.effect-grid');
|
| 162 |
|
| 163 |
+
// フォントオプションの初期化と絞り込み機能の実装
|
| 164 |
+
function initializeFontOptions(filter = 'all') {
|
| 165 |
+
// 現在選択されているフォントを保持
|
| 166 |
+
const currentFont = fontSelect.value;
|
| 167 |
+
|
| 168 |
+
// 既存のオプションをクリア
|
| 169 |
+
fontSelect.innerHTML = '';
|
| 170 |
+
|
| 171 |
+
// フィルタリングされたフォントのリストを作成
|
| 172 |
+
const filteredFonts = fontTags.filter(font => {
|
| 173 |
+
if (filter === 'all') return true;
|
| 174 |
+
return font.tags.includes(filter);
|
| 175 |
+
});
|
| 176 |
+
|
| 177 |
+
// フォントオプションを追加
|
| 178 |
+
filteredFonts.forEach((font, index) => {
|
| 179 |
+
const option = document.createElement('option');
|
| 180 |
+
option.value = font.name;
|
| 181 |
+
option.textContent = font.name;
|
| 182 |
+
// 以前選択されていたフォントがある場合はそれを選択、なければ最初のフォントを選択
|
| 183 |
+
if (font.name === currentFont || (index === 0 && !currentFont)) {
|
| 184 |
+
option.selected = true;
|
| 185 |
+
}
|
| 186 |
+
fontSelect.appendChild(option);
|
| 187 |
+
});
|
| 188 |
+
|
| 189 |
+
// 選択されたフォントを読み込む
|
| 190 |
+
return loadGoogleFont(fontSelect.value);
|
| 191 |
+
}
|
| 192 |
+
|
| 193 |
+
// タグフィルターの変更イベントを設定
|
| 194 |
+
fontTagFilter.querySelectorAll('input[type="radio"]').forEach(radio => {
|
| 195 |
+
radio.addEventListener('change', async (e) => {
|
| 196 |
+
if (e.target.checked) {
|
| 197 |
+
await initializeFontOptions(e.target.value);
|
| 198 |
+
await renderAllPresets();
|
| 199 |
+
}
|
| 200 |
+
});
|
| 201 |
+
});
|
| 202 |
+
|
| 203 |
+
// 初期化
|
| 204 |
+
await initializeFontOptions('all');
|
| 205 |
await loadGoogleFont(fontSelect.value);
|
| 206 |
|
| 207 |
// 縦書きモードの状態をグリッドに反映
|