061cbb3a816ac441950e49bd92b94422b1f6a911
[webcart1000.git] / o_o.js
1 (function () {
2 "use strict";
3
4 var broken = false;
5 var _window = window.parent;
6
7 function clamp (i, hi) { return Math.max(0, Math.min(hi, +i | 0)); }
8 function force10 (i) { return clamp(i, 1023); }
9 function force16 (i) { return clamp(i, 65535); }
10 function forcebool (i) { return !!(+i || i === "true"); }
11 function forcestr (s) { return (s || "").toString().substring(0, 1023); }
12
13 var KEYS = {
14 MapX: force10, MapY: force10,
15 PlayerName: forcestr,
16 Misc0: force16, Misc1: force16, Misc2: force16, Misc3: force16,
17 Switch0: forcebool, Switch1: forcebool,
18 Switch2: forcebool, Switch3: forcebool,
19 Switch4: forcebool, Switch5: forcebool,
20 Switch6: forcebool, Switch7: forcebool
21 };
22
23 function generateMessage () {
24 var r = {};
25 for (var k in KEYS)
26 r[k] = KEYS[k](localStorage[k]);
27 return r;
28 }
29
30 function storeMessage (data) {
31 if (!data || typeof data !== "object")
32 return;
33 for (var k in KEYS) {
34 if (k in data) {
35 localStorage[k] = KEYS[k](data[k]);
36 }
37 }
38 }
39
40 function postMessage () {
41 _window.postMessage(generateMessage(), "*");
42 }
43
44 function onMessage (event) {
45 if (broken)
46 return;
47 if (event.data === "refresh") {
48 _window = event.source;
49 postMessage();
50 } else {
51 storeMessage(event.data);
52 }
53 }
54
55 function onStorage (event) {
56 postMessage();
57 }
58
59 window.addEventListener("load", function () {
60 try {
61 localStorage.setItem("WEBCART1000", "WEBCART1000");
62 } catch (exc) {
63 broken = true;
64 return;
65 }
66 window.addEventListener("message", onMessage, false);
67 window.addEventListener("storage", onStorage, false);
68 postMessage();
69 }, false);
70
71 }).call(window.webcart1000 = {});