Bâtisseur de projet — ADÉPA
Enregistré ✓
🚀 OUTIL ADÉPA 100% GRATUIT · SANS INSCRIPTION

Construis ton projet

De l'idée à l'action, étape par étape. Tu repars avec une fiche prête à l'emploi.

0%

Outil offert par ADÉPA — association loi 1901. Tout se passe dans ton navigateur, aucune donnée envoyée à un serveur.

"],{type:"application/msword"}); } function exportPDF(){ printHTML(currentDocHTML()); } function exportWord(){ dl(wordHTML(currentDocHTML(),state.meta.name||"Mon projet"), slug(state.meta.name)+".doc"); toast("Fiche Word téléchargée 📄"); } const PHASE_NAMES={1:"phase-1-ton-idee",2:"phase-2-moyens-modele",3:"phase-3-action"}; function exportPhase(p,mode){ const content=buildPhaseDoc(p); if(mode==="pdf"){printHTML(content);} else{dl(wordHTML(content,(state.meta.name||"Mon projet")+" — Phase "+p), slug(state.meta.name)+"-"+PHASE_NAMES[p]+".doc");toast("Phase "+p+" téléchargée 📄");} } function exportJSON(){ const blob=new Blob([JSON.stringify(state,null,2)],{type:"application/json"}); dl(blob,slug(state.meta.name)+"-sauvegarde.json"); toast("Sauvegarde téléchargée 💾"); } function importJSON(e){ const f=e.target.files[0];if(!f)return; const r=new FileReader(); r.onload=()=>{try{const d=JSON.parse(r.result);state=Object.assign(FRESH(),d); // ensure ids + compat dates (ancien start/end -> due) state.objectives=(state.objectives||[]).map(o=>({id:o.id||uid(),text:o.text||"",micro:(o.micro||[]).map(m=>({id:m.id||uid(),text:m.text||"",who:m.who||"",due:m.due||m.end||m.start||"",done:!!m.done}))})); if(!state.objectives.length)state.objectives=[{id:uid(),text:"",micro:[]}]; if(!state.team.length)state.team=[{name:"",role:"",skill:""}]; if(!state.budget.length)state.budget=[{item:"",montant:""}]; if(!Array.isArray(state.income)||!state.income.length)state.income=[{item:"",montant:""}]; if(!Array.isArray(state.checklist))state.checklist=DEFAULT_CHECK.map(t=>({text:t,done:false})); if(!state.meta)state.meta={}; save();cur=1;updateAll();toast("Projet chargé ✅"); }catch(err){toast("Fichier non valide ❌")}}; r.readAsText(f); e.target.value=""; } function dl(blob,name){const u=URL.createObjectURL(blob);const a=document.createElement("a");a.href=u;a.download=name;document.body.appendChild(a);a.click();a.remove();setTimeout(()=>URL.revokeObjectURL(u),1500)}/* ---------------- ACCESSIBILITÉ ---------------- */ const A11Y_KEY="adepa_batisseur_a11y"; function loadA11y(){let o={big:false,font:false};try{const r=localStorage.getItem(A11Y_KEY);if(r)o=JSON.parse(r);}catch(e){}return o} function applyA11y(o){ const root=$("#approot");if(!root)return; root.classList.toggle("bigtext",!!o.big); root.classList.toggle("lisible",!!o.font); const bb=$("#a11yBig"),bf=$("#a11yFont"); if(bb)bb.classList.toggle("on",!!o.big); if(bf)bf.classList.toggle("on",!!o.font); } function initA11y(){ let o=loadA11y();applyA11y(o); const bb=$("#a11yBig"),bf=$("#a11yFont"); if(bb)bb.onclick=()=>{o.big=!o.big;applyA11y(o);try{localStorage.setItem(A11Y_KEY,JSON.stringify(o))}catch(e){}}; if(bf)bf.onclick=()=>{o.font=!o.font;applyA11y(o);try{localStorage.setItem(A11Y_KEY,JSON.stringify(o))}catch(e){}}; }/* ---------------- INIT ---------------- */ $("#next").onclick=next; $("#prev").onclick=prev; load(); initA11y(); updateAll();
Retour en haut