From 6d028f00c528a8251bd9f985bb3b35500aec55f3 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sat, 6 Feb 2016 15:06:59 -0500 Subject: [PATCH] Seal DOMFragment specifications. --- js/examples/dom/index.js | 8 +++++--- js/src/dom-driver.js | 3 ++- js/src/main.js | 6 +++++- js/src/seal.js | 8 ++++++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/js/examples/dom/index.js b/js/examples/dom/index.js index 9369c0b..de51c5f 100644 --- a/js/examples/dom/index.js +++ b/js/examples/dom/index.js @@ -4,6 +4,7 @@ $(document).ready(function () { var sub = Syndicate.sub; var assert = Syndicate.assert; var retract = Syndicate.retract; + var seal = Syndicate.seal; var __ = Syndicate.__; var _$ = Syndicate._$; @@ -15,7 +16,7 @@ $(document).ready(function () { Network.spawn({ boot: function () { return assert(["DOM", "#clicker-holder", "clicker", - ["button", ["span", [["style", "font-style: italic"]], "Click me!"]]]) + seal(["button", ["span", [["style", "font-style: italic"]], "Click me!"]])]) .andThen(sub(["jQuery", "button.clicker", "click", __])); }, handleEvent: function (e) { @@ -34,8 +35,9 @@ $(document).ready(function () { updateState: function () { Network.stateChange(retract(["DOM", __, __, __]) .andThen(assert(["DOM", "#counter-holder", "counter", - ["div", - ["p", "The current count is: ", this.counter]]]))); + seal(["div", + ["p", "The current count is: ", + this.counter]])]))); }, handleEvent: function (e) { if (e.type === "message" && e.message === "bump_count") { diff --git a/js/src/dom-driver.js b/js/src/dom-driver.js index 1f5316a..39e4243 100644 --- a/js/src/dom-driver.js +++ b/js/src/dom-driver.js @@ -2,6 +2,7 @@ var Syndicate = require("./syndicate.js"); var Patch = require("./patch.js"); var DemandMatcher = require('./demand-matcher.js').DemandMatcher; +var Seal = require('./seal.js').Seal; var Network = Syndicate.Network; var __ = Syndicate.__; var _$ = Syndicate._$; @@ -122,7 +123,7 @@ DOMFragment.prototype.buildNodes = function () { var self = this; var nodes = []; $(self.selector).each(function (index, domNode) { - var n = self.interpretSpec(self.fragmentSpec.toJS()); + var n = self.interpretSpec(self.fragmentSpec.sealContents); n.classList.add(self.fragmentClass); domNode.appendChild(n); nodes.push(n); diff --git a/js/src/main.js b/js/src/main.js index ace608c..6c92c80 100644 --- a/js/src/main.js +++ b/js/src/main.js @@ -17,8 +17,12 @@ copyKeys(['__', '_$', '$Capture', '$Special', module.exports, module.exports.Route); +var Seal = require('./seal.js') +copyKeys(['Seal', 'seal'], + module.exports, + Seal); + module.exports.DemandMatcher = require('./demand-matcher.js').DemandMatcher; -module.exports.Seal = require('./seal.js').Seal; module.exports.Ack = require('./ack.js').Ack; module.exports.RandomID = require('./randomid.js'); diff --git a/js/src/seal.js b/js/src/seal.js index f30c996..9cde479 100644 --- a/js/src/seal.js +++ b/js/src/seal.js @@ -1,5 +1,8 @@ +var Immutable = require('immutable'); + function Seal(contents) { this.sealContents = contents; + Object.freeze(this); } Seal.prototype.equals = function (other) { @@ -7,4 +10,9 @@ Seal.prototype.equals = function (other) { return Immutable.is(this.sealContents, other.sealContents); }; +function seal(contents) { + return new Seal(contents); +} + module.exports.Seal = Seal; +module.exports.seal = seal;