'use strict'; /* * lab-previews.js — ЕДИНЫЙ источник SVG-превью симуляций лаборатории. * Вынесено из lab-glue.js, чтобы превью были доступны и на /lab (карточки), * и на дашборде («Лаборатория дня»), без загрузки тяжёлого lab-glue.js. * * window.LabPreviews — карта id симуляции -> SVG-строка (для дашборда/реестра). * window.__LabP — те же превью по имени P_* (lab-glue.js берёт их отсюда). * * Грузить ПЕРЕД lab-glue.js (на /lab) и на дашборде. */ (function () { function _grid(fg='rgba(255,255,255,0.06)') { return ` `; } function _axes() { return ` `; } function _svg(body) { return ` ${body}`; } /* 1 — Graph */ const P_GRAPH = _svg(`${_grid()}${_axes()} `); /* 2 — Transform: three shifted/scaled sines */ const P_TRANSFORM = _svg(`${_grid()}${_axes()} `); /* 3 — Triangle geometry */ const P_TRIANGLE = _svg(`${_grid('rgba(255,255,255,0.04)')} `); /* 4 — Inscribed/circumscribed circles */ const P_CIRCLES = _svg(`${_grid('rgba(255,255,255,0.04)')} `); /* 5 — Quadratic roots: parabola crossing x-axis */ const P_QUADRATIC = _svg(`${_grid()}${_axes()} D = b²− 4ac`); /* 6 — 3D geometry: isometric cube */ const P_3D = _svg(`${_grid('rgba(255,255,255,0.04)')} V = a³`); /* 7 — Probability: histogram bars */ const P_PROB = _svg(`${_grid()} `); /* 8 — Normal distribution: bell curve */ const P_NORMAL = _svg(`${_grid()} μ = 0, σ = 1`); /* 8b — Trig circle */ const P_TRIGCIRCLE = _svg(`${_grid('rgba(255,255,255,0.04)')} sin · cos · tg · ctg`); /* 9 — Projectile motion */ const P_PROJECTILE = _svg(`${_grid('rgba(255,255,255,0.04)')} x = v₀cos(α)·t`); /* 10 — Pendulum */ const P_PENDULUM = _svg(`${_grid('rgba(255,255,255,0.04)')} T = 2π√(l/g)`); /* 11 — Collision */ const P_COLLISION = _svg(`${_grid('rgba(255,255,255,0.04)')} m₁ m₂ `); /* 13 — Electric circuit */ const P_CIRCUIT = _svg(`${_grid('rgba(255,255,255,0.04)')} R₁ R₂ I = U/R`); /* 14 — Magnetic field */ const P_MAGNETIC = _svg(` ${_grid('rgba(155,93,229,0.06)')} B = μ₀I / 2πr`); /* 14 — Electric field lines */ const P_FIELD = _svg(`${_grid('rgba(255,255,255,0.04)')} + `); /* 15 — Thin lens */ const P_LENS = _svg(`${_grid('rgba(255,255,255,0.04)')} `); /* 16 — Refraction */ const P_REFRACTION = _svg(` α β n₁sinα = n₂sinβ`); /* 17 — Mirrors */ const P_MIRROR = _svg(`${_grid('rgba(255,255,255,0.04)')} F `); /* 18 — Isoprocesses */ const P_ISOPROCESS = _svg(`${_grid('rgba(255,255,255,0.04)')} 2 1 V P`); /* ── Chemistry / Molecular Physics previews ── */ const P_GAS = _svg(` ${[ [40,30,'#4CC9F0'],[70,80,'#7BF5A4'],[110,25,'#EF476F'],[150,60,'#FFD166'],[190,30,'#4CC9F0'], [220,90,'#EF476F'],[55,110,'#7BF5A4'],[95,65,'#4CC9F0'],[130,110,'#EF476F'],[170,40,'#FFD166'], [210,115,'#4CC9F0'],[240,55,'#7BF5A4'],[30,70,'#FFD166'],[80,120,'#EF476F'],[165,95,'#4CC9F0'] ].map(([x,y,c])=>``).join('')} PV=nRT`); /* ── Законы Ньютона ── */ const P_NEWTON = _svg(` F m₂ a = F/m · III законы Ньютона`); /* ── Песочница сил ── */ const P_SANDBOX = _svg(` ${_grid('rgba(255,255,255,0.03)')} 5кг 8кг F₁ F₂ Песочница сил · F = ma`); const P_HYDRO = _svg(` ${_grid('rgba(255,255,255,0.03)')} P = ρgh F_A Δh Архимед · Паскаль · капиллярность`); /* ── coming soon chem previews (simple) ── */ const P_KINETICS = _svg(` ${_grid()} [C] продукт [A] реагент`); const P_EQUILIBRIUM = _svg(` A + B ⇌ C + D A,B K C,D`); const P_ELECTROLYSIS = _svg(` ${[55,58,61,64,67,70].map(x=>``).join('')} ${[210,214,218,222,226].map(x=>``).join('')} +`); const P_BOHR = _svg(` `); const P_ORBITALS = _svg(` `); const P_PH = _svg(` ${_grid()} pH V`); const P_CHEMSANDBOX = _svg(` ${_grid()} A + B C + D `); const P_STOICHIOMETRY = _svg(` ${_grid()} Zn 2HCl ZnCl₂ H₂ ● лимит`); /* Periodic Table — 6×4 coloured cell grid */ const P_PERIODIC = _svg(` ${(function(){ const cols=18,rows=4,pad=6,w=(270-pad*2)/cols,h=(140-pad*2)/rows; const colors=['#EF476F','#FF6B35','#FFD166','#7BF5A4','#C77DFF','#A8DADC', '#7B8EF7','#06D6E0','#9B5DE5','#F15BB5','#EF476F','#FF6B35', '#06D6E0','#7B8EF7','#FFD166','#C77DFF','#A8DADC','#7BF5A4']; let s=''; for(let r=0;r=2&&c<=15)||(r===1&&c>=2&&c<=11); if(!skip) s+=``; } return s; })()} 118 элементов`); const P_CRYSTAL = _svg(` ${[ [80,40],[135,40],[190,40], [55,75],[110,75],[165,75],[220,75], [80,110],[135,110],[190,110] ].map(([x,y],i)=>``).join('')} `); const P_CELLDIVISION = _svg(` Метафаза · митоз`); const P_PHOTOSYNTHESIS = _svg(` H₂O CO₂ ATP G3P Световые реакции · цикл Кальвина`); const P_ANGRYBIRDS = _svg(` Физика полёта · импульс · разрушение`); const P_WAVES = _svg(`${_grid()} v = \u03bbf \u00b7 y = A sin(\u03c9t \u2212 kx) \u00b7 \u0441\u0442\u043e\u044f\u0447\u0438\u0435 \u0432\u043e\u043b\u043d\u044b`); /* Radioactive decay preview */ const P_RADIOACTIVE = _svg(`${_grid()} N(t) = N₀·e⁻λt · T½ · цепочки распада`); /* Heat Engines preview */ const P_HEATENGINE = _svg(`${_grid('rgba(255,255,255,0.04)')} A B C V P η = 1 − Tc/Th`); /* Geometry (planimetry) preview */ const P_GEOMETRY = _svg(`${_grid('rgba(255,255,255,0.04)')} A B C`); /* Race sim preview — two objects on a track, x(t) lines */ const P_RACE = _svg(`${_grid('rgba(255,255,255,0.05)')} встреча x = x₀ + v₀t + at²/2`); /* Logic Circuits preview */ const P_LOGIC = _svg(`${_grid('rgba(255,255,255,0.04)')} AND XOR AND S C S = A⊕B · C = A∧B · Таблица истинности`); /* Qualitative Analysis preview */ const P_QUALANALYSIS = _svg(` Cl Fe(III) SO4 AgNO3 AgCl / Fe(SCN) / BaSO4`); /* Organic Chemistry preview — benzene ring + OH group */ const P_ORGANIC = _svg(` ${_grid('rgba(255,255,255,0.03)')} C C C C C C O H C Конструктор · Ряды · Качественные реакции`); /* Solutions preview */ const P_SOLUTIONS = _svg(` 20% ω% C-M ν моль ω = m₀/m​ · 100% Калькулятор · Разбавление · Смешивание · S(T)`); // Экспорт по имени P_* (для lab-glue.js) window.__LabP = { P_GRAPH, P_TRANSFORM, P_TRIANGLE, P_CIRCLES, P_QUADRATIC, P_3D, P_PROB, P_NORMAL, P_TRIGCIRCLE, P_PROJECTILE, P_PENDULUM, P_COLLISION, P_CIRCUIT, P_MAGNETIC, P_FIELD, P_LENS, P_REFRACTION, P_MIRROR, P_ISOPROCESS, P_GAS, P_NEWTON, P_SANDBOX, P_HYDRO, P_KINETICS, P_EQUILIBRIUM, P_ELECTROLYSIS, P_BOHR, P_ORBITALS, P_PH, P_CHEMSANDBOX, P_STOICHIOMETRY, P_PERIODIC, P_CRYSTAL, P_CELLDIVISION, P_PHOTOSYNTHESIS, P_ANGRYBIRDS, P_WAVES, P_RADIOACTIVE, P_HEATENGINE, P_GEOMETRY, P_RACE, P_LOGIC, P_QUALANALYSIS, P_ORGANIC, P_SOLUTIONS }; // Экспорт по id симуляции (для дашборда и реестра) window.LabPreviews = { "graph": P_GRAPH, "graphtransform": P_TRANSFORM, "geometry": P_GEOMETRY, "triangle": P_TRIANGLE, "quadratic": P_QUADRATIC, "stereo": P_3D, "probability": P_PROB, "trigcircle": P_TRIGCIRCLE, "normaldist": P_NORMAL, "projectile": P_PROJECTILE, "pendulum": P_PENDULUM, "collision": P_COLLISION, "emfield": P_MAGNETIC, "circuit": P_CIRCUIT, "hydrostatics": P_HYDRO, "dynamics": P_SANDBOX, "opticsbench": P_LENS, "isoprocess": P_ISOPROCESS, "waves": P_WAVES, "radioactive": P_RADIOACTIVE, "race": P_RACE, "heatengine": P_HEATENGINE, "logic": P_LOGIC, "molphys": P_GAS, "chemistry": P_KINETICS, "equilibrium": P_EQUILIBRIUM, "electrolysis": P_ELECTROLYSIS, "bohratom": P_BOHR, "orbitals": P_ORBITALS, "titration": P_PH, "chemsandbox": P_CHEMSANDBOX, "stoichiometry": P_STOICHIOMETRY, "crystal": P_CRYSTAL, "qualanalysis": P_QUALANALYSIS, "periodic": P_PERIODIC, "organic": P_ORGANIC, "solutions": P_SOLUTIONS, "celldivision": P_CELLDIVISION, "photosynthesis": P_PHOTOSYNTHESIS, "angrybirds": P_ANGRYBIRDS }; })();