diff --git a/addons/web_editor/static/src/js/editor/snippets.editor.js b/addons/web_editor/static/src/js/editor/snippets.editor.js index 0600429acd0..0473e41ea4a 100644 --- a/addons/web_editor/static/src/js/editor/snippets.editor.js +++ b/addons/web_editor/static/src/js/editor/snippets.editor.js @@ -607,6 +607,7 @@ var SnippetEditor = Widget.extend({ const proms = sortBy(styles, "__order").map((style) => { return show ? style.onTargetShow() : style.onTargetHide(); }); + this.options.wysiwyg.snippetsMenu.reload_snippet_dropzones(); await Promise.all(proms); return show; }, @@ -3202,11 +3203,15 @@ var SnippetsMenu = Widget.extend({ var $snippet = $(this); var $snippetBody = $snippet.find('.oe_snippet_body'); const isSanitizeForbidden = $snippet.data('oeForbidSanitize'); - const filterSanitize = isSanitizeForbidden === 'form' - ? $els => $els.filter((i, el) => !el.closest('[data-oe-sanitize]:not([data-oe-sanitize="allow_form"])')) + const checkSanitize = isSanitizeForbidden === "form" + ? (el) => !el.closest('[data-oe-sanitize]:not([data-oe-sanitize="allow_form"])') : isSanitizeForbidden - ? $els => $els.filter((i, el) => !el.closest('[data-oe-sanitize]')) - : $els => $els; + ? (el) => !el.closest('[data-oe-sanitize]') + : () => true; + const isVisible = (el) => el.closest(".o_snippet_invisible") + ? !(el.offsetHeight === 0 || el.offsetWidth === 0) + : true; + const canDrop = ($els) => [...$els].some((el) => checkSanitize(el) && isVisible(el)); var check = false; self.templateOptions.forEach((option, k) => { @@ -3216,8 +3221,8 @@ var SnippetsMenu = Widget.extend({ k = isSanitizeForbidden ? 'forbidden/' + k : k; cache[k] = cache[k] || { - 'drop-near': option['drop-near'] ? filterSanitize(option['drop-near'].all()).length : 0, - 'drop-in': option['drop-in'] ? filterSanitize(option['drop-in'].all()).length : 0, + 'drop-near': option['drop-near'] ? canDrop(option['drop-near'].all()) : false, + 'drop-in': option['drop-in'] ? canDrop(option['drop-in'].all()) : false, }; check = (cache[k]['drop-near'] || cache[k]['drop-in']); });