feat(text7): Wave 0 — каркас Алгебры 7 и Геометрии 7 (hubs + миграции + стабы)
- docs/PLAN_ALGEBRA_7_GEOMETRY_7.md: полный план реализации (содержание, архитектура, волны) - 018_algebra_7_hub.sql: hub algebra-7 (sort=6) + 4 ch (§1-§3, §4-§14, §15-§20, §21-§25) - 019_geometry_7_hub.sql: hub geometry-7 (sort=7) + 5 ch (§1-§7, §8-§14, §15-§18, §19-§26, §27-§31) - algebra_7_hub.html: 4-карточный hub в pink-теме (Арефьева/Пирютко 2022) - geometry_7_hub.html: 5-карточный hub в blue-теме (Казаков 2022) - 9 стаб-страниц глав со ссылкой назад в свой hub (заглушки до реализации волн 1-9) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
'use strict';
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const root = path.join(__dirname, '..', '..', 'frontend', 'textbooks');
|
||||
|
||||
const STUBS = [
|
||||
{ f:'algebra_7_ch1.html', hub:'/textbook/algebra-7', hubName:'Алгебра 7', ch:'Глава 1 · Степень', range:'§1–§3', color:'#d97706', colorD:'#b45309', wm:'aⁿ' },
|
||||
{ f:'algebra_7_ch2.html', hub:'/textbook/algebra-7', hubName:'Алгебра 7', ch:'Глава 2 · Выражения и их преобразования', range:'§4–§14', color:'#059669', colorD:'#047857', wm:'P(x)' },
|
||||
{ f:'algebra_7_ch3.html', hub:'/textbook/algebra-7', hubName:'Алгебра 7', ch:'Глава 3 · Линейные уравнения. Неравенства. Функция', range:'§15–§20', color:'#7c3aed', colorD:'#6d28d9', wm:'y=kx' },
|
||||
{ f:'algebra_7_ch4.html', hub:'/textbook/algebra-7', hubName:'Алгебра 7', ch:'Глава 4 · Системы линейных уравнений', range:'§21–§25', color:'#0891b2', colorD:'#0e7490', wm:'{' },
|
||||
{ f:'geometry_7_ch1.html', hub:'/textbook/geometry-7', hubName:'Геометрия 7', ch:'Глава 1 · Начальные понятия', range:'§1–§7', color:'#d97706', colorD:'#b45309', wm:'●' },
|
||||
{ f:'geometry_7_ch2.html', hub:'/textbook/geometry-7', hubName:'Геометрия 7', ch:'Глава 2 · Признаки равенства треугольников', range:'§8–§14', color:'#059669', colorD:'#047857', wm:'△' },
|
||||
{ f:'geometry_7_ch3.html', hub:'/textbook/geometry-7', hubName:'Геометрия 7', ch:'Глава 3 · Параллельность прямых', range:'§15–§18', color:'#7c3aed', colorD:'#6d28d9', wm:'∥' },
|
||||
{ f:'geometry_7_ch4.html', hub:'/textbook/geometry-7', hubName:'Геометрия 7', ch:'Глава 4 · Сумма углов треугольника', range:'§19–§26', color:'#0891b2', colorD:'#0e7490', wm:'∠' },
|
||||
{ f:'geometry_7_ch5.html', hub:'/textbook/geometry-7', hubName:'Геометрия 7', ch:'Глава 5 · Задачи на построение', range:'§27–§31', color:'#db2777', colorD:'#9d174d', wm:'◯' },
|
||||
];
|
||||
|
||||
const tpl = ({ hub, hubName, ch, range, color, colorD, wm }) => `<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<title>${ch}</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@600;800;900&family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
|
||||
<script src="/js/api.js" defer></script>
|
||||
<style>
|
||||
:root{--bg:#fafafa;--card:#fff;--text:#0f172a;--muted:#64748b;--border:#e2e8f0;--pri:${color};--pri-d:${colorD};--pri-soft:${color}1a}
|
||||
html.dark{--bg:#0a0a0e;--card:#13120a;--text:#fef9e7;--muted:#a39070;--border:#2a2512}
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
html,body{min-height:100vh}
|
||||
body{font-family:'Inter',system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.55}
|
||||
.hdr{position:relative;background:linear-gradient(110deg,${colorD},${color} 60%,${color}cc);color:#fff;padding:46px 22px 30px;overflow:hidden;border-bottom:2px solid ${color}33}
|
||||
.hdr::before{content:'${wm}';position:absolute;right:-12px;top:50%;transform:translateY(-50%);font-family:'Outfit',sans-serif;font-size:clamp(5rem,15vw,11rem);font-weight:900;color:transparent;-webkit-text-stroke:1.5px rgba(255,255,255,.12);line-height:1;pointer-events:none}
|
||||
.hdr-inner{position:relative;z-index:1;max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:18px;flex-wrap:wrap}
|
||||
.hdr-back{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(255,255,255,.14);border-radius:9px;color:#fff;text-decoration:none;font-size:.85rem;font-weight:600}
|
||||
.hdr-back:hover{background:rgba(255,255,255,.24)}
|
||||
.hdr h1{font-family:'Outfit',sans-serif;font-size:1.6rem;font-weight:900}
|
||||
.hdr-sub{font-size:.92rem;opacity:.85;margin-top:4px}
|
||||
.ic{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;display:inline-block;vertical-align:middle}
|
||||
main{max-width:740px;margin:0 auto;padding:48px 22px 80px}
|
||||
.coming{background:var(--card);border:1.5px solid var(--border);border-radius:18px;padding:32px 28px;text-align:center;box-shadow:0 4px 18px rgba(0,0,0,.05)}
|
||||
.coming-icon{width:72px;height:72px;border-radius:20px;background:var(--pri-soft);display:flex;align-items:center;justify-content:center;margin:0 auto 18px;color:var(--pri-d)}
|
||||
.coming-icon svg{width:36px;height:36px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
|
||||
.coming h2{font-family:'Outfit',sans-serif;font-size:1.5rem;color:var(--pri-d);margin-bottom:12px}
|
||||
.coming p{font-size:1rem;color:var(--muted);margin-bottom:8px}
|
||||
.coming p b{color:var(--text)}
|
||||
.coming-cta{margin-top:24px;display:inline-flex;align-items:center;gap:8px;padding:12px 22px;background:linear-gradient(135deg,var(--pri),var(--pri-d));color:#fff;border-radius:12px;font-weight:700;text-decoration:none;box-shadow:0 6px 22px ${color}33}
|
||||
.coming-cta:hover{filter:brightness(1.08)}
|
||||
.range-pill{display:inline-block;padding:5px 13px;background:var(--pri-soft);color:var(--pri-d);border-radius:99px;font-size:.84rem;font-weight:700;margin-top:6px}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="hdr">
|
||||
<div class="hdr-inner">
|
||||
<div>
|
||||
<a href="${hub}" class="hdr-back">
|
||||
<svg class="ic" viewBox="0 0 24 24"><polyline points="15 18 9 12 15 6"/></svg>
|
||||
К ${hubName}
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<h1>${ch}</h1>
|
||||
<div class="hdr-sub">${range}</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<div class="coming">
|
||||
<div class="coming-icon">
|
||||
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
||||
</div>
|
||||
<h2>Глава в разработке</h2>
|
||||
<p>Эта глава — часть нового курса <b>${hubName}</b>.</p>
|
||||
<p>Содержание (${range}) уже спланировано — теория, интерактивы и финальный босс появятся в одной из ближайших волн реализации.</p>
|
||||
<div class="range-pill">${range}</div>
|
||||
<div style="margin-top:8px">
|
||||
<a href="${hub}" class="coming-cta">
|
||||
Вернуться к учебнику
|
||||
<svg class="ic" viewBox="0 0 24 24"><polyline points="9 18 15 12 9 6"/></svg>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`;
|
||||
|
||||
for (const s of STUBS) {
|
||||
fs.writeFileSync(path.join(root, s.f), tpl(s), 'utf8');
|
||||
console.log('wrote ' + s.f);
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
-- Algebra 7 hub migration.
|
||||
-- Adds hub row + 4 chapter children for Алгебра 7 (Арефьева/Пирютко, 2022).
|
||||
-- Pattern mirrors 014_algebra_8_hub.sql and 017_geometry_8_hub.sql.
|
||||
|
||||
-- 1. Hub row.
|
||||
INSERT INTO textbooks
|
||||
(slug, subject, grade, title, author, description, html_path, para_count, color, sort_order, is_active)
|
||||
VALUES
|
||||
('algebra-7', 'math', 7, 'Алгебра — 7 класс', '',
|
||||
'Полный курс алгебры 7 класса по учебнику И. Г. Арефьевой и О. Н. Пирютко: степени, многочлены и ФСУ, линейные уравнения и функция, системы. 4 главы, 25 параграфов, ~120 интерактивов, 21 босс-проверка.',
|
||||
'algebra_7_hub.html', 25, 'pink', 6, 1);
|
||||
|
||||
-- 2. Chapter children.
|
||||
INSERT INTO textbooks
|
||||
(slug, subject, grade, title, author, description, html_path, para_count, color, sort_order, is_active, parent_slug)
|
||||
VALUES
|
||||
('algebra-7-ch1', 'math', 7, 'Алгебра 7 · Степень',
|
||||
'',
|
||||
'§1–§3: степень с натуральным и целым показателем, свойства степени, стандартный вид числа.',
|
||||
'algebra_7_ch1.html', 3, 'amber', 1, 1, 'algebra-7'),
|
||||
('algebra-7-ch2', 'math', 7, 'Алгебра 7 · Выражения и преобразования',
|
||||
'',
|
||||
'§4–§14: числовые выражения и тождества, одночлены и многочлены, действия с ними, формулы сокращённого умножения, разложение на множители.',
|
||||
'algebra_7_ch2.html', 11, 'emerald', 2, 1, 'algebra-7'),
|
||||
('algebra-7-ch3', 'math', 7, 'Алгебра 7 · Линейные уравнения. Неравенства. Функция',
|
||||
'',
|
||||
'§15–§20: линейные уравнения и текстовые задачи, числовые и линейные неравенства, функция и её график, линейная функция.',
|
||||
'algebra_7_ch3.html', 6, 'violet', 3, 1, 'algebra-7'),
|
||||
('algebra-7-ch4', 'math', 7, 'Алгебра 7 · Системы линейных уравнений',
|
||||
'',
|
||||
'§21–§25: линейное уравнение с двумя переменными, графический способ, системы и способы их решения, текстовые задачи на системы.',
|
||||
'algebra_7_ch4.html', 5, 'cyan', 4, 1, 'algebra-7');
|
||||
@@ -0,0 +1,36 @@
|
||||
-- Geometry 7 hub migration.
|
||||
-- Adds hub row + 5 chapter children for Геометрия 7 (Казаков, 2022).
|
||||
-- Pattern mirrors 017_geometry_8_hub.sql.
|
||||
|
||||
-- 1. Hub row.
|
||||
INSERT INTO textbooks
|
||||
(slug, subject, grade, title, author, description, html_path, para_count, color, sort_order, is_active)
|
||||
VALUES
|
||||
('geometry-7', 'math', 7, 'Геометрия — 7 класс', '',
|
||||
'Полный курс геометрии 7 класса по учебнику В. В. Казакова: начальные понятия, признаки равенства треугольников, параллельность прямых, сумма углов треугольника, задачи на построение. 5 глав, 31 параграф, ~150 интерактивов, 25 боссов-проверок.',
|
||||
'geometry_7_hub.html', 31, 'blue', 7, 1);
|
||||
|
||||
-- 2. Chapter children.
|
||||
INSERT INTO textbooks
|
||||
(slug, subject, grade, title, author, description, html_path, para_count, color, sort_order, is_active, parent_slug)
|
||||
VALUES
|
||||
('geometry-7-ch1', 'math', 7, 'Геометрия 7 · Начальные понятия',
|
||||
'',
|
||||
'§1–§7: прямая, луч, отрезок, ломаная, окружность и круг, углы и их виды, смежные и вертикальные углы, перпендикулярные прямые.',
|
||||
'geometry_7_ch1.html', 7, 'amber', 1, 1, 'geometry-7'),
|
||||
('geometry-7-ch2', 'math', 7, 'Геометрия 7 · Признаки равенства треугольников',
|
||||
'',
|
||||
'§8–§14: три признака равенства треугольников, высота, медиана и биссектриса, равнобедренный треугольник и его признаки, серединный перпендикуляр.',
|
||||
'geometry_7_ch2.html', 7, 'emerald', 2, 1, 'geometry-7'),
|
||||
('geometry-7-ch3', 'math', 7, 'Геометрия 7 · Параллельность прямых',
|
||||
'',
|
||||
'§15–§18: признаки параллельности прямых, аксиома параллельных, свойства параллельных, углы с параллельными и перпендикулярными сторонами.',
|
||||
'geometry_7_ch3.html', 4, 'purple', 3, 1, 'geometry-7'),
|
||||
('geometry-7-ch4', 'math', 7, 'Геометрия 7 · Сумма углов треугольника',
|
||||
'',
|
||||
'§19–§26: сумма углов, внешний угол, соотношения между сторонами и углами, неравенство треугольника, прямоугольные треугольники, биссектриса угла, свойство катета против угла 30°.',
|
||||
'geometry_7_ch4.html', 8, 'cyan', 4, 1, 'geometry-7'),
|
||||
('geometry-7-ch5', 'math', 7, 'Геометрия 7 · Задачи на построение',
|
||||
'',
|
||||
'§27–§31: основные задачи на построение циркулем и линейкой, треугольник по трём сторонам, биссектриса, середина отрезка, перпендикулярная прямая, геометрическое место точек.',
|
||||
'geometry_7_ch5.html', 5, 'pink', 5, 1, 'geometry-7');
|
||||
Reference in New Issue
Block a user