UNPKG

angular2

Version:

Angular 2 - a web framework for modern web apps

179 lines (178 loc) 10.1 kB
"use strict"; Object.defineProperties(module.exports, { VIEW_POOL_CAPACITY: {get: function() { return VIEW_POOL_CAPACITY; }}, ViewFactory: {get: function() { return ViewFactory; }}, __esModule: {value: true} }); var $__angular2_47_di__, $__angular2_47_src_47_facade_47_lang__, $__angular2_47_src_47_facade_47_collection__, $__angular2_47_src_47_dom_47_dom_95_adapter__, $___46__46__47_shadow_95_dom_47_content_95_tag__, $___46__46__47_shadow_95_dom_47_shadow_95_dom_95_strategy__, $__angular2_47_src_47_render_47_dom_47_events_47_event_95_manager__, $__proto_95_view__, $__view__, $___46__46__47_util__; var $__0 = ($__angular2_47_di__ = require("angular2/di"), $__angular2_47_di__ && $__angular2_47_di__.__esModule && $__angular2_47_di__ || {default: $__angular2_47_di__}), OpaqueToken = $__0.OpaqueToken, Inject = $__0.Inject, Injectable = $__0.Injectable; var $__1 = ($__angular2_47_src_47_facade_47_lang__ = require("angular2/src/facade/lang"), $__angular2_47_src_47_facade_47_lang__ && $__angular2_47_src_47_facade_47_lang__.__esModule && $__angular2_47_src_47_facade_47_lang__ || {default: $__angular2_47_src_47_facade_47_lang__}), int = $__1.int, isPresent = $__1.isPresent, isBlank = $__1.isBlank, BaseException = $__1.BaseException; var $__2 = ($__angular2_47_src_47_facade_47_collection__ = require("angular2/src/facade/collection"), $__angular2_47_src_47_facade_47_collection__ && $__angular2_47_src_47_facade_47_collection__.__esModule && $__angular2_47_src_47_facade_47_collection__ || {default: $__angular2_47_src_47_facade_47_collection__}), ListWrapper = $__2.ListWrapper, MapWrapper = $__2.MapWrapper, Map = $__2.Map, StringMapWrapper = $__2.StringMapWrapper, List = $__2.List; var DOM = ($__angular2_47_src_47_dom_47_dom_95_adapter__ = require("angular2/src/dom/dom_adapter"), $__angular2_47_src_47_dom_47_dom_95_adapter__ && $__angular2_47_src_47_dom_47_dom_95_adapter__.__esModule && $__angular2_47_src_47_dom_47_dom_95_adapter__ || {default: $__angular2_47_src_47_dom_47_dom_95_adapter__}).DOM; var Content = ($___46__46__47_shadow_95_dom_47_content_95_tag__ = require("../shadow_dom/content_tag"), $___46__46__47_shadow_95_dom_47_content_95_tag__ && $___46__46__47_shadow_95_dom_47_content_95_tag__.__esModule && $___46__46__47_shadow_95_dom_47_content_95_tag__ || {default: $___46__46__47_shadow_95_dom_47_content_95_tag__}).Content; var ShadowDomStrategy = ($___46__46__47_shadow_95_dom_47_shadow_95_dom_95_strategy__ = require("../shadow_dom/shadow_dom_strategy"), $___46__46__47_shadow_95_dom_47_shadow_95_dom_95_strategy__ && $___46__46__47_shadow_95_dom_47_shadow_95_dom_95_strategy__.__esModule && $___46__46__47_shadow_95_dom_47_shadow_95_dom_95_strategy__ || {default: $___46__46__47_shadow_95_dom_47_shadow_95_dom_95_strategy__}).ShadowDomStrategy; var EventManager = ($__angular2_47_src_47_render_47_dom_47_events_47_event_95_manager__ = require("angular2/src/render/dom/events/event_manager"), $__angular2_47_src_47_render_47_dom_47_events_47_event_95_manager__ && $__angular2_47_src_47_render_47_dom_47_events_47_event_95_manager__.__esModule && $__angular2_47_src_47_render_47_dom_47_events_47_event_95_manager__ || {default: $__angular2_47_src_47_render_47_dom_47_events_47_event_95_manager__}).EventManager; var pvModule = ($__proto_95_view__ = require("./proto_view"), $__proto_95_view__ && $__proto_95_view__.__esModule && $__proto_95_view__ || {default: $__proto_95_view__}); var viewModule = ($__view__ = require("./view"), $__view__ && $__view__.__esModule && $__view__ || {default: $__view__}); var $__7 = ($___46__46__47_util__ = require("../util"), $___46__46__47_util__ && $___46__46__47_util__.__esModule && $___46__46__47_util__ || {default: $___46__46__47_util__}), NG_BINDING_CLASS_SELECTOR = $__7.NG_BINDING_CLASS_SELECTOR, NG_BINDING_CLASS = $__7.NG_BINDING_CLASS; var VIEW_POOL_CAPACITY = 'render.ViewFactory.viewPoolCapacity'; var ViewFactory = function ViewFactory(poolCapacityPerProtoView, eventManager, shadowDomStrategy) { this._poolCapacityPerProtoView = poolCapacityPerProtoView; this._pooledViewsPerProtoView = MapWrapper.create(); this._eventManager = eventManager; this._shadowDomStrategy = shadowDomStrategy; }; var $ViewFactory = ViewFactory; ($traceurRuntime.createClass)(ViewFactory, { createInPlaceHostView: function(hostElementSelector, hostProtoView) { return this._createView(hostProtoView, hostElementSelector); }, getView: function(protoView) { var pooledViews = MapWrapper.get(this._pooledViewsPerProtoView, protoView); if (isPresent(pooledViews) && pooledViews.length > 0) { return ListWrapper.removeLast(pooledViews); } return this._createView(protoView, null); }, returnView: function(view) { if (view.hydrated) { throw new BaseException('View is still hydrated'); } var protoView = view.proto; var pooledViews = MapWrapper.get(this._pooledViewsPerProtoView, protoView); if (isBlank(pooledViews)) { pooledViews = []; MapWrapper.set(this._pooledViewsPerProtoView, protoView, pooledViews); } if (pooledViews.length < this._poolCapacityPerProtoView) { ListWrapper.push(pooledViews, view); } }, _createView: function(protoView, inplaceElement) { if (isPresent(protoView.imperativeRendererId)) { return new viewModule.RenderView(protoView, [], [], [], []); } var rootElementClone = isPresent(inplaceElement) ? inplaceElement : DOM.importIntoDoc(protoView.element); var elementsWithBindingsDynamic; if (protoView.isTemplateElement) { elementsWithBindingsDynamic = DOM.querySelectorAll(DOM.content(rootElementClone), NG_BINDING_CLASS_SELECTOR); } else { elementsWithBindingsDynamic = DOM.getElementsByClassName(rootElementClone, NG_BINDING_CLASS); } var elementsWithBindings = ListWrapper.createFixedSize(elementsWithBindingsDynamic.length); for (var binderIdx = 0; binderIdx < elementsWithBindingsDynamic.length; ++binderIdx) { elementsWithBindings[binderIdx] = elementsWithBindingsDynamic[binderIdx]; } var viewRootNodes; if (protoView.isTemplateElement) { var childNode = DOM.firstChild(DOM.content(rootElementClone)); viewRootNodes = []; while (childNode != null) { ListWrapper.push(viewRootNodes, childNode); childNode = DOM.nextSibling(childNode); } } else { viewRootNodes = [rootElementClone]; } var binders = protoView.elementBinders; var boundTextNodes = []; var boundElements = ListWrapper.createFixedSize(binders.length); var contentTags = ListWrapper.createFixedSize(binders.length); for (var binderIdx = 0; binderIdx < binders.length; binderIdx++) { var binder = binders[binderIdx]; var element = void 0; if (binderIdx === 0 && protoView.rootBindingOffset === 1) { element = rootElementClone; } else { element = elementsWithBindings[binderIdx - protoView.rootBindingOffset]; } boundElements[binderIdx] = element; var childNodes = DOM.childNodes(DOM.templateAwareRoot(element)); var textNodeIndices = binder.textNodeIndices; for (var i = 0; i < textNodeIndices.length; i++) { ListWrapper.push(boundTextNodes, childNodes[textNodeIndices[i]]); } var contentTag = null; if (isPresent(binder.contentTagSelector)) { contentTag = new Content(element, binder.contentTagSelector); } contentTags[binderIdx] = contentTag; } var view = new viewModule.RenderView(protoView, viewRootNodes, boundTextNodes, boundElements, contentTags); for (var binderIdx = 0; binderIdx < binders.length; binderIdx++) { var binder = binders[binderIdx]; var element = boundElements[binderIdx]; if (binder.hasStaticComponent()) { var childView = this._createView(binder.nestedProtoView, null); $ViewFactory.setComponentView(this._shadowDomStrategy, view, binderIdx, childView); } if (isPresent(binder.eventLocals) && isPresent(binder.localEvents)) { for (var i = 0; i < binder.localEvents.length; i++) { this._createEventListener(view, element, binderIdx, binder.localEvents[i].name, binder.eventLocals); } } } return view; }, _createEventListener: function(view, element, elementIndex, eventName, eventLocals) { this._eventManager.addEventListener(element, eventName, (function(event) { view.dispatchEvent(elementIndex, eventName, event); })); } }, {setComponentView: function(shadowDomStrategy, hostView, elementIndex, componentView) { var element = hostView.boundElements[elementIndex]; var lightDom = shadowDomStrategy.constructLightDom(hostView, componentView, element); shadowDomStrategy.attachTemplate(element, componentView); hostView.lightDoms[elementIndex] = lightDom; hostView.componentChildViews[elementIndex] = componentView; }}); Object.defineProperty(ViewFactory, "annotations", {get: function() { return [new Injectable()]; }}); Object.defineProperty(ViewFactory, "parameters", {get: function() { return [[new Inject(VIEW_POOL_CAPACITY)], [EventManager], [ShadowDomStrategy]]; }}); Object.defineProperty(ViewFactory.prototype.createInPlaceHostView, "parameters", {get: function() { return [[], [pvModule.RenderProtoView]]; }}); Object.defineProperty(ViewFactory.prototype.getView, "parameters", {get: function() { return [[pvModule.RenderProtoView]]; }}); Object.defineProperty(ViewFactory.prototype.returnView, "parameters", {get: function() { return [[viewModule.RenderView]]; }}); Object.defineProperty(ViewFactory.prototype._createView, "parameters", {get: function() { return [[pvModule.RenderProtoView], []]; }}); Object.defineProperty(ViewFactory.setComponentView, "parameters", {get: function() { return [[ShadowDomStrategy], [viewModule.RenderView], [$traceurRuntime.type.number], [viewModule.RenderView]]; }}); //# sourceMappingURL=view_factory.js.map //# sourceMappingURL=./view_factory.map