From c2f65b2ea1e4377eeae67c2ebbf051a7e576ac3f Mon Sep 17 00:00:00 2001 From: Cosmo Date: Thu, 16 Jul 2026 10:08:35 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=BC=D0=BE=D0=BD=D1=82:=20=D1=82?= =?UTF-8?q?=D0=B5=D1=85=D0=BD=D0=B8=D0=BA=D0=B0=20=E2=80=94=20=D0=B0=D0=B2?= =?UTF-8?q?=D1=82=D0=BE-=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=20=D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=B5?= =?UTF-8?q?=D0=BA=20=D0=BF=D0=BE=20=D1=82=D0=B8=D0=BF=D1=83=20+=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B2=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - inline() поддерживает
в тексте заметки (было видно литеральным) - карточки: «Модель
описание» → модель жирным + приглушённое описание - колонка «Тип/Категория/Техника» → карточки группируются по типу с подзаголовками (пустая ячейка типа наследует значение сверху) - таблица «Варианты техники» переведена в формат Тип|Название|Цена|Ссылка|Фото - README: описан формат таблицы техники Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01KjyzuPoH9T5k3oCbKEEazy --- Ремонт квартира/.site/assets/style.css | 10 +++++++ Ремонт квартира/.site/generate.js | 41 +++++++++++++++++++++----- Ремонт квартира/README.md | 6 ++++ Ремонт квартира/Гостиная-кухня.md | 16 +++++----- 4 files changed, 58 insertions(+), 15 deletions(-) diff --git a/Ремонт квартира/.site/assets/style.css b/Ремонт квартира/.site/assets/style.css index 487eb29..4409707 100644 --- a/Ремонт квартира/.site/assets/style.css +++ b/Ремонт квартира/.site/assets/style.css @@ -280,6 +280,7 @@ a.rooms-link:hover .room-name { color: var(--sage-deep); } .opt__body { padding: 18px 20px 20px; display: flex; flex-direction: column; gap: 4px; flex: 1; } .opt__no { font-size: 12px; letter-spacing: .12em; color: var(--sage-deep); font-weight: 600; } .opt__name { font-family: var(--ff-display); font-size: 20px; line-height: 1.15; } +.opt__desc { font-size: 13.5px; line-height: 1.5; color: var(--ink-soft); margin-top: 2px; } .opt__price { font-family: var(--ff-display); font-size: 28px; margin-top: 8px; } .opt__price span { font-size: 15px; color: var(--ink-soft); } .opt__link { @@ -288,6 +289,15 @@ a.rooms-link:hover .room-name { color: var(--sage-deep); } } .opt__link svg { width: 15px; height: 15px; transition: transform .2s; } .opt__link:hover svg { transform: translate(2px,-2px); } +/* группа карточек по типу (техника) */ +.opt-group { margin-top: 34px; } +.opt-group:first-child { margin-top: 0; } +.opt-group__title { + display: flex; align-items: baseline; gap: 12px; margin: 0 0 16px; + font-family: var(--ff-display); font-size: 21px; letter-spacing: -.01em; +} +.opt-group__title span { font-size: 12px; letter-spacing: .06em; color: var(--ink-soft); font-weight: 400; } +.opt-group__title::after { content: ""; flex: 1; height: 1px; background: var(--line); align-self: center; } @media (max-width: 860px) { .options { grid-template-columns: 1fr 1fr; } } @media (max-width: 560px) { .options { grid-template-columns: 1fr; } } diff --git a/Ремонт квартира/.site/generate.js b/Ремонт квартира/.site/generate.js index 685c572..689103e 100644 --- a/Ремонт квартира/.site/generate.js +++ b/Ремонт квартира/.site/generate.js @@ -42,6 +42,7 @@ function inline(t) { t = esc(t); t = t.replace(/\*\*([^*]+)\*\*/g, '$1'); t = t.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1'); + t = t.replace(/<br\s*\/?>/gi, '
'); // разрешаем перенос строки
в тексте заметки return t; } @@ -179,28 +180,54 @@ function renderCards(tbl) { const iPrice = colIndex(H, /цена|price|₽|руб/i); const iLink = colIndex(H, /ссылк|link|url/i); const iPhoto = colIndex(H, /фото|photo|картин|image/i); - const iName = H.findIndex((h, idx) => idx !== iNo && idx !== iPrice && idx !== iLink && idx !== iPhoto && h); + const iCat = colIndex(H, /^(тип|категор|группа|техника|раздел)$/i); + const iName = H.findIndex((h, idx) => idx !== iNo && idx !== iPrice && idx !== iLink && idx !== iPhoto && idx !== iCat && h); - const cards = tbl.rows.map((r, idx) => { - const no = iNo >= 0 && r[iNo] ? r[iNo] : String(idx + 1); - const name = iName >= 0 ? r[iName] : ''; + // одна карточка. no — подпись «Вариант N» (в пределах группы) + const card = (r, no) => { + const nameRaw = iName >= 0 ? (r[iName] || '') : ''; + // «Модель
описание» → жирная модель + приглушённое описание + const [head, ...rest] = nameRaw.split(//i); + const desc = rest.join('
').trim(); const priceRaw = iPrice >= 0 ? r[iPrice] : ''; const priceNum = (priceRaw.match(/[\d\s .]+/) || [''])[0].trim(); const unit = /₽|руб/i.test(priceRaw) ? '₽' : ''; const photo = iPhoto >= 0 ? parseWiki(r[iPhoto]) : null; const url = iLink >= 0 ? extractUrl(r[iLink]) : ''; const media = photo - ? `
${esc(name)}
` : ''; + ? `
${esc(head)}
` : ''; const price = priceNum ? `${esc(priceNum)}${unit ? ` ${unit}` : ''}` : ''; const link = url ? `Открыть на ${esc(domainLabel(url))} ` : ''; return `
${media}
Вариант ${esc(no)} - ${inline(name)} + ${inline(head)} + ${desc ? `${inline(desc)}` : ''} ${price}${link}
`; + }; + + // без колонки типа — простая сетка карточек + if (iCat < 0) { + const cards = tbl.rows.map((r, idx) => card(r, iNo >= 0 && r[iNo] ? r[iNo] : idx + 1)).join('\n'); + return `
${cards}
`; + } + + // с колонкой типа — группируем по типу (пустая ячейка наследует тип сверху) + const groups = []; + let cur = null, lastCat = ''; + tbl.rows.forEach((r) => { + const cat = (r[iCat] && r[iCat].trim()) || lastCat; + lastCat = cat; + if (!cur || cur.cat !== cat) { cur = { cat, rows: [] }; groups.push(cur); } + cur.rows.push(r); + }); + return groups.map((g) => { + const cards = g.rows.map((r, i) => card(r, i + 1)).join('\n'); + return `
+

${inline(g.cat)}${g.rows.length} ${plural(g.rows.length, 'вариант', 'варианта', 'вариантов')}

+
${cards}
`; }).join('\n'); - return `
${cards}
`; } function tableCell(c) { diff --git a/Ремонт квартира/README.md b/Ремонт квартира/README.md index 1a68d53..a64f64d 100644 --- a/Ремонт квартира/README.md +++ b/Ремонт квартира/README.md @@ -26,6 +26,12 @@ - Подряд идущие картинки `![[файл.png]]` → **галерея рендеров** (1 крупно / 2 / 3 / 4 в сетке). - **Таблица с колонкой «Фото» и без «Комментарий»** → красивые **карточки** (диваны, столы). Колонки: `№ | Название | Цена | Ссылка | Фото`. Ссылка — просто URL, кнопка подпишется сама. + - В «Названии» можно писать модель + описание, разделяя переносом `
`: + `Haier C4F640
400 л, инвертор` → модель жирным, описание — приглушённой строкой под ней. + - Добавь колонку **«Тип»** (или «Категория», «Техника») — карточки **автоматически сгруппируются** + по типу с подзаголовками (Холодильник, Духовка…). Тип пиши в первой строке группы, + в остальных строках этой группы ячейку «Тип» **оставляй пустой** — они наследуют тип сверху. + Пример для техники: `Тип | Модель | Цена | Ссылка | Фото`. - **Таблица с колонкой «Комментарий»** → аккуратная **сравнительная таблица** (техника). Если добавить колонку «Фото» — появятся миниатюры прямо в таблице. - Картинка сразу перед нумерованным списком → блок **«вариант отделки»** (фото слева, список справа). diff --git a/Ремонт квартира/Гостиная-кухня.md b/Ремонт квартира/Гостиная-кухня.md index 01d42a2..b47658d 100644 --- a/Ремонт квартира/Гостиная-кухня.md +++ b/Ремонт квартира/Гостиная-кухня.md @@ -35,14 +35,14 @@ swatches: Шалфей #7C8A66, Дуб #C7A579, Кремовый #EDE8DE, Гра ### Варианты техники -| Название | Цена | Ссылка | Фото | -| ------------------------------------------------------------------------------------------------ | -------- | ---------------------------------------------------------------------------------- | ----------------------------------------- | -| Варочная панель Haier | 28 000 ₽ | https://haieronline.ru/catalog/built-in/glass-ceramic-cove/hhy-y53nvb/ | ![[Pasted image 20260716000501.png\|154]] | -| Духовка Haier HOD-PM08TGB
70 л, 8 режимов, 2 стекла | 29 000 ₽ | https://haieronline.ru/catalog/built-in/ovens/hodpm08tgb/ | ![[Pasted image 20260716000638.png\|176]] | -| Духовка Haier HOX-P06HGBX
76 л, 6 режимов, 3 стекла | 30 000 ₽ | https://haieronline.ru/catalog/built-in/ovens/hoxp06hgbx/ | ![[Pasted image 20260716000625.png\|177]] | -| Холодильник LG GA-B509CLSL
419 л, инвентор,
3 ящика морозилки,
нулевой зазор | 50 000 ₽ | https://www.lg.com/ru/refrigerators/lg-GA-B509CLSL# | ![[Pasted image 20260716125354.png\|159]] | -| Холодильник HAIER C4F640CFMRGU1
400 л, инвентор,
4 ящика морозилки, нулевая зона свежести | 59 000 ₽ | https://haieronline.ru/catalog/appliances/fridges/kholodilnik-haier-c4f640cfmrgu1/ | ![[Pasted image 20260716125554.png\|155]] | -| | | | | +| Тип | Название | Цена | Ссылка | Фото | +| --- | --- | --- | --- | --- | +| Варочная панель | Haier | 28 000 ₽ | https://haieronline.ru/catalog/built-in/glass-ceramic-cove/hhy-y53nvb/ | ![[Pasted image 20260716000501.png\|154]] | +| Духовка | Haier HOD-PM08TGB
70 л, 8 режимов, 2 стекла | 29 000 ₽ | https://haieronline.ru/catalog/built-in/ovens/hodpm08tgb/ | ![[Pasted image 20260716000638.png\|176]] | +| | Haier HOX-P06HGBX
76 л, 6 режимов, 3 стекла | 30 000 ₽ | https://haieronline.ru/catalog/built-in/ovens/hoxp06hgbx/ | ![[Pasted image 20260716000625.png\|177]] | +| Холодильник | LG GA-B509CLSL
419 л, инвентор,
3 ящика морозилки,
нулевой зазор | 50 000 ₽ | https://www.lg.com/ru/refrigerators/lg-GA-B509CLSL# | ![[Pasted image 20260716125354.png\|159]] | +| | HAIER C4F640CFMRGU1
400 л, инвентор,
4 ящика морозилки, нулевая зона свежести | 59 000 ₽ | https://haieronline.ru/catalog/appliances/fridges/kholodilnik-haier-c4f640cfmrgu1/ | ![[Pasted image 20260716125554.png\|155]] | +| | | | | | | Техника | Ссылка | Цена | Комментарий | Фото | | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ---- |