diff --git a/frontend/textbooks/physics_7_ch1.html b/frontend/textbooks/physics_7_ch1.html index c2f7bab..9a606df 100644 --- a/frontend/textbooks/physics_7_ch1.html +++ b/frontend/textbooks/physics_7_ch1.html @@ -184,8 +184,8 @@ const PARAS = [{id:'p1',num:'§ 1',title:"Физика — наука о при const TOTAL_PARAS = PARAS.length; const SIDEBARS = {}; -PARAS.forEach(p => { SIDEBARS[p.id] = { title: 'Шпаргалка ' + p.num, rows: [['В разработке','контент появится с волной соответствующего §']] }; }); -const TIPS = [{ sec: PARAS[0].id, html: 'Скелет главы готов. Контент параграфов выйдет в одной из ближайших фаз.' }]; +PARAS.forEach(p => { SIDEBARS[p.id] = { title: 'Шпаргалка ' + p.num, rows: [] }; }); +const TIPS = []; const ACH_LABELS = { start: 'Начало главы 1', ch_done: 'Юный физик' }; const STATE = { current: null, progress: {}, xp: 0, level: 1, achievements: new Map(), _built: new Set() }; @@ -292,9 +292,11 @@ function buildSidebar(id){ const xpPct = xpRange > 0 ? Math.round(xpInLv / xpRange * 100) : 100; let html = ''; html += '
XP-прогрессУр. ' + STATE.level + '
' + STATE.xp + ' XP' + xpNext + ' XP
'; - html += '

' + sb.title + '

'; - sb.rows.forEach(([k,v]) => { html += '
' + k + '' + (v ? ' — ' + v : '') + '
'; }); - html += '
'; + if(sb && sb.rows && sb.rows.length){ + html += '

' + sb.title + '

'; + sb.rows.forEach(([k,v]) => { html += '
' + k + '' + (v ? ' — ' + v : '') + '
'; }); + html += '
'; + } const tip = TIPS.find(t => t.sec === id) || TIPS[0]; if(tip){ html += '

Подсказка

' + tip.html + '
'; diff --git a/frontend/textbooks/physics_7_ch2.html b/frontend/textbooks/physics_7_ch2.html index 76bcd56..c2ab7da 100644 --- a/frontend/textbooks/physics_7_ch2.html +++ b/frontend/textbooks/physics_7_ch2.html @@ -180,8 +180,8 @@ const PARAS = [{id:'p8',num:'§ 8',title:"Дискретное строение const TOTAL_PARAS = PARAS.length; const SIDEBARS = {}; -PARAS.forEach(p => { SIDEBARS[p.id] = { title: 'Шпаргалка ' + p.num, rows: [['В разработке','контент появится с волной соответствующего §']] }; }); -const TIPS = [{ sec: PARAS[0].id, html: 'Скелет главы готов. Контент параграфов выйдет в одной из ближайших фаз.' }]; +PARAS.forEach(p => { SIDEBARS[p.id] = { title: 'Шпаргалка ' + p.num, rows: [] }; }); +const TIPS = []; const ACH_LABELS = { start: 'Начало главы 2', ch_done: 'Знаток вещества' }; const STATE = { current: null, progress: {}, xp: 0, level: 1, achievements: new Map(), _built: new Set() }; @@ -288,9 +288,11 @@ function buildSidebar(id){ const xpPct = xpRange > 0 ? Math.round(xpInLv / xpRange * 100) : 100; let html = ''; html += '
XP-прогрессУр. ' + STATE.level + '
' + STATE.xp + ' XP' + xpNext + ' XP
'; - html += '

' + sb.title + '

'; - sb.rows.forEach(([k,v]) => { html += '
' + k + '' + (v ? ' — ' + v : '') + '
'; }); - html += '
'; + if(sb && sb.rows && sb.rows.length){ + html += '

' + sb.title + '

'; + sb.rows.forEach(([k,v]) => { html += '
' + k + '' + (v ? ' — ' + v : '') + '
'; }); + html += '
'; + } const tip = TIPS.find(t => t.sec === id) || TIPS[0]; if(tip){ html += '

Подсказка

' + tip.html + '
'; diff --git a/frontend/textbooks/physics_7_ch3.html b/frontend/textbooks/physics_7_ch3.html index b7709d1..2a5c52a 100644 --- a/frontend/textbooks/physics_7_ch3.html +++ b/frontend/textbooks/physics_7_ch3.html @@ -212,8 +212,8 @@ const PARAS = [{id:'p14',num:'§ 14',title:"Механическое движе const TOTAL_PARAS = PARAS.length; const SIDEBARS = {}; -PARAS.forEach(p => { SIDEBARS[p.id] = { title: 'Шпаргалка ' + p.num, rows: [['В разработке','контент появится с волной соответствующего §']] }; }); -const TIPS = [{ sec: PARAS[0].id, html: 'Скелет главы готов. Контент параграфов выйдет в одной из ближайших фаз.' }]; +PARAS.forEach(p => { SIDEBARS[p.id] = { title: 'Шпаргалка ' + p.num, rows: [] }; }); +const TIPS = []; const ACH_LABELS = { start: 'Начало главы 3', ch_done: 'Мастер движения' }; const STATE = { current: null, progress: {}, xp: 0, level: 1, achievements: new Map(), _built: new Set() }; @@ -320,9 +320,11 @@ function buildSidebar(id){ const xpPct = xpRange > 0 ? Math.round(xpInLv / xpRange * 100) : 100; let html = ''; html += '
XP-прогрессУр. ' + STATE.level + '
' + STATE.xp + ' XP' + xpNext + ' XP
'; - html += '

' + sb.title + '

'; - sb.rows.forEach(([k,v]) => { html += '
' + k + '' + (v ? ' — ' + v : '') + '
'; }); - html += '
'; + if(sb && sb.rows && sb.rows.length){ + html += '

' + sb.title + '

'; + sb.rows.forEach(([k,v]) => { html += '
' + k + '' + (v ? ' — ' + v : '') + '
'; }); + html += '
'; + } const tip = TIPS.find(t => t.sec === id) || TIPS[0]; if(tip){ html += '

Подсказка

' + tip.html + '
'; diff --git a/frontend/textbooks/physics_7_ch4.html b/frontend/textbooks/physics_7_ch4.html index 0aa0494..8249872 100644 --- a/frontend/textbooks/physics_7_ch4.html +++ b/frontend/textbooks/physics_7_ch4.html @@ -188,8 +188,8 @@ const PARAS = [{id:'p28',num:'§ 28',title:"Давление. Единицы д const TOTAL_PARAS = PARAS.length; const SIDEBARS = {}; -PARAS.forEach(p => { SIDEBARS[p.id] = { title: 'Шпаргалка ' + p.num, rows: [['В разработке','контент появится с волной соответствующего §']] }; }); -const TIPS = [{ sec: PARAS[0].id, html: 'Скелет главы готов. Контент параграфов выйдет в одной из ближайших фаз.' }]; +PARAS.forEach(p => { SIDEBARS[p.id] = { title: 'Шпаргалка ' + p.num, rows: [] }; }); +const TIPS = []; const ACH_LABELS = { start: 'Начало главы 4', ch_done: 'Властелин давления' }; const STATE = { current: null, progress: {}, xp: 0, level: 1, achievements: new Map(), _built: new Set() }; @@ -296,9 +296,11 @@ function buildSidebar(id){ const xpPct = xpRange > 0 ? Math.round(xpInLv / xpRange * 100) : 100; let html = ''; html += '
XP-прогрессУр. ' + STATE.level + '
' + STATE.xp + ' XP' + xpNext + ' XP
'; - html += '

' + sb.title + '

'; - sb.rows.forEach(([k,v]) => { html += '
' + k + '' + (v ? ' — ' + v : '') + '
'; }); - html += '
'; + if(sb && sb.rows && sb.rows.length){ + html += '

' + sb.title + '

'; + sb.rows.forEach(([k,v]) => { html += '
' + k + '' + (v ? ' — ' + v : '') + '
'; }); + html += '
'; + } const tip = TIPS.find(t => t.sec === id) || TIPS[0]; if(tip){ html += '

Подсказка

' + tip.html + '
'; diff --git a/frontend/textbooks/physics_7_ch5.html b/frontend/textbooks/physics_7_ch5.html index d6234cd..b7f88f4 100644 --- a/frontend/textbooks/physics_7_ch5.html +++ b/frontend/textbooks/physics_7_ch5.html @@ -184,8 +184,8 @@ const PARAS = [{id:'p36',num:'§ 36',title:"Механическая работ const TOTAL_PARAS = PARAS.length; const SIDEBARS = {}; -PARAS.forEach(p => { SIDEBARS[p.id] = { title: 'Шпаргалка ' + p.num, rows: [['В разработке','контент появится с волной соответствующего §']] }; }); -const TIPS = [{ sec: PARAS[0].id, html: 'Скелет главы готов. Контент параграфов выйдет в одной из ближайших фаз.' }]; +PARAS.forEach(p => { SIDEBARS[p.id] = { title: 'Шпаргалка ' + p.num, rows: [] }; }); +const TIPS = []; const ACH_LABELS = { start: 'Начало главы 5', ch_done: 'Энергетик' }; const STATE = { current: null, progress: {}, xp: 0, level: 1, achievements: new Map(), _built: new Set() }; @@ -292,9 +292,11 @@ function buildSidebar(id){ const xpPct = xpRange > 0 ? Math.round(xpInLv / xpRange * 100) : 100; let html = ''; html += '
XP-прогрессУр. ' + STATE.level + '
' + STATE.xp + ' XP' + xpNext + ' XP
'; - html += '

' + sb.title + '

'; - sb.rows.forEach(([k,v]) => { html += '
' + k + '' + (v ? ' — ' + v : '') + '
'; }); - html += '
'; + if(sb && sb.rows && sb.rows.length){ + html += '

' + sb.title + '

'; + sb.rows.forEach(([k,v]) => { html += '
' + k + '' + (v ? ' — ' + v : '') + '
'; }); + html += '
'; + } const tip = TIPS.find(t => t.sec === id) || TIPS[0]; if(tip){ html += '

Подсказка

' + tip.html + '
';