New website, now with HTTPS.
[webcart1000.git] / o_o.js
1 /* The person who associated a work with this deed has dedicated the
2 work to the public domain by waiving all of his or her rights to
3 the work worldwide under copyright law, including all related and
4 neighboring rights, to the extent allowed by law.
5
6 You can copy, modify, distribute and perform the work, even for
7 commercial purposes, all without asking permission.
8 */
9
10 (function () {
11 "use strict";
12
13 var broken = false;
14 var _window = window.parent;
15
16 function clamp (i, hi) { return Math.max(0, Math.min(hi, +i | 0)); }
17 function force10 (i) { return clamp(i, 1023); }
18 function force16 (i) { return clamp(i, 65535); }
19 function forcebool (i) { return !!(+i || i === "true"); }
20 function forcestr (s) { return (s || "").toString().substring(0, 1023); }
21
22 var KEYS = {
23 MapX: force10, MapY: force10,
24 PlayerName: forcestr,
25 Misc0: force16, Misc1: force16, Misc2: force16, Misc3: force16,
26 Switch0: forcebool, Switch1: forcebool,
27 Switch2: forcebool, Switch3: forcebool,
28 Switch4: forcebool, Switch5: forcebool,
29 Switch6: forcebool, Switch7: forcebool
30 };
31
32 function generateMessage () {
33 var r = {};
34 for (var k in KEYS)
35 r[k] = KEYS[k](localStorage["WEBCART1000 " + k]);
36 return r;
37 }
38
39 function storeMessage (data) {
40 if (!data || typeof data !== "object")
41 return;
42 for (var k in KEYS) {
43 if (k in data) {
44 localStorage["WEBCART1000 " + k] = KEYS[k](data[k]);
45 }
46 }
47 }
48
49 function postMessage () {
50 _window.postMessage(generateMessage(), "*");
51 }
52
53 function onMessage (event) {
54 if (broken)
55 return;
56 if (event.data === "refresh") {
57 _window = event.source;
58 postMessage();
59 } else {
60 storeMessage(event.data);
61 }
62 }
63
64 function onStorage (event) {
65 postMessage();
66 }
67
68 window.addEventListener("load", function () {
69 try {
70 localStorage.setItem("WEBCART1000", "WEBCART1000");
71 } catch (exc) {
72 broken = true;
73 return;
74 }
75 window.addEventListener("message", onMessage, false);
76 window.addEventListener("storage", onStorage, false);
77 postMessage();
78 }, false);
79
80 }).call(window.webcart1000 = {});