1 | var snabbdom = require('../../snabbdom.js');
|
2 | var patch = snabbdom.init([
|
3 | require('../../modules/attributes').default,
|
4 | require('../../modules/style').default,
|
5 | require('../../modules/eventlisteners').default
|
6 | ]);
|
7 | var h = require('../../h.js').default;
|
8 |
|
9 | var vnode;
|
10 |
|
11 | var data = {
|
12 | degRotation: 0
|
13 | };
|
14 |
|
15 | function gRotation() {
|
16 |
|
17 | return "rotate(" + data.degRotation + "deg)";
|
18 | }
|
19 |
|
20 | function triangleClick(id) {
|
21 | console.log("triangleClick: %s", id);
|
22 | render();
|
23 | }
|
24 |
|
25 | function handleRotate(degs) {
|
26 | data.degRotation += degs;
|
27 | console.log("handleRotate: %s, %s", degs, data.degRotation);
|
28 | render();
|
29 | }
|
30 |
|
31 | function handleReset(degs) {
|
32 | data.degRotation = degs;
|
33 | console.log("handleReset: %s", degs);
|
34 | render();
|
35 | }
|
36 |
|
37 | function render() {
|
38 | vnode = patch(vnode, view(data));
|
39 | }
|
40 |
|
41 | const hTriangle = (id, degRotation) =>
|
42 | h("polygon#" + id, {
|
43 | attrs: {
|
44 | points: "-50,-88 0,-175 50,-88",
|
45 | transform: "rotate(" + degRotation + ")",
|
46 | "stroke-width": 3
|
47 | },
|
48 | on: {click: [triangleClick, id]}
|
49 | });
|
50 |
|
51 | const view = (data) =>
|
52 | h("div.view", [
|
53 | h("h1", "Snabbdom SVG Carousel"),
|
54 | h("svg", {attrs: {width: 380, height: 380, viewBox: [-190, -190, 380, 380]}}, [
|
55 | h("g#carousel",
|
56 | {style: {"-webkit-transform": gRotation(), transform: gRotation()}}, [
|
57 | hTriangle("yellow", 0),
|
58 | hTriangle("green", 60),
|
59 | hTriangle("magenta", 120),
|
60 | hTriangle("red", 180),
|
61 | hTriangle("cyan", 240),
|
62 | hTriangle("blue", 300)
|
63 | ])
|
64 | ]),
|
65 | h("button", {on: {click: [handleRotate, 60]}}, "Rotate Clockwise"),
|
66 | h("button", {on: {click: [handleRotate, -60]}}, "Rotate Anticlockwise"),
|
67 | h("button", {on: {click: [handleReset, 0]}}, "Reset")
|
68 | ]);
|
69 |
|
70 | window.addEventListener("DOMContentLoaded", () => {
|
71 | var container = document.getElementById("container");
|
72 | vnode = patch(container, view(data));
|
73 | render();
|
74 | });
|