{"version":3,"sources":["view_factory.js"],"names":[],"mappings":"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","file":"angular2/src/render/dom/view/view_factory.es6","sourcesContent":["import {OpaqueToken, Inject, Injectable} from 'angular2/di';\nimport {int, isPresent, isBlank, BaseException} from 'angular2/src/facade/lang';\nimport {ListWrapper, MapWrapper, Map, StringMapWrapper, List} from 'angular2/src/facade/collection';\n\nimport {DOM} from 'angular2/src/dom/dom_adapter';\n\nimport {Content} from '../shadow_dom/content_tag';\nimport {ShadowDomStrategy} from '../shadow_dom/shadow_dom_strategy';\nimport {EventManager} from 'angular2/src/render/dom/events/event_manager';\n\nimport * as pvModule from './proto_view';\nimport * as viewModule from './view';\nimport {NG_BINDING_CLASS_SELECTOR, NG_BINDING_CLASS} from '../util';\n\n// TODO(tbosch): Make this an OpaqueToken as soon as our transpiler supports this!\nexport const VIEW_POOL_CAPACITY = 'render.ViewFactory.viewPoolCapacity';\n\n@Injectable()\nexport class ViewFactory {\n  _poolCapacityPerProtoView:number;\n  _pooledViewsPerProtoView:Map<pvModule.RenderProtoView, List<viewModule.RenderView>>;\n  _eventManager:EventManager;\n  _shadowDomStrategy:ShadowDomStrategy;\n\n  constructor(@Inject(VIEW_POOL_CAPACITY) poolCapacityPerProtoView,\n      eventManager:EventManager, shadowDomStrategy:ShadowDomStrategy) {\n    this._poolCapacityPerProtoView = poolCapacityPerProtoView;\n    this._pooledViewsPerProtoView = MapWrapper.create();\n    this._eventManager = eventManager;\n    this._shadowDomStrategy = shadowDomStrategy;\n  }\n\n  createInPlaceHostView(hostElementSelector, hostProtoView:pvModule.RenderProtoView):viewModule.RenderView {\n    return this._createView(hostProtoView, hostElementSelector);\n  }\n\n  getView(protoView:pvModule.RenderProtoView):viewModule.RenderView {\n    var pooledViews = MapWrapper.get(this._pooledViewsPerProtoView, protoView);\n    if (isPresent(pooledViews) && pooledViews.length > 0) {\n      return ListWrapper.removeLast(pooledViews);\n    }\n    return this._createView(protoView, null);\n  }\n\n  returnView(view:viewModule.RenderView) {\n    if (view.hydrated) {\n      throw new BaseException('View is still hydrated');\n    }\n    var protoView = view.proto;\n    var pooledViews = MapWrapper.get(this._pooledViewsPerProtoView, protoView);\n    if (isBlank(pooledViews)) {\n      pooledViews = [];\n      MapWrapper.set(this._pooledViewsPerProtoView, protoView, pooledViews);\n    }\n    if (pooledViews.length < this._poolCapacityPerProtoView) {\n      ListWrapper.push(pooledViews, view);\n    }\n  }\n\n  _createView(protoView:pvModule.RenderProtoView, inplaceElement): viewModule.RenderView {\n    if (isPresent(protoView.imperativeRendererId)) {\n      return new viewModule.RenderView(\n        protoView, [], [], [], []\n      );\n    }\n\n    var rootElementClone = isPresent(inplaceElement) ? inplaceElement : DOM.importIntoDoc(protoView.element);\n    var elementsWithBindingsDynamic;\n    if (protoView.isTemplateElement) {\n      elementsWithBindingsDynamic = DOM.querySelectorAll(DOM.content(rootElementClone), NG_BINDING_CLASS_SELECTOR);\n    } else {\n      elementsWithBindingsDynamic = DOM.getElementsByClassName(rootElementClone, NG_BINDING_CLASS);\n    }\n\n    var elementsWithBindings = ListWrapper.createFixedSize(elementsWithBindingsDynamic.length);\n    for (var binderIdx = 0; binderIdx < elementsWithBindingsDynamic.length; ++binderIdx) {\n      elementsWithBindings[binderIdx] = elementsWithBindingsDynamic[binderIdx];\n    }\n\n    var viewRootNodes;\n    if (protoView.isTemplateElement) {\n      var childNode = DOM.firstChild(DOM.content(rootElementClone));\n      viewRootNodes = []; // TODO(perf): Should be fixed size, since we could pre-compute in in pvModule.RenderProtoView\n      // Note: An explicit loop is the fastest way to convert a DOM array into a JS array!\n      while(childNode != null) {\n        ListWrapper.push(viewRootNodes, childNode);\n        childNode = DOM.nextSibling(childNode);\n      }\n    } else {\n      viewRootNodes = [rootElementClone];\n    }\n    var binders = protoView.elementBinders;\n    var boundTextNodes = [];\n    var boundElements = ListWrapper.createFixedSize(binders.length);\n    var contentTags = ListWrapper.createFixedSize(binders.length);\n\n    for (var binderIdx = 0; binderIdx < binders.length; binderIdx++) {\n      var binder = binders[binderIdx];\n      var element;\n      if (binderIdx === 0 && protoView.rootBindingOffset === 1) {\n        element = rootElementClone;\n      } else {\n        element = elementsWithBindings[binderIdx - protoView.rootBindingOffset];\n      }\n      boundElements[binderIdx] = element;\n\n      // boundTextNodes\n      var childNodes = DOM.childNodes(DOM.templateAwareRoot(element));\n      var textNodeIndices = binder.textNodeIndices;\n      for (var i = 0; i<textNodeIndices.length; i++) {\n        ListWrapper.push(boundTextNodes, childNodes[textNodeIndices[i]]);\n      }\n\n      // contentTags\n      var contentTag = null;\n      if (isPresent(binder.contentTagSelector)) {\n        contentTag = new Content(element, binder.contentTagSelector);\n      }\n      contentTags[binderIdx] = contentTag;\n    }\n\n    var view = new viewModule.RenderView(\n      protoView, viewRootNodes,\n      boundTextNodes, boundElements, contentTags\n    );\n\n    for (var binderIdx = 0; binderIdx < binders.length; binderIdx++) {\n      var binder = binders[binderIdx];\n      var element = boundElements[binderIdx];\n\n      // static child components\n      if (binder.hasStaticComponent()) {\n        var childView = this._createView(binder.nestedProtoView, null);\n        ViewFactory.setComponentView(this._shadowDomStrategy, view, binderIdx, childView);\n      }\n\n      // events\n      if (isPresent(binder.eventLocals) && isPresent(binder.localEvents)) {\n        for (var i = 0; i < binder.localEvents.length; i++) {\n          this._createEventListener(view, element, binderIdx, binder.localEvents[i].name, binder.eventLocals);\n        }\n      }\n    }\n\n    return view;\n  }\n\n  _createEventListener(view, element, elementIndex, eventName, eventLocals) {\n    this._eventManager.addEventListener(element, eventName, (event) => {\n      view.dispatchEvent(elementIndex, eventName, event);\n    });\n  }\n\n  // This method is used by the ViewFactory and the ViewHydrator\n  // TODO(tbosch): change shadow dom emulation so that LightDom\n  // instances don't need to be recreated by instead hydrated/dehydrated\n  static setComponentView(shadowDomStrategy:ShadowDomStrategy, hostView:viewModule.RenderView, elementIndex:number, componentView:viewModule.RenderView) {\n    var element = hostView.boundElements[elementIndex];\n    var lightDom = shadowDomStrategy.constructLightDom(hostView, componentView, element);\n    shadowDomStrategy.attachTemplate(element, componentView);\n    hostView.lightDoms[elementIndex] = lightDom;\n    hostView.componentChildViews[elementIndex] = componentView;\n  }\n}\n"]}