diff --git a/package.json b/package.json index fed870163..59cf8b0b5 100644 --- a/package.json +++ b/package.json @@ -131,5 +131,9 @@ "version": "4.0.0-beta.4", "logo": { "url": "https://raw.githubusercontent.com/marko-js/branding/master/marko-logo-small.png" + }, + "minprops": { + "exclude": ["c", "ca", "e", "n", "r", "sa", "t"], + "matchPrefix": "$__" } } diff --git a/runtime/RenderResult.js b/runtime/RenderResult.js index cbc5166b5..2e93cfe84 100644 --- a/runtime/RenderResult.js +++ b/runtime/RenderResult.js @@ -1,16 +1,17 @@ var events = require('./events'); var domInsert = require('./dom-insert'); +var EMPTY_ARRAY = []; function checkAddedToDOM(result, method) { - if (!result.$__added) { + if (!result.$__widgets) { throw new Error('Cannot call ' + method + '() until after HTML fragment is added to DOM.'); } } function getWidgetDefs(result) { - var widgetDefs = result.$__out.data.widgets; + var widgetDefs = result.$__widgets; - if (!widgetDefs || widgetDefs.length === 0) { + if (widgetDefs.length === 0) { throw new Error('No widget rendered'); } return widgetDefs; @@ -18,7 +19,7 @@ function getWidgetDefs(result) { function RenderResult(out) { this.out = this.$__out = out; - this.$__added = false; + this.$__widgets = null; } module.exports = RenderResult; @@ -62,14 +63,9 @@ var proto = RenderResult.prototype = { }, afterInsert: function(doc) { - this.$__added = true; - - var data = this.$__out.data; - - var widgetsContext = this.$__out.global.widgets; - var widgetDefs = widgetsContext ? widgetsContext.widgets : null; - - data.widgets = widgetDefs; + var out = this.$__out; + var widgetsContext = out.global.widgets; + this.$__widgets = (widgetsContext && widgetsContext.$__widgets) || EMPTY_ARRAY; events.emit('mountNode', { result: this, diff --git a/runtime/package.json b/runtime/package.json index d07c835bf..858bc4f5a 100644 --- a/runtime/package.json +++ b/runtime/package.json @@ -1,9 +1,5 @@ { "browser": { "./loader/index.js": "./loader/index-browser.js" - }, - "minprops": { - "exclude": ["c", "ca", "e", "n", "sa", "t"], - "matchPrefix": "$__" } } \ No newline at end of file diff --git a/test/autotests/widgets-browser-deprecated/widget-conditional/test.js b/test/autotests/widgets-browser-deprecated/widget-conditional/test.js index ad9c6828d..4c8364ef7 100644 --- a/test/autotests/widgets-browser-deprecated/widget-conditional/test.js +++ b/test/autotests/widgets-browser-deprecated/widget-conditional/test.js @@ -5,7 +5,7 @@ module.exports = function(helpers) { includeWidget: false }); - expect(widget).to.equal(undefined); + expect(widget == null).to.equal(true); expect(helpers.targetEl.innerHTML).contain('[app-conditional-widget]'); diff --git a/test/autotests/widgets-browser/widget-conditional/test.js b/test/autotests/widgets-browser/widget-conditional/test.js index ad9c6828d..4c8364ef7 100644 --- a/test/autotests/widgets-browser/widget-conditional/test.js +++ b/test/autotests/widgets-browser/widget-conditional/test.js @@ -5,7 +5,7 @@ module.exports = function(helpers) { includeWidget: false }); - expect(widget).to.equal(undefined); + expect(widget == null).to.equal(true); expect(helpers.targetEl.innerHTML).contain('[app-conditional-widget]'); diff --git a/test/autotests/widgets-compilation/widget-types/expected.js b/test/autotests/widgets-compilation/widget-types/expected.js index 29ad1e14f..80a446105 100644 --- a/test/autotests/widgets-compilation/widget-types/expected.js +++ b/test/autotests/widgets-compilation/widget-types/expected.js @@ -13,7 +13,7 @@ var marko_template = module.exports = require("marko/html").t(__filename), marko_attr = marko_helpers.a; function render(data, out, widget, state) { - widget.type = marko_widgetTypes[data.isMobile ? "default" : "mobile"]; + widget.t(marko_widgetTypes[data.isMobile ? "default" : "mobile"]); out.w("'); - widgetsContext.clearWidgets(); + widgetsContext.$__clearWidgets(); } exports.writeInitWidgetsCode = writeInitWidgetsCode; @@ -77,7 +75,7 @@ exports.writeInitWidgetsCode = writeInitWidgetsCode; * @param {WidgetsContext|AsyncWriter} widgetsContext A WidgetsContext or an AsyncWriter * @return {Object} An object with information about the rendered widgets that can be serialized to JSON. The object should be treated as opaque */ -exports.getRenderedWidgets = exports.getRenderedWidgetIds /* deprecated */ = function(widgetsContext) { +exports.getRenderedWidgets = function(widgetsContext) { if (!(widgetsContext instanceof WidgetsContext)) { // Assume that the provided "widgetsContext" argument is // actually an AsyncWriter @@ -86,7 +84,7 @@ exports.getRenderedWidgets = exports.getRenderedWidgetIds /* deprecated */ = fun throw new Error('Invalid argument: ' + widgetsContext); } - widgetsContext = WidgetsContext.getWidgetsContext(out); + widgetsContext = WidgetsContext.$__getWidgetsContext(out); } var renderedWidgets = getRenderedWidgets(widgetsContext); diff --git a/widgets/init-widgets-browser.js b/widgets/init-widgets-browser.js index 3a1a9a359..14622877e 100644 --- a/widgets/init-widgets-browser.js +++ b/widgets/init-widgets-browser.js @@ -48,15 +48,15 @@ function getNestedEl(widget, nestedId, document) { } function initWidget(widgetDef, doc) { - var type = widgetDef.type; + var type = widgetDef.$__type; var id = widgetDef.id; - var config = widgetDef.config; - var state = widgetDef.state; - var scope = widgetDef.scope; - var domEvents = widgetDef.domEvents; - var customEvents = widgetDef.customEvents; + var config = widgetDef.$__config; + var state = widgetDef.$__state; + var scope = widgetDef.$__scope; + var domEvents = widgetDef.$__domEvents; + var customEvents = widgetDef.$__customEvents; var bodyElId = widgetDef.bodyElId; - var existingWidget = widgetDef.existingWidget; + var existingWidget = widgetDef.$__existingWidget; var el; var i; @@ -82,7 +82,7 @@ function initWidget(widgetDef, doc) { } var els; - var rootIds = widgetDef.roots; + var rootIds = widgetDef.$__roots; var rootWidgets; if (rootIds) { @@ -218,11 +218,11 @@ function initClientRendered(widgetDefs, doc) { for (var i=0,len=widgetDefs.length; i