'use strict'; var warp10Finalize = require('warp10/finalize'); var eventDelegation = require('./event-delegation'); var win = window; var defaultDocument = document; var events = require('../runtime/events'); var widgetsUtil = require('./util'); var widgetLookup = widgetsUtil.$__widgetLookup; var getElementById = widgetsUtil.$__getElementById; var WidgetDef = require('./WidgetDef'); var extend = require('raptor-util/extend'); var registry; // We initialize this later to avoid issues with circular dependencies function invokeWidgetEventHandler(widget, targetMethodName, args) { var method = widget[targetMethodName]; if (!method) { throw Error('Method not found: ' + targetMethodName); } method.apply(widget, args); } function addEventListenerHelper(el, eventType, listener) { el.addEventListener(eventType, listener, false); return function remove() { el.removeEventListener(eventType, listener); }; } function addDOMEventListeners(widget, el, eventType, targetMethodName, extraArgs, handles) { var removeListener = addEventListenerHelper(el, eventType, function(event) { var args = [event, el]; if (extraArgs) { args = extraArgs.concat(args); } invokeWidgetEventHandler(widget, targetMethodName, args); }); handles.push(removeListener); } 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 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(); existingWidget.$__removeDOMEventListeners(); 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 */ function initClientRendered(widgetDefs, doc) { // Ensure that event handlers to handle delegating events are // always attached before initializing any widgets eventDelegation.$__init(doc); doc = doc || defaultDocument; for (var i=0,len=widgetDefs.length; i