diff --git a/frontend/editor-poc.html b/frontend/editor-poc.html index 69638bc..68c53e6 100644 --- a/frontend/editor-poc.html +++ b/frontend/editor-poc.html @@ -393,7 +393,7 @@ body { font-family: var(--sans); background: var(--bg); color: var(--text); heig
- Type / for commands | Alt+I Insert + Type / for commands | Alt+/ autocomplete | Alt+I Insert Ctrl+J AI panel Ctrl+S save Ctrl+K link @@ -442,6 +442,9 @@ body { font-family: var(--sans); background: var(--bg); color: var(--text); heig Ctrl+SSauvegarder Clic sur le titreRenommer le fichier Ctrl+JPanneau AI + Alt+/Autocompletion intelligente + Enter (liste)Continue la liste (-, *, 1.) et checkboxes + Enter (liste vide)Termine la liste

Slash — Commandes

@@ -1783,15 +1786,63 @@ body { font-family: var(--sans); background: var(--bg); color: var(--text); heig else if (e.key === 'Escape') { e.preventDefault(); hideAutocomplete(); } return; } - // Ctrl+Space: force autocomplete - if ((e.ctrlKey || e.metaKey) && e.key === ' ') { + // Alt+/ : force autocomplete + if (e.altKey && !e.ctrlKey && !e.metaKey && e.key === '/') { e.preventDefault(); triggerAutocomplete(); + return; } // Auto-trigger on [[ for wikilinks if (e.key === '[' && ta.selectionStart > 0 && ta.value[ta.selectionStart - 1] === '[') { setTimeout(triggerAutocomplete, 50); } + // Enter: auto-continue lists and checkboxes + if (e.key === 'Enter' && !e.shiftKey) { + var before = ta.value.slice(0, ta.selectionStart); + var after = ta.value.slice(ta.selectionEnd); + var lineStart = before.lastIndexOf('\n') + 1; + var currentLine = before.slice(lineStart); + var indent = (currentLine.match(/^(\s*)/) || [''])[0]; + // Ordered list: 1. 2. 3. etc + var olMatch = currentLine.match(/^(\s*)(\d+)\.\s/); + // Unordered list: - * + + var ulMatch = currentLine.match(/^(\s*)([-*+])\s/); + // Task checkbox: - [ ] or - [x] + var taskMatch = currentLine.match(/^(\s*)([-*+])\s+\[([ xX])\]\s/); + + if (taskMatch) { + // Continue checkbox (empty, unchecked) + e.preventDefault(); + var newNumber = ''; + ta.value = before + '\n' + indent + taskMatch[2] + ' [ ] '; + ta.setSelectionRange(ta.value.length, ta.value.length); + markDirty(); autoHeight(); updateLineNumbers(); + return; + } else if (olMatch) { + // Auto-increment ordered list + e.preventDefault(); + var num = parseInt(olMatch[2]) + 1; + ta.value = before + '\n' + olMatch[1] + num + '. '; + ta.setSelectionRange(ta.value.length, ta.value.length); + markDirty(); autoHeight(); updateLineNumbers(); + return; + } else if (ulMatch) { + var afterTrim = currentLine.slice(ulMatch[0].length).trim(); + if (afterTrim.length === 0) { + // Empty bullet: remove it and break list + e.preventDefault(); + ta.value = before.slice(0, lineStart) + '\n' + after.slice(after.indexOf('\n') + 1); + ta.setSelectionRange(lineStart, lineStart); + } else { + // Continue bullet + e.preventDefault(); + ta.value = before + '\n' + ulMatch[1] + ulMatch[2] + ' '; + ta.setSelectionRange(ta.value.length, ta.value.length); + } + markDirty(); autoHeight(); updateLineNumbers(); + return; + } + } }); // Trigger on triple backtick @@ -1810,7 +1861,7 @@ body { font-family: var(--sans); background: var(--bg); color: var(--text); heig console.log('ObsiGate Editor v2 ready'); console.log(' File: ' + (fileVault ? fileVault + '/' + filePath : 'demo mode')); console.log(' AI: checking...'); - console.log(' Type / for commands | Select text for bubble | Ctrl+J AI | Ctrl+S save'); + console.log(' Type / for commands | Select text for bubble | Alt+/ autocomplete | Ctrl+J AI | Ctrl+S save'); })();