Initial import.
[webcart1000.git] / webcart1000.js
1 (function () {
2 "use strict";
3
4 var ORIGIN = "http://yukkurigames.com";
5 var TARGET = ORIGIN + "/webcart1000/o_o.html";
6 var wc1kFrame;
7 var wc1kWindow;
8 var saveData;
9 var _this = this;
10
11 function clamp (i, hi) { return Math.max(0, Math.min(hi, +i | 0)); }
12 function force10 (i) { return clamp(i, 1023); }
13 function force16 (i) { return clamp(i, 65535); }
14 function forcebool (i) { return !!(+i || i === "true"); }
15 function forcestr (s) { return (s || "").toString().substring(0, 1023); }
16
17 var KEYS = {
18 MapX: force10, MapY: force10,
19 PlayerName: forcestr,
20 Misc0: force16, Misc1: force16, Misc2: force16, Misc3: force16,
21 Switch0: forcebool, Switch1: forcebool,
22 Switch2: forcebool, Switch3: forcebool,
23 Switch4: forcebool, Switch5: forcebool,
24 Switch6: forcebool, Switch7: forcebool
25 };
26
27 function scrub (data) {
28 if (typeof data !== "object")
29 data = {};
30 var r = {};
31 for (var k in KEYS)
32 r[k] = KEYS[k](data[k]);
33 return r;
34 }
35
36 function onMessage (event) {
37 if (event.origin !== ORIGIN)
38 return;
39 wc1kWindow = event.source;
40 _this.data = scrub(event.data);
41 }
42
43 function refresh () {
44 wc1kWindow.postMessage("refresh", ORIGIN);
45 }
46
47 function update (data) {
48 for (var k in data)
49 _this.data[k] = data[k];
50 _this.data = scrub(_this.data);
51 wc1kWindow.postMessage(data || _this.data, ORIGIN);
52 }
53
54 window.addEventListener("load", function () {
55 window.addEventListener("message", onMessage, false);
56 wc1kFrame = document.createElement('iframe');
57 wc1kFrame.style.display = "none";
58 wc1kFrame.src = TARGET;
59 document.body.appendChild(wc1kFrame);
60 }, false);
61
62 this.refresh = refresh;
63 this.update = update;
64 this.scrub = scrub;
65 }).call(window.webcart1000 = {});