Update cookcli-card.js

This commit is contained in:
TheThomaas 2026-09-17 17:29:58 +02:00
parent dfc433495e
commit eb563a2e8a

85
dist/cookcli-card.js vendored
View file

@ -129,18 +129,18 @@ class CookCliCard extends HTMLElement {
return `<div class="state-msg">Aucune recette trouvée.</div>`; return `<div class="state-msg">Aucune recette trouvée.</div>`;
} }
const rows = this._recipes const cards = this._recipes
.map((r) => { .map((r) => {
const meta = []; const meta = [];
if (r.time) meta.push(`<span>⏱ ${this._escape(r.time)}</span>`); if (r.time) meta.push(`<span>⏱ ${this._escape(r.time)}</span>`);
if (r.servings) meta.push(`<span>🍽 ${this._escape(String(r.servings))}</span>`); if (r.servings) meta.push(`<span>🍽 ${this._escape(String(r.servings))}</span>`);
const thumb = r.image_url const thumb = r.image_url
? `<img class="recipe-thumb" src="${this._escape(r.image_url)}" alt="" loading="lazy" onerror="this.style.display='none'">` ? `<img class="recipe-thumb" src="${this._escape(r.image_url)}" alt="" loading="lazy" onerror="this.style.background='var(--divider-color)';this.removeAttribute('src')">`
: `<div class="recipe-thumb recipe-thumb-placeholder"></div>`; : `<div class="recipe-thumb recipe-thumb-placeholder"></div>`;
return ` return `
<div class="recipe-row" data-view-path="${this._escape(r.view_path)}"> <div class="recipe-card" data-view-path="${this._escape(r.view_path)}">
${thumb} ${thumb}
<div class="recipe-row-text"> <div class="recipe-card-text">
<div class="recipe-name">${this._escape(r.name)}</div> <div class="recipe-name">${this._escape(r.name)}</div>
<div class="recipe-meta">${meta.join("")}</div> <div class="recipe-meta">${meta.join("")}</div>
</div> </div>
@ -148,7 +148,7 @@ class CookCliCard extends HTMLElement {
}) })
.join(""); .join("");
return `<div class="recipe-list">${rows}</div>`; return `<div class="recipe-grid">${cards}</div>`;
} }
_render() { _render() {
@ -167,27 +167,74 @@ class CookCliCard extends HTMLElement {
.card-content { padding: 0 16px 16px; } .card-content { padding: 0 16px 16px; }
.state-msg { padding: 16px 0; color: var(--secondary-text-color); } .state-msg { padding: 16px 0; color: var(--secondary-text-color); }
.state-msg.error { color: var(--error-color, #db4437); } .state-msg.error { color: var(--error-color, #db4437); }
.recipe-list { display: flex; flex-direction: column; }
.recipe-row { /* Grille responsive : 1 colonne par défaut (mobile),
display: flex; align-items: center; gap: 12px; puis 2 / 3 / 4 colonnes selon la largeur disponible. */
padding: 10px 4px; border-bottom: 1px solid var(--divider-color); .recipe-grid {
display: grid;
grid-template-columns: 1fr;
gap: 12px;
}
@media (min-width: 500px) {
.recipe-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 800px) {
.recipe-grid { grid-template-columns: repeat(3, 1fr); }
}
@media (min-width: 1100px) {
.recipe-grid { grid-template-columns: repeat(4, 1fr); }
}
.recipe-card {
display: flex;
flex-direction: column;
background: var(--card-background-color);
border-radius: 12px;
overflow: hidden;
cursor: pointer; cursor: pointer;
border: 1px solid var(--divider-color);
transition: transform 0.15s ease, box-shadow 0.15s ease;
} }
.recipe-row:last-child { border-bottom: none; } .recipe-card:hover {
.recipe-row:hover { background: var(--secondary-background-color); } transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.recipe-card:hover .recipe-name {
color: var(--primary-color);
}
.recipe-thumb { .recipe-thumb {
width: 56px; height: 56px; border-radius: 8px; object-fit: cover; width: 100%;
flex-shrink: 0; background: var(--secondary-background-color); aspect-ratio: 16 / 10;
object-fit: cover;
display: block;
background: var(--secondary-background-color);
flex-shrink: 0;
}
.recipe-thumb-placeholder {
background: var(--divider-color);
}
.recipe-card-text {
padding: 10px 12px 12px;
min-width: 0;
} }
.recipe-thumb-placeholder { background: var(--divider-color); }
.recipe-row-text { min-width: 0; }
.recipe-name { .recipe-name {
font-weight: 500; color: var(--primary-text-color); font-weight: 500;
overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--primary-text-color);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-bottom: 4px;
} }
.recipe-meta { .recipe-meta {
display: flex; gap: 12px; font-size: 0.85em; display: flex;
color: var(--secondary-text-color); white-space: nowrap; gap: 12px;
font-size: 0.85em;
color: var(--secondary-text-color);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
} }
`; `;
} }