|
4 | 4 | <meta charset="utf-8" /> |
5 | 5 | <title>Lang Shift</title> |
6 | 6 | <link data-trunk rel="rust" /> |
| 7 | + <link data-trunk rel="css" href="index.css" /> |
7 | 8 | <link |
8 | 9 | rel="stylesheet" |
9 | 10 | href="https://cdn.jsdelivr.net/npm/water.css@2/out/water.css" |
10 | 11 | /> |
11 | | - <style> |
12 | | - @import url("https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap"); |
13 | | - |
14 | | - body { |
15 | | - font-family: "Outfit", sans-serif; |
16 | | - font-optical-sizing: auto; |
17 | | - font-weight: 300; |
18 | | - font-style: normal; |
19 | | - margin: auto; |
20 | | - display: flex; |
21 | | - flex-direction: column; |
22 | | - align-items: center; |
23 | | - justify-content: center; |
24 | | - height: 100vh; |
25 | | - } |
26 | | - |
27 | | - #container { |
28 | | - display: flex; |
29 | | - flex-direction: column; |
30 | | - align-items: center; |
31 | | - justify-content: center; |
32 | | - } |
33 | | - |
34 | | - #form { |
35 | | - display: flex; |
36 | | - flex-direction: column; |
37 | | - align-items: center; |
38 | | - } |
39 | | - |
40 | | - #abrams, |
41 | | - #diaz, |
42 | | - #general { |
43 | | - display: flex; |
44 | | - flex-direction: row; |
45 | | - gap: 0.5rem; |
46 | | - margin: 2.5vh 0; |
47 | | - align-items: center; |
48 | | - justify-content: center; |
49 | | - flex-wrap: wrap; |
50 | | - max-width: 750px; |
51 | | - } |
52 | | - |
53 | | - .item { |
54 | | - display: flex; |
55 | | - flex-direction: row; |
56 | | - gap: 0.5rem; |
57 | | - align-items: center; |
58 | | - } |
59 | | - </style> |
60 | 12 | </head> |
61 | 13 | <body> |
62 | 14 | <div id="container"> |
|
235 | 187 | <div id="plot"></div> |
236 | 188 | </div> |
237 | 189 |
|
238 | | - <script type="module"> |
239 | | - import "https://cdn.plot.ly/plotly-3.1.0-rc.0.min.js"; |
240 | | - |
241 | | - let { solve_abrams_strogatz, solve_diaz_switkes } = wasmBindings; |
242 | | - |
243 | | - const model = document.getElementById("model").value; |
244 | | - document.getElementById("abrams").style.display = |
245 | | - model === "abrams" ? "flex" : "none"; |
246 | | - document.getElementById("diaz").style.display = |
247 | | - model === "diaz" ? "flex" : "none"; |
248 | | - |
249 | | - document |
250 | | - .getElementById("model") |
251 | | - .addEventListener("change", async (e) => { |
252 | | - const model = e.target.value; |
253 | | - document.getElementById("abrams").style.display = |
254 | | - model === "abrams" ? "flex" : "none"; |
255 | | - document.getElementById("diaz").style.display = |
256 | | - model === "diaz" ? "flex" : "none"; |
257 | | - |
258 | | - await solve(); |
259 | | - }); |
260 | | - |
261 | | - async function solve(e) { |
262 | | - const model = document.getElementById("model").value; |
263 | | - const params = { |
264 | | - abrams: { |
265 | | - x: Number(document.getElementById("x").value), |
266 | | - y: Number(document.getElementById("y").value), |
267 | | - c: Number(document.getElementById("c").value), |
268 | | - a: Number(document.getElementById("a").value), |
269 | | - s: Number(document.getElementById("s").value), |
270 | | - }, |
271 | | - diaz: { |
272 | | - x_1: Number(document.getElementById("x_1").value), |
273 | | - x_2: Number(document.getElementById("x_2").value), |
274 | | - b: Number(document.getElementById("b").value), |
275 | | - m_1: Number(document.getElementById("m_1").value), |
276 | | - m_2: Number(document.getElementById("m_2").value), |
277 | | - g_1: Number(document.getElementById("g_1").value), |
278 | | - g_2: Number(document.getElementById("g_2").value), |
279 | | - alpha: Number(document.getElementById("alpha").value), |
280 | | - beta: Number(document.getElementById("beta").value), |
281 | | - }, |
282 | | - }[model]; |
283 | | - const t = document.getElementById("t").value; |
284 | | - |
285 | | - if (model === "abrams") { |
286 | | - const solution = await solve_abrams_strogatz( |
287 | | - params.x, |
288 | | - params.y, |
289 | | - params.c, |
290 | | - params.a, |
291 | | - params.s, |
292 | | - t, |
293 | | - ); |
294 | | - plot([ |
295 | | - [solution, "Monolingual 1"], |
296 | | - [ |
297 | | - solution.map((y) => params.x + params.y - y), |
298 | | - "Monolingual 2", |
299 | | - ], |
300 | | - ]); |
301 | | - } else { |
302 | | - const x = await solve_diaz_switkes( |
303 | | - [params.x_1, params.x_2, params.b], |
304 | | - [params.m_1, params.m_2], |
305 | | - [params.g_1, params.g_2], |
306 | | - params.alpha, |
307 | | - params.beta, |
308 | | - t, |
309 | | - 0, |
310 | | - ); |
311 | | - const b = await solve_diaz_switkes( |
312 | | - [params.x_1, params.x_2, params.b], |
313 | | - [params.m_1, params.m_2], |
314 | | - [params.g_1, params.g_2], |
315 | | - params.alpha, |
316 | | - params.beta, |
317 | | - t, |
318 | | - 1, |
319 | | - ); |
320 | | - plot([ |
321 | | - [x, "Monlingual 1"], |
322 | | - [b, "Bilingual"], |
323 | | - [ |
324 | | - x.map( |
325 | | - (y, i) => |
326 | | - params.x_1 + |
327 | | - params.x_2 + |
328 | | - params.b - |
329 | | - (y + b[i]), |
330 | | - ), |
331 | | - "Monlingual 2", |
332 | | - ], |
333 | | - ]); |
334 | | - } |
335 | | - } |
336 | | - |
337 | | - document.getElementById("solve").addEventListener("click", solve); |
338 | | - |
339 | | - solve(); |
340 | | - |
341 | | - function plot(data) { |
342 | | - Plotly.purge("plot"); |
343 | | - let input = []; |
344 | | - for (let i = 0; i < data.length; i++) { |
345 | | - input.push({ y: data[i][0], name: `${data[i][1]}` }); |
346 | | - } |
347 | | - |
348 | | - const layout = { |
349 | | - title: "Lang Shift", |
350 | | - xaxis: { |
351 | | - title: "Time", |
352 | | - }, |
353 | | - yaxis: { |
354 | | - title: "Population", |
355 | | - }, |
356 | | - }; |
357 | | - |
358 | | - Plotly.newPlot("plot", input, layout); |
359 | | - } |
360 | | - </script> |
| 190 | + <script data-trunk type="module" src="index.js"></script> |
361 | 191 | </body> |
362 | 192 | </html> |
0 commit comments