From b6d2aa285d1b46d5f0697b23aa9368e36dccd758 Mon Sep 17 00:00:00 2001 From: Patrick Steele-Idem Date: Fri, 16 Dec 2016 06:25:47 -0700 Subject: [PATCH] Simplified code related to rerendering a widget and putting info into out.global --- widgets/Widget.js | 9 +-------- widgets/renderer.js | 37 +++++++++++++++++----------------- widgets/taglib/preserve-tag.js | 2 +- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/widgets/Widget.js b/widgets/Widget.js index df7f6d056..87ae64564 100644 --- a/widgets/Widget.js +++ b/widgets/Widget.js @@ -520,14 +520,7 @@ Widget.prototype = widgetProto = { var templateData = extend({}, props || self.__rawState); var globalData = {}; - - globalData.__rerenderWidget = self; - globalData.__rerenderEl = self.el; - globalData.__rerender = true; - - if (!props) { - globalData.__rerenderState = props ? null : self.__rawState; - } + globalData.$w = [self, !props && self.__rawState]; var fromEls = markoWidgets._roots(this, {}); var doc = this.__document; diff --git a/widgets/renderer.js b/widgets/renderer.js index 2f45ce6b6..c94be8e19 100644 --- a/widgets/renderer.js +++ b/widgets/renderer.js @@ -4,6 +4,9 @@ var includeTag = require('./taglib/include-tag'); var repeatedId = require('./repeated-id'); var getRootEls = markoWidgets._roots; +var RERENDER_WIDGET_INDEX = 0; +var RERENDER_WIDGET_STATE_INDEX = 1; + function resolveWidgetRef(out, ref, scope) { if (ref.charAt(0) === '#') { return ref.substring(1); @@ -135,19 +138,25 @@ module.exports = function createRendererFunc(templateRenderFunc, widgetProps, re var widgetConfig; var widgetBody; - if (outGlobal.__rerenderWidget && outGlobal.__rerenderState) { + var rerenderInfo = outGlobal.$w; + var rerenderWidget; + var rerenderWidgetState; + + if (rerenderInfo) { + rerenderWidget = rerenderInfo[RERENDER_WIDGET_INDEX]; + rerenderWidgetState = rerenderInfo[RERENDER_WIDGET_STATE_INDEX]; + rerenderInfo[RERENDER_WIDGET_INDEX] = null; + } + + if (rerenderWidget && rerenderWidgetState) { // This is a state-ful widget. If this is a rerender then the "input" // will be the new state. If we have state then we should use the input // as the widget state and skip the steps of converting the input // to a widget state. - var isFirstWidget = !outGlobal.__firstWidgetFound; - - if (isFirstWidget) { - // We are the first widget and we are not being extended - // and we are not extending so use the input as the state - widgetState = input; - input = null; - } + // We are the first widget and we are not being extended + // and we are not extending so use the input as the state + widgetState = input; + input = null; } var widgetArgs; @@ -203,13 +212,9 @@ module.exports = function createRendererFunc(templateRenderFunc, widgetProps, re widgetArgs = input.$w; } - outGlobal.__firstWidgetFound = true; - var customEvents; var scope; - - var id = assignedId; if (!widgetArgs) { @@ -231,9 +236,6 @@ module.exports = function createRendererFunc(templateRenderFunc, widgetProps, re customEvents = widgetArgs[2]; } - var rerenderWidget = outGlobal.__rerenderWidget; - var isRerender = outGlobal.__rerender === true; - var widgetsContext = markoWidgets.getWidgetsContext(out); if (!id) { @@ -249,8 +251,7 @@ module.exports = function createRendererFunc(templateRenderFunc, widgetProps, re if (rerenderWidget) { existingWidget = rerenderWidget; id = rerenderWidget.id; - delete outGlobal.__rerenderWidget; - } else if (isRerender) { + } else if (rerenderInfo) { // Look in in the DOM to see if a widget with the same ID and type already exists. existingWidget = widgetLookup[id]; if (existingWidget && existingWidget.__type !== typeName) { diff --git a/widgets/taglib/preserve-tag.js b/widgets/taglib/preserve-tag.js index e740e850b..1246b12fe 100644 --- a/widgets/taglib/preserve-tag.js +++ b/widgets/taglib/preserve-tag.js @@ -4,7 +4,7 @@ module.exports = function render(input, out) { var global = out.global; - if (global.__rerender === true) { + if (global.$w) { var id = input.id; // See if the DOM node with the given ID already exists.