From fbb95bc6232232d8c731bed4e2323dee85b75ed2 Mon Sep 17 00:00:00 2001 From: Will Miao Date: Tue, 9 Dec 2025 22:13:00 +0800 Subject: [PATCH] feat(context-menu): pass file path to NSFW level selector - Add `cardPath` parameter to `show` method in NsfwLevelSelector component - Include `filePath` from card dataset when calling selector in ModelContextMenuMixin - Clear `cardPath` from dataset when hiding selector to prevent stale data This enables the NSFW level selector to access the file path context, which may be needed for backend operations when changing NSFW levels. --- static/js/components/ContextMenu/ModelContextMenuMixin.js | 1 + static/js/components/shared/NsfwLevelSelector.js | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/static/js/components/ContextMenu/ModelContextMenuMixin.js b/static/js/components/ContextMenu/ModelContextMenuMixin.js index b91dded1..a8e6057f 100644 --- a/static/js/components/ContextMenu/ModelContextMenuMixin.js +++ b/static/js/components/ContextMenu/ModelContextMenuMixin.js @@ -55,6 +55,7 @@ export const ModelContextMenuMixin = { const filePath = card.dataset.filepath; selector.show({ currentLevel, + cardPath: filePath, onSelect: async (level) => { if (!filePath) return false; try { diff --git a/static/js/components/shared/NsfwLevelSelector.js b/static/js/components/shared/NsfwLevelSelector.js index 098ebdaf..c227ded3 100644 --- a/static/js/components/shared/NsfwLevelSelector.js +++ b/static/js/components/shared/NsfwLevelSelector.js @@ -26,6 +26,7 @@ function buildController(selectorElement) { const hide = () => { selectorElement.style.display = 'none'; + selectorElement.dataset.cardPath = ''; isOpen = false; if (typeof onClose === 'function') { onClose(); @@ -34,11 +35,12 @@ function buildController(selectorElement) { onClose = null; }; - const show = ({ currentLevel = 0, onSelect: selectCb, onClose: closeCb, multipleLabel = '' } = {}) => { + const show = ({ currentLevel = 0, onSelect: selectCb, onClose: closeCb, multipleLabel = '', cardPath = '' } = {}) => { onSelect = selectCb || null; onClose = closeCb || null; isOpen = true; ignoreNextOutside = true; // ignore the click that triggered open + selectorElement.dataset.cardPath = cardPath || ''; // Position near center of viewport const viewportWidth = document.documentElement.clientWidth;