diff --git a/js/admin-media.js b/js/admin-media.js index 7b3aed1..e9fee62 100644 --- a/js/admin-media.js +++ b/js/admin-media.js @@ -155,6 +155,57 @@ } renderExistingShapeCardPreviews(); + function initShapeNativeOverlay(){ + if (!shapeNativeOverlay) { return; } + var nodes = shapeNativeOverlay.querySelectorAll('.yoone-snow-shape-native-item'); + nodes.forEach(function(btn){ + var key = btn.getAttribute('data-shape-key'); + var host = btn.querySelector('.yoone-snow-shape-native-preview'); + if (host && (!host.childNodes || host.childNodes.length === 0)){ + var previewEl = createShapePreviewElement(key); + if (previewEl){ + try { previewEl.style.backgroundColor = 'transparent'; } catch(e){} + try { previewEl.style.border = 'none'; } catch(e){} + try { previewEl.style.borderRadius = '0'; } catch(e){} + try { previewEl.style.marginRight = '0'; } catch(e){} + try { previewEl.style.margin = '0'; } catch(e){} + try { previewEl.style.width = '28px'; } catch(e){} + try { previewEl.style.height = '28px'; } catch(e){} + host.appendChild(previewEl); + } + } + btn.addEventListener('click', function(){ + if (shapeLabelPreviewHost){ + while (shapeLabelPreviewHost.firstChild){ shapeLabelPreviewHost.removeChild(shapeLabelPreviewHost.firstChild); } + var previewEl2 = createShapePreviewElement(key); + if (previewEl2){ + try { previewEl2.style.backgroundColor = 'transparent'; } catch(e){} + try { previewEl2.style.border = 'none'; } catch(e){} + try { previewEl2.style.borderRadius = '0'; } catch(e){} + try { previewEl2.style.marginRight = '0'; } catch(e){} + try { previewEl2.style.margin = '0'; } catch(e){} + try { previewEl2.style.width = '28px'; } catch(e){} + try { previewEl2.style.height = '28px'; } catch(e){} + shapeLabelPreviewHost.style.display = 'flex'; + shapeLabelPreviewHost.appendChild(previewEl2); + } + } + addShapeBox(key); + if (shapeNativeOverlay){ shapeNativeOverlay.style.display = 'none'; } + if (shapeAddSelect){ shapeAddSelect.value = ''; } + if (shapeLabelPreviewHost){ + while (shapeLabelPreviewHost.firstChild){ shapeLabelPreviewHost.removeChild(shapeLabelPreviewHost.firstChild); } + shapeLabelPreviewHost.style.display = 'none'; + } + }); + }); + document.addEventListener('click', function(e){ + var t = e.target; + var inside = (t === shapeNativeOverlay || (shapeNativeOverlay && shapeNativeOverlay.contains(t)) || (shapeAddSelect && (t === shapeAddSelect || shapeAddSelect.contains(t)))); + if (!inside && shapeNativeOverlay){ shapeNativeOverlay.style.display = 'none'; } + }); + } + // 添加形状卡片 并插入预览与隐藏输入 用于保存选择 function addShapeBox(shapeKey){ if (!shapeListContainer) { return; } @@ -561,6 +612,16 @@ // 僅使用原生下拉 不再彈出自定義覆蓋列表 } + if (shapeAddSelect && shapeNativeOverlay){ + initShapeNativeOverlay(); + var openOverlay = function(){ + try { shapeNativeOverlay.style.width = (shapeAddSelect.offsetWidth || 280) + 'px'; } catch(e){} + shapeNativeOverlay.style.display = 'block'; + }; + shapeAddSelect.addEventListener('mousedown', function(e){ e.preventDefault(); openOverlay(); }); + shapeAddSelect.addEventListener('click', function(e){ e.preventDefault(); openOverlay(); }); + } + // 切换类型面板 显示对应控件 其他隐藏 @@ -667,52 +728,6 @@ initAdminMedia(); } })(); - // 初始化內嵌下拉的預覽與點擊交互 - (function(){ - if (!shapeNativeOverlay) { return; } - var nodes = shapeNativeOverlay.querySelectorAll('.yoone-snow-shape-native-item'); - nodes.forEach(function(btn){ - var key = btn.getAttribute('data-shape-key'); - var host = btn.querySelector('.yoone-snow-shape-native-preview'); - if (host && host.childNodes && host.childNodes.length === 0){ - var previewEl = createShapePreviewElement(key); - if (previewEl){ - try { previewEl.style.backgroundColor = 'transparent'; } catch(e){} - try { previewEl.style.border = 'none'; } catch(e){} - try { previewEl.style.borderRadius = '0'; } catch(e){} - host.appendChild(previewEl); - } - } - btn.addEventListener('click', function(){ - // 先更新左側預覽 再添加卡片 並關閉內嵌下拉 - if (shapeLabelPreviewHost){ - while (shapeLabelPreviewHost.firstChild){ shapeLabelPreviewHost.removeChild(shapeLabelPreviewHost.firstChild); } - var previewEl2 = createShapePreviewElement(key); - if (previewEl2){ - try { previewEl2.style.backgroundColor = 'transparent'; } catch(e){} - try { previewEl2.style.border = 'none'; } catch(e){} - try { previewEl2.style.borderRadius = '0'; } catch(e){} - shapeLabelPreviewHost.style.display = 'flex'; - shapeLabelPreviewHost.appendChild(previewEl2); - } - } - addShapeBox(key); - if (shapeNativeOverlay){ shapeNativeOverlay.style.display = 'none'; } - // 重置原生下拉為未選中 清空左側預覽 保持簡潔 - if (shapeAddSelect){ shapeAddSelect.value = ''; } - if (shapeLabelPreviewHost){ - while (shapeLabelPreviewHost.firstChild){ shapeLabelPreviewHost.removeChild(shapeLabelPreviewHost.firstChild); } - shapeLabelPreviewHost.style.display = 'none'; - } - }); - }); - // 外部點擊時關閉內嵌下拉 - document.addEventListener('click', function(e){ - var t = e.target; - var inside = (t === shapeNativeOverlay || shapeNativeOverlay.contains(t) || (shapeAddSelect && (t === shapeAddSelect || shapeAddSelect.contains(t)))); - if (!inside){ shapeNativeOverlay.style.display = 'none'; } - }); - })(); function t(key, fallback){ var dict = (typeof window !== 'undefined' && window.YooneSnowAdmin && window.YooneSnowAdmin.i18n) ? window.YooneSnowAdmin.i18n : {}; var val = dict[key]; diff --git a/yoone-snow.php b/yoone-snow.php index 5c9ebe2..4ab1d5a 100644 --- a/yoone-snow.php +++ b/yoone-snow.php @@ -514,14 +514,20 @@ function yoone_snow_register_settings() { echo ''; echo ''; echo '