/* chem8_ch3_widgets.js — виджеты Главы 3 «Строение атома». * Использует window.Chem8: atomShell, shellConfig, nuclide, zSym, miniPeriodic, arOf. */ (function (W) { 'use strict'; function C() { return W.Chem8 || {}; } function $(id) { return document.getElementById(id); } /* §29 — модель атома */ function mount_p29() { var el = $('c-atom'); if (el && !el._b && C().atomShell) { el._b = 1; C().atomShell(el, { z: 11 }); } } /* §30 — нуклид: A = Z + N */ function mount_p30() { var el = $('c-nuclide'); if (!el || el._b) return; el._b = 1; el.innerHTML = '
'; function calc() { var z = parseInt($('nz').value, 10), a = parseInt($('na').value, 10); if (isNaN(z) || isNaN(a) || a < z) { $('n-out').className = 'out bad'; $('n-out').textContent = 'Проверь: A не может быть меньше Z.'; return; } var nu = C().nuclide(z, a); $('n-out').className = 'out ok'; $('n-out').innerHTML = 'Элемент: ' + nu.sym + '
Протонов Z = ' + z + '
Нейтронов N = A − Z = ' + a + ' − ' + z + ' = ' + nu.N + '
Нуклид: ' + nu.sym + '-' + a + '
'; } $('nz-go').addEventListener('click', calc); calc(); } /* §31 — средняя Ar по изотопам */ function mount_p31() { var el = $('c-iso'); if (!el || el._b) return; el._b = 1; el.innerHTML = '
' + '
Пример: хлор — смесь ³⁵Cl (75%) и ³⁷Cl (25%).
'; function calc() { var m1 = parseFloat($('im1').value), p1 = parseFloat($('ip1').value), m2 = parseFloat($('im2').value), p2 = parseFloat($('ip2').value); if ([m1, p1, m2, p2].some(isNaN)) { $('iso-out').className = 'out bad'; $('iso-out').textContent = 'Введите все значения.'; return; } var ar = (m1 * p1 + m2 * p2) / (p1 + p2); $('iso-out').className = 'out ok'; $('iso-out').innerHTML = 'A_r = (' + m1 + '·' + p1 + ' + ' + m2 + '·' + p2 + ') / 100 = ' + (Math.round(ar * 100) / 100).toString().replace('.', ',') + ''; } $('iso-go').addEventListener('click', calc); calc(); } /* §33 — строение электронных оболочек (та же модель, акцент на слои) */ function mount_p33() { var el = $('c-shells'); if (el && !el._b && C().atomShell) { el._b = 1; C().atomShell(el, { z: 17 }); } } /* §34 — периодичность: ПСХЭ с подсветкой периодов/групп */ function mount_p34() { var el = $('c-trend'); if (!el || el._b || !C().miniPeriodic) return; el._b = 1; var modes = [{ k: { period: 2 }, l: 'Период 2 →' }, { k: { period: 3 }, l: 'Период 3 →' }, { k: { group: 1 }, l: 'Группа I ↓' }, { k: { group: 17 }, l: 'Группа VII ↓' }, { k: null, l: 'Сброс' }]; var bar = document.createElement('div'); bar.className = 'pt-modes'; var grid = document.createElement('div'), note = document.createElement('div'); note.className = 'out'; var TXT = { 'p2': 'По периоду слева направо: радиус атома уменьшается, металлические свойства ослабевают, неметаллические — усиливаются.', 'p3': 'То же в 3-м периоде: от активного металла Na к активному неметаллу Cl.', 'g1': 'Вниз по группе: радиус растёт, металлические свойства усиливаются (Li → Na → K → ...).', 'g17': 'Вниз по группе галогенов: неметаллические свойства ослабевают (F самый активный).' }; modes.forEach(function (m) { var b = document.createElement('button'); b.className = 'btn'; b.textContent = m.l; b.addEventListener('click', function () { bar.querySelectorAll('.btn').forEach(function (x) { x.classList.remove('primary'); }); b.classList.add('primary'); if (api) api.highlight(m.k); var key = m.k ? (m.k.period ? 'p' + m.k.period : 'g' + m.k.group) : null; note.textContent = key && TXT[key] ? TXT[key] : 'Выбери период или группу — увидишь тренд свойств.'; }); bar.appendChild(b); }); el.appendChild(bar); el.appendChild(grid); el.appendChild(note); var api = C().miniPeriodic(grid, {}); note.textContent = 'Выбери период или группу — увидишь, как меняются свойства.'; } /* §35 — паспорт элемента: клик в ПСХЭ → полная характеристика */ function mount_p35() { var el = $('c-passport'); if (!el || el._b || !C().miniPeriodic) return; el._b = 1; var grid = document.createElement('div'), panel = document.createElement('div'); panel.className = 'passport'; panel.innerHTML = '

Паспорт элемента

Кликни элемент в системе.
'; el.appendChild(grid); el.appendChild(panel); C().miniPeriodic(grid, { onClick: function (sym, info) { var sh = C().shellConfig(info.z); var catRu = info.cat === 'metal' ? 'металл' : info.cat === 'nonmetal' ? 'неметалл' : info.cat === 'metalloid' ? 'металлоид' : 'инертный газ'; panel.innerHTML = '

Паспорт: ' + sym + '

' + '
Z: ' + info.z + '
' + '
A_r: ' + (info.ar || '—') + '
' + '
Период: ' + info.p + '
' + '
Группа: ' + info.g + '
' + '
Тип: ' + catRu + '
' + '
Протонов: ' + info.z + '
' + '
Электронов: ' + info.z + '
' + '
Слои e⁻: ' + sh.join(' ) ') + '
' + '
Внешних e⁻: ' + sh[sh.length - 1] + '
' + '
'; if (W.chem8RenderMath) try { W.chem8RenderMath(panel); } catch (e) {} } }); } function mount_final1(){ var el=$('c-concept'); if(el&&!el._b&&C().conceptMap){ el._b=1; C().conceptMap(el,{"nodes":[{"id":"nuc","t":"Ядро","x":20,"y":55},{"id":"prot","t":"Протоны","x":170,"y":22},{"id":"neut","t":"Нейтроны","x":170,"y":95},{"id":"elec","t":"Электроны","x":330,"y":55}],"edges":[{"f":"nuc","t":"prot","label":"Z = число протонов"},{"f":"nuc","t":"neut","label":"N нейтронов (A = Z + N)"},{"f":"prot","t":"elec","label":"Z = e⁻ (атом нейтрален)"}]}); } } W.CHEM8_WIDGETS = { p29: mount_p29, p30: mount_p30, p31: mount_p31, p33: mount_p33 }; W.FLAG_MOUNTS = { final1: mount_final1, p34: mount_p34, p35: mount_p35 }; })(window);