UNPKG

1.91 kBJavaScriptView Raw
1var snabbdom = require('../../snabbdom.js');
2var patch = snabbdom.init([
3 require('../../modules/attributes').default,
4 require('../../modules/style').default,
5 require('../../modules/eventlisteners').default
6]);
7var h = require('../../h.js').default;
8
9var vnode;
10
11var data = {
12 degRotation: 0
13};
14
15function gRotation() {
16 //console.log("gRotation: %s", data.degRotation);
17 return "rotate(" + data.degRotation + "deg)";
18}
19
20function triangleClick(id) {
21 console.log("triangleClick: %s", id);
22 render();
23}
24
25function handleRotate(degs) {
26 data.degRotation += degs;
27 console.log("handleRotate: %s, %s", degs, data.degRotation);
28 render();
29}
30
31function handleReset(degs) {
32 data.degRotation = degs;
33 console.log("handleReset: %s", degs);
34 render();
35}
36
37function render() {
38 vnode = patch(vnode, view(data));
39}
40
41const 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
51const 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
70window.addEventListener("DOMContentLoaded", () => {
71 var container = document.getElementById("container");
72 vnode = patch(container, view(data));
73 render();
74});