refactor: distribute lab-init.js into 34 engine files
lab-init.js: 4098 -> 543 lines (infrastructure + THEORY only) Each sim's _open*() + UI helpers moved to its engine file: graph.js, projectile.js, collision.js, magnetic.js, triangle.js, geometry.js, trigcircle.js, gas.js (molphys), coulomb.js, circuit.js, reactions.js (chemistry), newton.js (dynamics), chemsandbox.js, celldivision.js, photosynthesis.js, angrybirds.js, quadratic.js, normaldist.js, graphtransform.js, pendulum.js, equilibrium.js, thinlens.js, mirror.js, isoprocess.js, titration.js, refraction.js, probability.js, bohratom.js, electrolysis.js, waves.js, crystal.js, orbitals.js, stereo.js, hydrostatics.js All 34 engine files syntax-checked OK.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
'use strict';
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* EquilibriumSim — Chemical equilibrium simulation.
|
||||
@@ -474,3 +474,48 @@ class EquilibriumSim {
|
||||
}
|
||||
|
||||
if (typeof module !== 'undefined') module.exports = EquilibriumSim;
|
||||
|
||||
/* ─── lab UI init ─────────────────────────────────── */
|
||||
function _openEquilibrium() {
|
||||
document.getElementById('sim-topbar-title').textContent = 'Химическое равновесие';
|
||||
_simShow('sim-equilibrium');
|
||||
_registerSimState('equilibrium', () => eqSim?.getParams(), st => eqSim?.setParams(st));
|
||||
if (_embedMode) _startStateEmit('equilibrium');
|
||||
requestAnimationFrame(() => requestAnimationFrame(() => {
|
||||
if (!eqSim) {
|
||||
eqSim = new EquilibriumSim(document.getElementById('equilibrium-canvas'));
|
||||
eqSim.onUpdate = _eqUpdateUI;
|
||||
}
|
||||
eqSim.fit();
|
||||
eqSim.reset();
|
||||
eqSim.play();
|
||||
}));
|
||||
}
|
||||
|
||||
function eqParam(name, val) {
|
||||
const v = parseFloat(val);
|
||||
const ids = { T: 'eq-T-val', Ea_f: 'eq-Eaf-val', Ea_r: 'eq-Ear-val' };
|
||||
const el = document.getElementById(ids[name]);
|
||||
if (el) el.textContent = v;
|
||||
if (eqSim) eqSim.setParams({ [name]: v });
|
||||
}
|
||||
|
||||
function eqPreset(name) {
|
||||
if (eqSim) { eqSim.preset(name); eqSim.play(); }
|
||||
const defs = { default: [300,50,55], exothermic: [280,35,65], endothermic: [350,65,35], excess_A: [300,50,55] };
|
||||
const d = defs[name] || defs.default;
|
||||
document.getElementById('sl-eq-T').value = d[0]; document.getElementById('eq-T-val').textContent = d[0];
|
||||
document.getElementById('sl-eq-Eaf').value = d[1]; document.getElementById('eq-Eaf-val').textContent = d[1];
|
||||
document.getElementById('sl-eq-Ear').value = d[2]; document.getElementById('eq-Ear-val').textContent = d[2];
|
||||
}
|
||||
|
||||
function _eqUpdateUI(info) {
|
||||
const v = (id, val) => { const el = document.getElementById(id); if (el) el.textContent = val; };
|
||||
v('eqbar-v1', info.keq);
|
||||
v('eqbar-v2', info.Q);
|
||||
v('eqbar-v3', info.direction);
|
||||
v('eqbar-v4', info.nA + '|' + info.nB + '|' + info.nC + '|' + info.nD);
|
||||
}
|
||||
|
||||
/* ── thin lens ── */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user