diff --git a/www/html/Admin/admin.js b/www/html/Admin/admin.js index cad2af2..0c0f66a 100644 --- a/www/html/Admin/admin.js +++ b/www/html/Admin/admin.js @@ -520,11 +520,26 @@ var bw = bwEl ? parseInt(String(bwEl.value || '2'), 10) : 2; if (!Number.isFinite(bw)) bw = 2; bw = Math.max(0, Math.min(12, Math.round(bw))); + var qfMinEl = el('quiz-carry-theme-qfont-min'); + var qfMaxEl = el('quiz-carry-theme-qfont-max'); + var qMin = qfMinEl ? parseInt(String(qfMinEl.value || '10'), 10) : 10; + var qMax = qfMaxEl ? parseInt(String(qfMaxEl.value || '24'), 10) : 24; + if (!Number.isFinite(qMin)) qMin = 10; + if (!Number.isFinite(qMax)) qMax = 24; + qMin = Math.max(10, Math.min(40, Math.round(qMin))); + qMax = Math.max(14, Math.min(56, Math.round(qMax))); + if (qMax < qMin) { + var swap = qMin; + qMin = qMax; + qMax = swap; + } return { panelBg: (sBg && sBg.trim()) ? sBg.trim().slice(0, 120) : quizCarryRgbToRgbaString(fbBg), panelBorder: (sBr && sBr.trim()) ? sBr.trim().slice(0, 120) : quizCarryRgbToRgbaString(fbBr), textColor: (sTx && sTx.trim()) ? sTx.trim().slice(0, 120) : quizCarryRgbToRgbaString(fbTx), borderWidthPx: bw, + questionFontMinPx: qMin, + questionFontMaxPx: qMax, }; } @@ -1223,7 +1238,14 @@ gameQuizFetch('GET').then(function (data) { if (opts.themeOverride && typeof opts.themeOverride === 'object') { var ov = opts.themeOverride; - if (ov.panelBg != null || ov.borderWidthPx != null || ov.panelBorder != null || ov.textColor != null) { + if ( + ov.panelBg != null || + ov.borderWidthPx != null || + ov.panelBorder != null || + ov.textColor != null || + ov.questionFontMinPx != null || + ov.questionFontMaxPx != null + ) { data.carryMapPanelTheme = ov; } else if (ov.carryMapPanelTheme && typeof ov.carryMapPanelTheme === 'object') { data.carryMapPanelTheme = ov.carryMapPanelTheme; @@ -1279,6 +1301,16 @@ var bw = parseInt(String(th.borderWidthPx), 10); bwInp.value = String(Number.isFinite(bw) && bw >= 0 ? Math.min(12, bw) : 2); } + var qfMinInp = el('quiz-carry-theme-qfont-min'); + var qfMaxInp = el('quiz-carry-theme-qfont-max'); + if (qfMinInp) { + var qm = parseInt(String(th.questionFontMinPx), 10); + qfMinInp.value = String(Number.isFinite(qm) ? Math.max(10, Math.min(40, qm)) : 10); + } + if (qfMaxInp) { + var qx = parseInt(String(th.questionFontMaxPx), 10); + qfMaxInp.value = String(Number.isFinite(qx) ? Math.max(14, Math.min(56, qx)) : 24); + } quizCarryEcdFillForm(data.carryEmbedCountdownTheme || {}); quizCarryPlaqueFillAllFromApi(data); if (opts.clearMsg !== false) setMsg('quiz-carry-settings-msg', '', ''); diff --git a/www/html/Admin/index.html b/www/html/Admin/index.html index 9ac2165..4102d59 100644 --- a/www/html/Admin/index.html +++ b/www/html/Admin/index.html @@ -226,6 +226,15 @@ +
ในเกมใช้สูตรเดียวกับป้ายคำตอบบนพื้น: clamp(10, 24, tileSize×zoom×0.24×carryChoicePlaqueMapScale) แล้ว clamp อีกชั้นด้วยค่าสองช่องนี้ · English: Same px formula as floor answer plaques; theme min/max clamp on top.