SenY commited on
Commit
2366fbe
·
1 Parent(s): 9e66fc3

fontTags準備

Browse files
Files changed (1) hide show
  1. index.js +80 -12
index.js CHANGED
@@ -1,13 +1,81 @@
1
  import { applyEffect, getAvailableEffects } from './effects.js';
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  // フォントの読み込みを管理する関数
4
  async function loadGoogleFont(fontFamily) {
5
  // フォントファミリー名を正しく整形
6
  const formattedFamily = fontFamily.replace(/ /g, '+');
7
-
8
  // Google Fonts APIのURLを構築
9
  const url = `https://fonts.googleapis.com/css2?family=${formattedFamily}&display=swap`;
10
-
11
  // 既存のリンクタグがあれば削除
12
  const existingLink = document.querySelector(`link[href*="${formattedFamily}"]`);
13
  if (existingLink) {
@@ -44,7 +112,7 @@ async function textToImage(text, fontFamily, fontSize = '48px', effectType = 'si
44
  const fontSizeNum = parseInt(fontSize);
45
  const verticalText = document.getElementById('verticalText').checked;
46
  const verticalSpacing = document.getElementById('verticalSpacing').value;
47
-
48
  // エフェクトを適用
49
  const imageUrl = await applyEffect(effectType, text, {
50
  font: fontFamily,
@@ -68,11 +136,11 @@ function debounceRender(callback, delay = 200) {
68
  if (renderTimeout) {
69
  clearTimeout(renderTimeout);
70
  }
71
-
72
  if (isRendering) {
73
  return;
74
  }
75
-
76
  renderTimeout = setTimeout(async () => {
77
  isRendering = true;
78
  try {
@@ -90,7 +158,7 @@ document.addEventListener('DOMContentLoaded', async () => {
90
  const fontSizeInput = document.getElementById('fontSize');
91
  const verticalTextInput = document.getElementById('verticalText');
92
  const effectGrid = document.querySelector('.effect-grid');
93
-
94
  await loadGoogleFont(fontSelect.value);
95
 
96
  // 縦書きモードの状態をグリッドに反映
@@ -110,7 +178,7 @@ document.addEventListener('DOMContentLoaded', async () => {
110
  for (const effect of effects) {
111
  try {
112
  const imageUrl = await textToImage(text, fontFamily, fontSize, effect.name);
113
-
114
  const presetCard = document.createElement('div');
115
  presetCard.className = 'effect-item';
116
  presetCard.innerHTML = `
@@ -119,11 +187,11 @@ document.addEventListener('DOMContentLoaded', async () => {
119
  <img src="${imageUrl}" alt="${effect.name}">
120
  </div>
121
  `;
122
-
123
  effectGrid.appendChild(presetCard);
124
  } catch (error) {
125
  console.error(`プリセット ${effect.name} の描画エラー:`, error);
126
-
127
  const errorCard = document.createElement('div');
128
  errorCard.className = 'effect-item error';
129
  errorCard.innerHTML = `
@@ -149,7 +217,7 @@ document.addEventListener('DOMContentLoaded', async () => {
149
  console.error('フォント読み込みエラー:', error);
150
  }
151
  });
152
-
153
  // テキストとフォントサイズの変更時にすべてのプリセットを再描画
154
  [textInput, fontSizeInput, verticalTextInput, verticalSpacing].forEach(element => {
155
  element.addEventListener('input', () => {
@@ -162,14 +230,14 @@ document.addEventListener('DOMContentLoaded', async () => {
162
  });
163
 
164
  // 縦書きモードの切り替え時の処理
165
- document.getElementById('verticalText').addEventListener('change', function(e) {
166
  const spacingContainer = document.getElementById('verticalSpacingContainer');
167
  spacingContainer.style.display = e.target.checked ? 'block' : 'none';
168
  // ロゴの再生成処理を呼び出す
169
  });
170
 
171
  // 文字間隔の変更時の処理
172
- document.getElementById('verticalSpacing').addEventListener('input', function(e) {
173
  document.getElementById('verticalSpacingValue').textContent = e.target.value;
174
  // ロゴの再生成処理を呼び出す
175
  });
 
1
  import { applyEffect, getAvailableEffects } from './effects.js';
2
 
3
+ const fontTags = [
4
+ { name: "Aoboshi One", tags: ["japanese"] },
5
+ { name: "BIZ UDGothic", tags: ["japanese", "kanji"] },
6
+ { name: "BIZ UDMincho", tags: ["japanese", "kanji"] },
7
+ { name: "BIZ UDPGothic", tags: ["japanese", "kanji"] },
8
+ { name: "BIZ UDPMincho", tags: ["japanese", "kanji"] },
9
+ { name: "Cherry Bomb One", tags: ["japanese"] },
10
+ { name: "Chokokutai", tags: ["japanese"] },
11
+ { name: "Darumadrop One", tags: ["japanese"] },
12
+ { name: "Dela Gothic One", tags: ["japanese", "kanji"] },
13
+ { name: "DotGothic16", tags: ["japanese", "kanji"] },
14
+ { name: "Hachi Maru Pop", tags: ["japanese", "kanji"] },
15
+ { name: "Hina Mincho", tags: ["japanese", "kanji"] },
16
+ { name: "IBM Plex Sans JP", tags: ["japanese", "kanji"] },
17
+ { name: "Kaisei Decol", tags: ["japanese", "kanji"] },
18
+ { name: "Kaisei HarunoUmi", tags: ["japanese", "kanji"] },
19
+ { name: "Kaisei Opti", tags: ["japanese", "kanji"] },
20
+ { name: "Kaisei Tokumin", tags: ["japanese", "kanji"] },
21
+ { name: "Kiwi Maru", tags: ["japanese", "kanji"] },
22
+ { name: "Klee One", tags: ["japanese", "kanji"] },
23
+ { name: "Kosugi", tags: ["japanese", "kanji"] },
24
+ { name: "Kosugi Maru", tags: ["japanese", "kanji"] },
25
+ { name: "M PLUS 1", tags: ["japanese", "kanji"] },
26
+ { name: "M PLUS 1 Code", tags: ["japanese", "kanji"] },
27
+ { name: "M PLUS 1p", tags: ["japanese", "kanji"] },
28
+ { name: "M PLUS 2", tags: ["japanese", "kanji"] },
29
+ { name: "M PLUS Rounded 1c", tags: ["japanese", "kanji"] },
30
+ { name: "Mochiy Pop One", tags: ["japanese", "kanji"] },
31
+ { name: "Mochiy Pop P One", tags: ["japanese", "kanji"] },
32
+ { name: "Monomaniac One", tags: ["japanese"] },
33
+ { name: "Murecho", tags: ["japanese"] },
34
+ { name: "New Tegomin", tags: ["japanese", "kanji"] },
35
+ { name: "Noto Sans JP", tags: ["japanese", "kanji"] },
36
+ { name: "Noto Serif JP", tags: ["japanese", "kanji"] },
37
+ { name: "Palette Mosaic", tags: ["japanese"] },
38
+ { name: "Potta One", tags: ["japanese", "kanji"] },
39
+ { name: "Rampart One", tags: ["japanese", "kanji"] },
40
+ { name: "Reggae One", tags: ["japanese", "kanji"] },
41
+ { name: "Rock 3D", tags: ["japanese"] },
42
+ { name: "RocknRoll One", tags: ["japanese", "kanji"] },
43
+ { name: "Sawarabi Gothic", tags: ["japanese", "kanji"] },
44
+ { name: "Sawarabi Mincho", tags: ["japanese", "kanji"] },
45
+ { name: "Shippori Antique", tags: ["japanese", "kanji"] },
46
+ { name: "Shippori Antique B1", tags: ["japanese", "kanji"] },
47
+ { name: "Shippori Mincho", tags: ["japanese", "kanji"] },
48
+ { name: "Shippori Mincho B1", tags: ["japanese", "kanji"] },
49
+ { name: "Shizuru", tags: ["japanese"] },
50
+ { name: "Slackside One", tags: ["japanese"] },
51
+ { name: "Stick", tags: ["japanese", "kanji"] },
52
+ { name: "Train One", tags: ["japanese", "kanji"] },
53
+ { name: "Tsukimi Rounded", tags: ["japanese"] },
54
+ { name: "Yomogi", tags: ["japanese", "kanji"] },
55
+ { name: "Yuji Boku", tags: ["japanese", "kanji"] },
56
+ { name: "Yuji Hentaigana Akari", tags: ["japanese"] },
57
+ { name: "Yuji Hentaigana Akebono", tags: ["japanese"] },
58
+ { name: "Yuji Mai", tags: ["japanese", "kanji"] },
59
+ { name: "Yuji Syuku", tags: ["japanese", "kanji"] },
60
+ { name: "Yusei Magic", tags: ["japanese", "kanji"] },
61
+ { name: "Zen Antique", tags: ["japanese", "kanji"] },
62
+ { name: "Zen Antique Soft", tags: ["japanese", "kanji"] },
63
+ { name: "Zen Kaku Gothic Antique", tags: ["japanese", "kanji"] },
64
+ { name: "Zen Kaku Gothic New", tags: ["japanese", "kanji"] },
65
+ { name: "Zen Kurenaido", tags: ["japanese"] },
66
+ { name: "Zen Maru Gothic", tags: ["japanese"] },
67
+ { name: "Zen Old Mincho", tags: ["japanese", "kanji"] }
68
+ ];
69
+
70
+
71
  // フォントの読み込みを管理する関数
72
  async function loadGoogleFont(fontFamily) {
73
  // フォントファミリー名を正しく整形
74
  const formattedFamily = fontFamily.replace(/ /g, '+');
75
+
76
  // Google Fonts APIのURLを構築
77
  const url = `https://fonts.googleapis.com/css2?family=${formattedFamily}&display=swap`;
78
+
79
  // 既存のリンクタグがあれば削除
80
  const existingLink = document.querySelector(`link[href*="${formattedFamily}"]`);
81
  if (existingLink) {
 
112
  const fontSizeNum = parseInt(fontSize);
113
  const verticalText = document.getElementById('verticalText').checked;
114
  const verticalSpacing = document.getElementById('verticalSpacing').value;
115
+
116
  // エフェクトを適用
117
  const imageUrl = await applyEffect(effectType, text, {
118
  font: fontFamily,
 
136
  if (renderTimeout) {
137
  clearTimeout(renderTimeout);
138
  }
139
+
140
  if (isRendering) {
141
  return;
142
  }
143
+
144
  renderTimeout = setTimeout(async () => {
145
  isRendering = true;
146
  try {
 
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
  // 縦書きモードの状態をグリッドに反映
 
178
  for (const effect of effects) {
179
  try {
180
  const imageUrl = await textToImage(text, fontFamily, fontSize, effect.name);
181
+
182
  const presetCard = document.createElement('div');
183
  presetCard.className = 'effect-item';
184
  presetCard.innerHTML = `
 
187
  <img src="${imageUrl}" alt="${effect.name}">
188
  </div>
189
  `;
190
+
191
  effectGrid.appendChild(presetCard);
192
  } catch (error) {
193
  console.error(`プリセット ${effect.name} の描画エラー:`, error);
194
+
195
  const errorCard = document.createElement('div');
196
  errorCard.className = 'effect-item error';
197
  errorCard.innerHTML = `
 
217
  console.error('フォント読み込みエラー:', error);
218
  }
219
  });
220
+
221
  // テキストとフォントサイズの変更時にすべてのプリセットを再描画
222
  [textInput, fontSizeInput, verticalTextInput, verticalSpacing].forEach(element => {
223
  element.addEventListener('input', () => {
 
230
  });
231
 
232
  // 縦書きモードの切り替え時の処理
233
+ document.getElementById('verticalText').addEventListener('change', function (e) {
234
  const spacingContainer = document.getElementById('verticalSpacingContainer');
235
  spacingContainer.style.display = e.target.checked ? 'block' : 'none';
236
  // ロゴの再生成処理を呼び出す
237
  });
238
 
239
  // 文字間隔の変更時の処理
240
+ document.getElementById('verticalSpacing').addEventListener('input', function (e) {
241
  document.getElementById('verticalSpacingValue').textContent = e.target.value;
242
  // ロゴの再生成処理を呼び出す
243
  });