38 lines
No EOL
1.1 KiB
JavaScript
38 lines
No EOL
1.1 KiB
JavaScript
function defineVars(vars) {
|
|
const data = new Map(vars);
|
|
|
|
window.addEventListener('DOMContentLoaded', () => {
|
|
const mathVars = document.querySelectorAll('span.katex span.mord.mathnormal');
|
|
|
|
mathVars.forEach(el => {
|
|
for (const [v, help] of data.entries()) {
|
|
if (el.textContent == v) el.setAttribute('title', help);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function plot(target, fns, deps, [xDomain, yDomain] = [[-1, 9], [-1, 9]]) {
|
|
const depsEl = deps.map(document.querySelector.bind(document));
|
|
const plot = () => {
|
|
functionPlot({
|
|
target,
|
|
width: 600,
|
|
height: 400,
|
|
xAxis: { domain: xDomain },
|
|
yAxis: { domain: yDomain },
|
|
grid: true,
|
|
data: fns(...(depsEl.map(el => parseFloat(el.value)))).map(fn => ({
|
|
fn, graphType: 'polyline'
|
|
}))
|
|
});
|
|
}
|
|
|
|
depsEl.forEach(el => {
|
|
el.addEventListener((el.tagName == 'INPUT' && el.type == 'range' ? 'mousemove' : 'change'), plot);
|
|
});
|
|
|
|
plot();
|
|
}
|
|
|
|
Object.assign(window, {defineVars, plot}); |