diff --git a/examples/multidom/index.html b/examples/multidom/index.html new file mode 100644 index 0000000..57cbc74 --- /dev/null +++ b/examples/multidom/index.html @@ -0,0 +1,26 @@ + + + + JS Marketplace: Multi-user DOM Example + + + + + + + +

DOM example

+
+
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/examples/multidom/index.js b/examples/multidom/index.js new file mode 100644 index 0000000..852c47a --- /dev/null +++ b/examples/multidom/index.js @@ -0,0 +1,72 @@ +var G; +$(document).ready(function () { + var World = Minimart.World; + var sub = Minimart.sub; + var pub = Minimart.pub; + var __ = Minimart.__; + var _$ = Minimart._$; + + G = new Minimart.Ground(function () { + var localId = "instance-" + Math.floor(Math.random() * 65536); + + function domWrap(selector, fragmentClass, fragmentSpec) { + return ["broker", 0, ["multidom", "DOM", selector, fragmentClass, fragmentSpec]]; + } + + function jQueryWrap(selector, eventName, eventValue) { + var v = eventValue instanceof Event || eventValue instanceof $.Event + ? Minimart.JQuery.simplifyDOMEvent(eventValue) + : eventValue; + return ["broker", 0, ["multidom", "jQuery", selector, eventName, v]]; + } + + var wsconn = new Minimart.WebSocket.WebSocketConnection( + "broker", "ws://server.minimart.leastfixedpoint.com:8000/", true); + World.spawn(wsconn); + + Minimart.DOM.spawnDOMDriver(domWrap, jQueryWrap); // remote + Minimart.DOM.spawnDOMDriver(); // local + Minimart.RoutingTableWidget.spawnRoutingTableWidget("#spy-holder", "spy"); // local + + World.spawn({ + handleEvent: function (e) { + console.log(JSON.stringify(e)); + if (e.type === "message" + && e.message[0] === "broker" + && e.message[2] instanceof Array + && e.message[2][0] === "multidom" + && e.message[2][1] === "jQuery") + { + World.send("bump_count"); + } + } + }, [pub(domWrap("#clicker-holder", localId + "-clicker", + ["button", ["span", [["style", "font-style: italic"]], + "Click me! (" + localId + ")"]])), + pub("bump_count"), + sub(jQueryWrap("button."+localId+"-clicker", "click", __))]); + + World.spawn({ + counter: 0, + boot: function () { + this.updateState(); + }, + updateState: function () { + World.updateRoutes([sub("bump_count"), + pub(domWrap("#counter-holder", localId + "-counter", + ["div", + ["p", "The current count for ", + localId, + " is: ", + this.counter]]))]); + }, + handleEvent: function (e) { + if (e.type === "message" && e.message === "bump_count") { + this.counter++; + this.updateState(); + } + } + }); + }); + G.startStepping(); +});