fix: tous les ; → , dans les expressions Alpine (12 occurrences)
FlowDeck CI / test (push) Failing after 4s
FlowDeck CI / docker (push) Has been skipped

Cause racine: local_workspace.html override le block topbar avec son
propre hamburger button qui avait encore ; au lieu de , dans l'expression
ternaire. Alpine parse les expressions via return <expr> → le ; terminait
le return prématurément → SyntaxError → cascade d'échecs d'initialisation
des composants enfants.

Corrigé dans:
- base.html: sidebar overlay @click (1 occurrence)
- local_workspace.html topbar hamburger (1 occurrence)
- local_workspace.html: 10 autres expressions (viewMode, searchQuery,
  filterType, draggedItemId, tagFilter, ctxAddNewTag, navigateToPath)

73 tests OK
This commit is contained in:
2026-07-12 20:45:24 -04:00
parent 2f3e52ebb0
commit 1c88afda85
2 changed files with 14 additions and 14 deletions
+1 -1
View File
@@ -16,7 +16,7 @@
<!-- ═══════════ MOBILE SIDEBAR OVERLAY ═══════════ -->
<div class="sidebar-overlay"
:class="{ visible: mobileSidebarOpen }"
@click="mobileSidebarOpen = false; sidebarCollapsed = true;">
@click="mobileSidebarOpen = false, sidebarCollapsed = true">
</div>
{# ─── Recursive tree macro ─── #}
+13 -13
View File
@@ -4,7 +4,7 @@
{% block topbar %}
<header class="topbar">
<button class="hamburger-btn" @click="sidebarCollapsed ? (sidebarCollapsed = false) : (mobileSidebarOpen = true; sidebarCollapsed = false)" title="Menu">
<button class="hamburger-btn" @click="sidebarCollapsed ? (sidebarCollapsed = false) : (mobileSidebarOpen = true, sidebarCollapsed = false)" title="Menu">
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>
</button>
<div class="topbar-left">
@@ -398,10 +398,10 @@
</template>
<div class="bc-edit-wrap" x-show="editingPath" @click.outside="editingPath=false" style="display:contents;">
<input class="bc-edit-input" x-ref="pathEdit" :value="pathValue"
@keydown.enter="navigateToPath(); editingPath=false"
@keydown.enter="navigateToPath(), editingPath=false"
@keydown.escape="editingPath=false"
placeholder="/workspace/...">
<button class="bc-edit-go" @click="navigateToPath(); editingPath=false">→</button>
<button class="bc-edit-go" @click="navigateToPath(), editingPath=false">→</button>
</div>
<button class="bc-edit-trigger" x-show="!editingPath" @click="startPathEdit()" title="Edit path">✎</button>
</div>
@@ -416,18 +416,18 @@
<span class="dropdown-arrow">▾</span>
</button>
<div class="view-dropdown-menu" x-show="viewMenuOpen" x-transition @click="viewMenuOpen=false">
<button class="view-menu-item" :class="{ active: viewMode==='tree' }" @click="viewMode='tree'; previewItem=null">🌳 Tree</button>
<button class="view-menu-item" :class="{ active: viewMode==='list' }" @click="viewMode='list'; previewItem=null">📋 List</button>
<button class="view-menu-item" :class="{ active: viewMode==='details' }" @click="viewMode='details'; previewItem=null">📊 Details</button>
<button class="view-menu-item" :class="{ active: viewMode==='title' }" @click="viewMode='title'; previewItem=null">🏷️ Cards</button>
<button class="view-menu-item" :class="{ active: viewMode==='content' }" @click="viewMode='content'; previewItem=null">📝 Content</button>
<button class="view-menu-item" :class="{ active: viewMode==='tree' }" @click="viewMode='tree', previewItem=null">🌳 Tree</button>
<button class="view-menu-item" :class="{ active: viewMode==='list' }" @click="viewMode='list', previewItem=null">📋 List</button>
<button class="view-menu-item" :class="{ active: viewMode==='details' }" @click="viewMode='details', previewItem=null">📊 Details</button>
<button class="view-menu-item" :class="{ active: viewMode==='title' }" @click="viewMode='title', previewItem=null">🏷️ Cards</button>
<button class="view-menu-item" :class="{ active: viewMode==='content' }" @click="viewMode='content', previewItem=null">📝 Content</button>
</div>
</div>
<div class="search-bar-inline">
<span class="search-icon">🔍</span>
<input class="search-input" type="text" placeholder="Filter..."
x-model="searchQuery" @input="doFilter" autocomplete="off">
<button class="search-clear" x-show="searchQuery" @click="searchQuery='';doFilter()" title="Clear">×</button>
<button class="search-clear" x-show="searchQuery" @click="searchQuery='', doFilter()" title="Clear">×</button>
</div>
<select class="sort-select" x-model="sortBy" @change="doSort()">
<option value="">Sort</option>
@@ -461,7 +461,7 @@
<button class="filter-chip" :class="{ active: filterType === 'image' }" @click="filterByType('image')" title="Images">🖼️</button>
<button class="filter-chip" :class="{ active: filterType === 'code' }" @click="filterByType('code')" title="Code">📜</button>
<button class="filter-chip" :class="{ active: filterType === 'text' }" @click="filterByType('text')" title="Text">📄</button>
<span x-show="filterType || searchQuery" class="filter-clear" @click="filterType='';searchQuery='';doFilter()">✕ clear</span>
<span x-show="filterType || searchQuery" class="filter-clear" @click="filterType='', searchQuery='', doFilter()">✕ clear</span>
</div>
<ul class="ws-tree" x-show="viewMode==='tree' && (displayTree.length>0 || (currentFolder > 0))" @click="handleTreeAction($event)">
@@ -480,7 +480,7 @@
:data-ws-id="node.id"
:data-folder-id="node.is_folder ? node.id : null"
@dragstart="onInternalDragStart($event, node.id)"
@dragend="draggedItemId = null; $el.style.opacity = ''"
@dragend="draggedItemId = null, $el.style.opacity = ''"
:class="{ selected: !!selectedIds[node.id] }">
<input type="checkbox" class="item-checkbox"
:checked="!!selectedIds[node.id]"
@@ -552,7 +552,7 @@
<span style="font-size:10px;opacity:.7" x-text="'('+t.count+')'"></span>
</button>
</template>
<button x-show="tagFilter" class="tag-chip rm-btn" @click="tagFilter='';doFilter()" style="margin-left:4px;">✕ clear</button>
<button x-show="tagFilter" class="tag-chip rm-btn" @click="tagFilter='', doFilter()" style="margin-left:4px;">✕ clear</button>
</div>
<!-- Filter table (shown when search/filter/tag is active) -->
@@ -819,7 +819,7 @@
</div>
<div style="display:flex;gap:4px;">
<input class="tag-input" x-ref="ctxTagInput"
@keydown.enter="ctxAddNewTag($event.target.value); $event.target.value=''"
@keydown.enter="ctxAddNewTag($event.target.value), $event.target.value=''"
@keydown.escape="ctxTagAdding=false"
@click.stop
placeholder="Tag name..."