Abmacode12's picture
<!doctype html>
439ea03 verified
// ===== util =====
const toastEl = document.getElementById('toast');
function toast(msg) {
toastEl.hidden = false;
toastEl.textContent = msg;
clearTimeout(toast._t);
toast._t = setTimeout(() => (toastEl.hidden = true), 1400);
}
// ===== éléments =====
const promptInput = document.getElementById('promptInput');
const generateBtn = document.getElementById('generateBtn');
const micBtn = document.getElementById('micBtn');
const codeOutput = document.getElementById('codeOutput');
const copyBtn = document.getElementById('copyBtn');
const clearBtn = document.getElementById('clearBtn');
const colRight = document.getElementById('colRight');
const appTitle = document.getElementById('appTitle');
const appSubtitle = document.getElementById('appSubtitle');
// ===== générateur de code (factice) =====
function fakeGenerate(prompt) {
const p = (prompt || '').trim();
if (!p) return "// Écris une demande puis clique sur Générer ✨";
return `// ✅ Demande reçue : ${p}
function main() {
console.log("Hello Espace Codage!");
}
main();`;
}
// ===== moteur de consignes UI (simple) =====
function isUiCommand(text) {
const t = (text || '').toLowerCase();
return ['colonne', 'cache', 'affiche', 'vide', 'titre', 'sous-titre', 'espace codage'].some((k) => t.includes(k));
}
function applyUiCommand(text) {
const raw = text || '';
const t = raw.toLowerCase();
if (t.includes('cache') && (t.includes('colonne 3') || t.includes('colonne trois') || t.includes('droite'))) {
colRight.style.display = 'none';
toast('✅ Colonne 3 masquée');
return true;
}
if ((t.includes('affiche') || t.includes('montre')) && (t.includes('colonne 3') || t.includes('droite'))) {
colRight.style.display = '';
toast('✅ Colonne 3 affichée');
return true;
}
if (t.includes('colonne 3') && t.includes('vide')) {
colRight.innerHTML = '';
colRight.style.display = '';
toast('✅ Colonne 3 vidée');
return true;
}
// Titre: ...
const mTitle = raw.match(/(?:titre|nom)\s*[:=]\s*(.+)$/i);
if (mTitle) {
appTitle.textContent = mTitle[1].trim();
toast('✅ Titre mis à jour');
return true;
}
// Sous-titre: ...
const mSub = raw.match(/(?:sous[-\s]?titre|description)\s*[:=]\s*(.+)$/i);
if (mSub) {
appSubtitle.textContent = mSub[1].trim();
toast('✅ Sous-titre mis à jour');
return true;
}
toast('ℹ️ Consigne non reconnue');
return false;
}
// ===== actions =====
generateBtn.addEventListener('click', () => {
const text = promptInput.value;
if (isUiCommand(text)) {
if (applyUiCommand(text)) return;
}
codeOutput.textContent = fakeGenerate(text);
});
document.querySelectorAll('.chip').forEach((btn) => {
btn.addEventListener('click', () => {
const p = btn.dataset.prompt || '';
promptInput.value = p;
codeOutput.textContent = fakeGenerate(p);
});
});
copyBtn.addEventListener('click', async () => {
try {
await navigator.clipboard.writeText(codeOutput.textContent);
toast('✅ Copié');
} catch {
alert('Copie impossible automatiquement.');
}
});
clearBtn.addEventListener('click', () => {
promptInput.value = '';
codeOutput.textContent = "// Le code généré apparaîtra ici…";
toast('✅ Effacé');
});
// Micro (si disponible)
let recognition = null;
if ('webkitSpeechRecognition' in window || 'SpeechRecognition' in window) {
const SR = window.SpeechRecognition || window.webkitSpeechRecognition;
recognition = new SR();
recognition.lang = 'fr-FR';
recognition.interimResults = true;
recognition.onresult = (event) => {
let transcript = '';
for (let i = event.resultIndex; i < event.results.length; i++) {
transcript += event.results[i][0].transcript;
}
promptInput.value = transcript.trim();
};
}
micBtn.addEventListener('click', () => {
if (!recognition) {
alert('Micro non disponible sur ce navigateur.');
return;
}
try {
recognition.start();
} catch {}
});
// Preuve que le JS charge
toast('✅ Espace Codage prêt');