fix: _ctxMenuData — objet léger sans conflit Alpine
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped

_wsInitData (162 keys) causait "Cannot redefine property: $nextTick"
quand réutilisé comme x-data sur .ctx-menu. Alpine ajoute des propriétés
magiques ($nextTick, $el, etc.) et certaines entrent en conflit avec
les propriétés de l'objet massif.

Solution: window._ctxMenuData — objet minimal avec getters/setters
déléguant à _wsInitData. Seulement 20 propriétés, zéro conflit.

+ Restauré les directives Alpine (x-show, x-for, :style) dans le menu
  puisque le scope Alpine fonctionne maintenant.
This commit is contained in:
2026-07-13 11:05:34 -04:00
parent 0a0a330b55
commit c524478ff2
+25 -3
View File
@@ -1916,6 +1916,28 @@ for (var _i = 0; _i < _wsKeys.length; _i++) {
try { window[_wsKeys[_i]] = window._wsInitData[_wsKeys[_i]]; } catch(e) {}
}
_wsInitData = window._wsInitData;
// Objet léger pour le ctx-menu (évite le conflit $nextTick avec Alpine)
window._ctxMenuData = {
get ctxMenu() { return window._wsInitData.ctxMenu; },
set ctxMenu(v) { window._wsInitData.ctxMenu = v; },
get ctxTagAdding() { return window._wsInitData.ctxTagAdding; },
set ctxTagAdding(v) { window._wsInitData.ctxTagAdding = v; },
get ctxTagExistingOpen() { return window._wsInitData.ctxTagExistingOpen; },
set ctxTagExistingOpen(v) { window._wsInitData.ctxTagExistingOpen = v; },
get ctxAvailTags() { return window._wsInitData.ctxAvailTags; },
set ctxAvailTags(v) { window._wsInitData.ctxAvailTags = v; },
get ctxNewTagColor() { return window._wsInitData.ctxNewTagColor; },
set ctxNewTagColor(v) { window._wsInitData.ctxNewTagColor = v; },
get ctxTagColors() { return window._wsInitData.ctxTagColors; },
ctxMenuOpenPage() { window._wsInitData.ctxMenuOpenPage(); },
ctxMenuOpenFolder() { window._wsInitData.ctxMenuOpenFolder(); },
ctxMenuRename() { window._wsInitData.ctxMenuRename(); },
ctxMenuDuplicate() { window._wsInitData.ctxMenuDuplicate(); },
ctxMenuDelete() { window._wsInitData.ctxMenuDelete(); },
ctxAddExistingTag(t) { window._wsInitData.ctxAddExistingTag(t); },
ctxAddNewTag(n, c) { window._wsInitData.ctxAddNewTag(n, c); },
ctxRemoveTag(id) { window._wsInitData.ctxRemoveTag(id); },
};
console.log('FLOWDECK v2.4.6 — IIFE done, _wsInitData keys:', Object.keys(window._wsInitData).length);
</script>
<script>console.log('FLOWDECK v2.4.6 — ws-split about to render, _wsInitData exists:', typeof window._wsInitData !== 'undefined');</script>
@@ -2350,7 +2372,7 @@ console.log('FLOWDECK v2.4.6 — IIFE done, _wsInitData keys:', Object.keys(wind
</div><!-- /ws-main -->
<!-- Context menu -->
<div class="ctx-menu" x-data="_wsInitData" style="display:none"
<div class="ctx-menu" x-data="_ctxMenuData" style="display:none"
@click.outside="document.querySelector('.ctx-menu').style.display='none'"
@keydown.escape="document.querySelector('.ctx-menu').style.display='none'"
x-transition>
@@ -2371,11 +2393,11 @@ console.log('FLOWDECK v2.4.6 — IIFE done, _wsInitData keys:', Object.keys(wind
<div x-show="(ctxMenu.tags||[]).length === 0" style="padding:2px 14px;font-size:11px;color:var(--text-dim);">No tags</div>
<div class="ctx-sep"></div>
<!-- Add existing tag → sub-menu -->
<div class="ctx-item ctx-has-sub" @click.stop="var s=document.querySelector('.ctx-tag-existing-section');s.style.display=s.style.display==='none'?'block':'none'" x-show="ctxAvailTags.length > 0">
<div class="ctx-item ctx-has-sub" @click.stop="ctxTagExistingOpen=!ctxTagExistingOpen" x-show="ctxAvailTags.length > 0">
<span style="flex:1;">📋 Add existing tag</span>
<span x-text="ctxTagExistingOpen ? '▾' : '▸'"></span>
</div>
<div class="ctx-tag-existing-section" style="display:none;padding:0 0 4px;background:var(--bg-tertiary);border-radius:6px;margin:2px 6px;">
<div x-show="ctxTagExistingOpen && ctxAvailTags.length > 0" style="padding:0 0 4px;background:var(--bg-tertiary);border-radius:6px;margin:2px 6px;">
<template x-for="t in ctxAvailTags" :key="'ctx-avail'+t.id">
<div class="ctx-item ctx-add-tag-item" @click.stop="ctxAddExistingTag(t), ctxTagExistingOpen=false">
<span class="ctx-tag-color" :style="{background: t.color}"></span>