Outil de dépannage (Toyota • Québec) — 500 situations & solutions
Filtrer & trouver
↺ Réinitialiser
Astuce : cherchez un mot-clé (ex. « voyant », « frein », « CarPlay », « froid »).
Recherche
Catégorie
Motorisation / type
Niveau de risque (tri rapide)
Arrêtez immédiatement si vous avez : voyant rouge clignotant, fumée/odeur de carburant, perte de freinage, surchauffe, direction instable, ou tout comportement dangereux. Stationnez en sécurité et contactez l’assistance routière / un technicien qualifié.
Mode “hiver Québec” : plusieurs scénarios incluent le froid, la neige, le sel et les démarrages difficiles. Appliquez toujours les procédures du manuel du propriétaire pour votre modèle/année.
🖨️ Imprimer
🔗 Copier un lien
Personnalisation rapide : changez les variables CSS au début du fichier (--toyota-red, --bg, etc.) pour coller à votre site.
Situations & solutions
Utilisez la recherche et les filtres à gauche.
Replier
Ouvrir 3
`).join("");
els.sevChips.addEventListener("click", (e)=>{
const chip = e.target.closest(".chip");
if(!chip) return;
state.sev = chip.dataset.id;
[...els.sevChips.querySelectorAll(".chip")].forEach(c=>c.dataset.on = (c.dataset.id===state.sev) ? "1":"0");
render();
syncToUrl();
});
}
function matches(issue){
const q = state.q.trim().toLowerCase();
if(q){
const hay = (issue.title+" "+issue.description+" "+issue.catLabel+" "+issue.solutions.join(" ")).toLowerCase();
if(!hay.includes(q)) return false;
}
if(state.cat!=="all" && issue.cat!==state.cat) return false;
if(state.power!=="all"){
if(!issue.applicable.includes(state.power)) return false;
}
if(state.sev!=="all" && issue.severity!==state.sev) return false;
return true;
}
function makeTags(issue){
const sev = sevTag(issue.severity);
const p = (state.power==="all") ? null : POWERTRAINS.find(x=>x.id===state.power);
const powerTag = p ? `
${p.label} ` : "";
return `${powerTag}
${sev.label} ${issue.catLabel} `;
}
function issueHtml(issue){
const sev = sevTag(issue.severity);
const icon = ICONS[issue.icon] || ICONS.shield;
return `
${icon}
${escapeHtml(issue.title)}
${makeTags(issue)}
${escapeHtml(issue.description)}
Solutions (2–3)
${issue.solutions.slice(0,3).map(s=>`${escapeHtml(s)} `).join("")}
Astuce : si le problème revient malgré les actions simples, une lecture de codes/inspection est souvent la prochaine étape.
Vérifications rapides
${issue.checks.map(s=>`${escapeHtml(s)} `).join("")}
Niveau de risque : ${sev.label}
`;
}
function render(){
const shown = ALL.filter(matches);
els.countShown.textContent = String(shown.length);
// Title/subtitle
const catLabel = state.cat==="all" ? "Toutes catégories" : (CATEGORIES.find(c=>c.id===state.cat)?.label || state.cat);
const powerLabel = POWERTRAINS.find(p=>p.id===state.power)?.label || "Toutes";
const sevLabel = state.sev==="all" ? "Tous risques" : (state.sev==="low" ? "Risque faible" : state.sev==="mid" ? "Risque modéré" : "Risque élevé");
els.listTitle.textContent = `Situations & solutions — ${catLabel}`;
els.listSubtitle.textContent = `Motorisation: ${powerLabel} • Filtre: ${sevLabel}${state.q ? " • Recherche: “"+state.q+"”" : ""}`;
// Render list
if(shown.length===0){
els.list.innerHTML = `
Aucun résultat. Essayez un autre mot-clé (ex. “voyant”, “froid”, “frein”, “vibration”).
`;
return;
}
els.list.innerHTML = shown.map(issueHtml).join("");
}
function reset(){
state.q=""; state.cat="all"; state.power="all"; state.sev="all";
els.q.value=""; els.cat.value="all"; els.power.value="all";
[...els.sevChips.querySelectorAll(".chip")].forEach(c=>c.dataset.on = (c.dataset.id==="all") ? "1":"0");
render();
syncToUrl(true);
}
// --- URL sync (permet de partager un lien qui conserve les filtres)
function readFromUrl(){
const u = new URL(location.href);
state.q = u.searchParams.get("q") || "";
state.cat = u.searchParams.get("cat") || "all";
state.power = u.searchParams.get("power") || "all";
state.sev = u.searchParams.get("sev") || "all";
els.q.value = state.q;
els.cat.value = state.cat;
els.power.value = state.power;
[...els.sevChips.querySelectorAll(".chip")].forEach(c=>c.dataset.on = (c.dataset.id===state.sev) ? "1":"0");
}
function syncToUrl(clear=false){
const u = new URL(location.href);
if(clear){
u.searchParams.delete("q");
u.searchParams.delete("cat");
u.searchParams.delete("power");
u.searchParams.delete("sev");
}else{
state.q ? u.searchParams.set("q", state.q) : u.searchParams.delete("q");
(state.cat!=="all") ? u.searchParams.set("cat", state.cat) : u.searchParams.delete("cat");
(state.power!=="all") ? u.searchParams.set("power", state.power) : u.searchParams.delete("power");
(state.sev!=="all") ? u.searchParams.set("sev", state.sev) : u.searchParams.delete("sev");
}
history.replaceState({}, "", u);
}
async function copyFiltersLink(){
try{
await navigator.clipboard.writeText(location.href);
toast("Lien copié ✅");
}catch(e){
// fallback
const tmp = document.createElement("textarea");
tmp.value = location.href;
document.body.appendChild(tmp);
tmp.select();
document.execCommand("copy");
tmp.remove();
toast("Lien copié ✅");
}
}
// --- tiny toast
let toastEl;
function toast(msg){
if(!toastEl){
toastEl = document.createElement("div");
toastEl.style.position="fixed";
toastEl.style.bottom="18px";
toastEl.style.left="50%";
toastEl.style.transform="translateX(-50%)";
toastEl.style.background="rgba(17,17,17,.92)";
toastEl.style.color="#fff";
toastEl.style.padding="10px 12px";
toastEl.style.borderRadius="999px";
toastEl.style.fontSize="13px";
toastEl.style.zIndex="9999";
toastEl.style.boxShadow="0 10px 25px rgba(0,0,0,.2)";
toastEl.style.opacity="0";
toastEl.style.transition="opacity .2s ease";
document.body.appendChild(toastEl);
}
toastEl.textContent = msg;
toastEl.style.opacity="1";
clearTimeout(toastEl._t);
toastEl._t = setTimeout(()=> toastEl.style.opacity="0", 1600);
}
function escapeHtml(s){
return String(s)
.replaceAll("&","&")
.replaceAll("",">")
.replaceAll('"',""")
.replaceAll("'","'");
}
// --- events
els.q.addEventListener("input", (e)=>{ state.q=e.target.value; render(); syncToUrl(); });
els.cat.addEventListener("change", (e)=>{ state.cat=e.target.value; render(); syncToUrl(); });
els.power.addEventListener("change", (e)=>{ state.power=e.target.value; render(); syncToUrl(); });
els.resetBtn.addEventListener("click", reset);
els.printBtn.addEventListener("click", ()=> window.print());
els.copyLinkBtn.addEventListener("click", copyFiltersLink);
els.collapseAllBtn.addEventListener("click", ()=>{
[...document.querySelectorAll("details.issue")].forEach(d=>d.open=false);
toast("Tout replié");
});
els.expandTopBtn.addEventListener("click", ()=>{
const list = [...document.querySelectorAll("details.issue")];
list.forEach((d,idx)=> d.open = idx