'use strict'; var _addEventListener = require('./addEventListener'); var warp10Finalize = require('warp10/finalize'); var eventDelegation = require('./event-delegation'); var defaultDocument = typeof document != 'undefined' && document; var events = require('../runtime/events'); var widgetLookup = require('./lookup').widgets; var registry; // We initialize this later to avoid issues with circular dependencies function invokeWidgetEventHandler(widget, targetMethodName, args) { var method = widget[targetMethodName]; if (!method) { throw new Error('Widget ' + widget.id + ' does not have method named "' + targetMethodName + '"'); } method.apply(widget, args); } function addDOMEventListeners(widget, el, eventType, targetMethodName, extraArgs, handles) { var handle = _addEventListener(el, eventType, function(event) { var args = [event, el]; if (extraArgs) { args = extraArgs.concat(args); } invokeWidgetEventHandler(widget, targetMethodName, args); }); handles.push(handle); } function getNestedEl(widget, nestedId, document) { if (nestedId == null) { return null; } if (nestedId === '') { return widget.getEl(); } if (typeof nestedId === 'string') { if (nestedId.charAt(0) === '#') { return document.getElementById(nestedId.substring(1)); } } return widget.getEl(nestedId); } function initWidget(widgetDef, doc) { 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 bodyElId = widgetDef.bodyElId; var existingWidget = widgetDef.$__existingWidget; var el; var i; var len; var eventType; var targetMethodName; var widget; var extraArgs; if (!existingWidget) { existingWidget = widgetLookup[id]; } if (existingWidget && existingWidget.$__type !== type) { existingWidget = null; } if (existingWidget) { existingWidget._reset(true /* shouldRemoveDOMEventListeners */); widget = existingWidget; } else { widget = registry.createWidget(type, id, doc); } var els; var rootIds = widgetDef.$__roots; var rootWidgets; if (rootIds) { els = []; for (i=0, len=rootIds.length; i} widgetDefs An array of WidgetDef instances */ exports.initClientRendered = initClientRendered; /** * This method initializes all widgets that were rendered on the server by iterating over all * of the widget IDs. */ function initServerRendered(widgetDefs, doc) { // Ensure that event handlers to handle delegating events are // always attached before initializing any widgets eventDelegation.init(); widgetDefs = warp10Finalize(widgetDefs); if (!doc) { doc = defaultDocument; } for (var i=0, len=widgetDefs.length; i