From ece0ccb6ff38633a09419ea6cffb39c51b1bf9c5 Mon Sep 17 00:00:00 2001 From: louispaulb Date: Thu, 4 Jun 2026 19:46:04 -0400 Subject: [PATCH] =?UTF-8?q?Planification:=20Suppr/Backspace=20pour=20vider?= =?UTF-8?q?=20les=20cases=20s=C3=A9lectionn=C3=A9es=20(ou=20la=20case=20ac?= =?UTF-8?q?tive)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit onKey: garde anti-champ (n'intercepte pas dans input/textarea/select/contenteditable) + empêche le 'retour arrière' du navigateur (preventDefault). Suppr/⌫ vide la sélection (ou la case cliquée), avec pushHistory (annulable). Hint de légende mis à jour. Co-Authored-By: Claude Opus 4.8 (1M context) --- apps/ops/src/pages/PlanificationPage.vue | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/apps/ops/src/pages/PlanificationPage.vue b/apps/ops/src/pages/PlanificationPage.vue index 7a88536..525a6d1 100644 --- a/apps/ops/src/pages/PlanificationPage.vue +++ b/apps/ops/src/pages/PlanificationPage.vue @@ -98,7 +98,7 @@ garde ·libre Jmodifié (non publié) - · glisser = sélection · shift+clic = bloc · clic en-tête = colonne · clic nom = rangée · ctrl+clic = +1 · ctrl+C/V = copier/coller une case + · glisser = sélection · shift+clic = bloc · clic en-tête = colonne · clic nom = rangée · ctrl+clic = +1 · ctrl+C/V = copier/coller · Suppr/⌫ = vider
@@ -645,10 +645,19 @@ async function togglePause (t) { try { const paused = !isPaused(t); await roster function err (e) { $q.notify({ type: 'negative', message: '' + (e.message || e) }) } function onKey (e) { + const tag = (e.target && e.target.tagName) || '' + if (/INPUT|TEXTAREA|SELECT/.test(tag) || (e.target && e.target.isContentEditable)) return // ne pas intercepter quand on tape dans un champ const k = e.key.toLowerCase() if ((e.ctrlKey || e.metaKey) && k === 'z') { e.preventDefault(); if (e.shiftKey) redo(); else undo(); return } if ((e.ctrlKey || e.metaKey) && k === 'c' && (selection.value.length || activeCell.value)) { e.preventDefault(); menu.show = false; copyCell(); return } - if ((e.ctrlKey || e.metaKey) && k === 'v' && (selection.value.length || activeCell.value)) { e.preventDefault(); menu.show = false; pasteCells() } + if ((e.ctrlKey || e.metaKey) && k === 'v' && (selection.value.length || activeCell.value)) { e.preventDefault(); menu.show = false; pasteCells(); return } + if ((k === 'delete' || k === 'backspace') && (selection.value.length || activeCell.value)) { + e.preventDefault(); menu.show = false + const targets = selection.value.length ? selection.value.slice() : [activeCell.value.id + '|' + activeCell.value.iso] + pushHistory() + for (const key of targets) { const [tid, iso] = key.split('|'); clearLocal(tid, iso) } + if (selection.value.length) selection.value = [] + } } function onUnload (e) { if (dirty.value) { e.preventDefault(); e.returnValue = '' } } onMounted(async () => { loadLS(); document.addEventListener('keydown', onKey); document.addEventListener('mouseup', onUp); window.addEventListener('beforeunload', onUnload); try { await loadBase() } catch (e) { err(e) } await loadWeek() })