{"version":3,"sources":["view_container.js"],"names":[],"mappings":"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","file":"angular2/src/core/compiler/view_container.es6","sourcesContent":["import {ListWrapper, MapWrapper, List} from 'angular2/src/facade/collection';\nimport {BaseException} from 'angular2/src/facade/lang';\nimport {Injector} from 'angular2/di';\nimport * as eiModule from 'angular2/src/core/compiler/element_injector';\nimport {isPresent, isBlank} from 'angular2/src/facade/lang';\n\nimport * as viewModule from './view';\nimport {ViewContainerRef} from 'angular2/src/render/api';\n\n/**\n * @exportedAs angular2/view\n */\nexport class ViewContainer {\n  parentView: viewModule.AppView;\n  defaultProtoView: viewModule.AppProtoView;\n  _views: List<viewModule.AppView>;\n  elementInjector: eiModule.ElementInjector;\n\n  constructor(parentView: viewModule.AppView,\n              defaultProtoView: viewModule.AppProtoView,\n              elementInjector: eiModule.ElementInjector) {\n    this.parentView = parentView;\n    this.defaultProtoView = defaultProtoView;\n    this.elementInjector = elementInjector;\n\n    // The order in this list matches the DOM order.\n    this._views = [];\n  }\n\n  getRender() {\n    return new ViewContainerRef(this.parentView.render, this.elementInjector.getBoundElementIndex());\n  }\n\n  internalClearWithoutRender() {\n    for (var i = this._views.length - 1; i >= 0; i--) {\n      this._detachInjectors(i);\n    }\n  }\n\n  clear() {\n    for (var i = this._views.length - 1; i >= 0; i--) {\n      this.remove(i);\n    }\n  }\n\n  get(index: number): viewModule.AppView {\n    return this._views[index];\n  }\n\n  get length() {\n    return this._views.length;\n  }\n\n  _siblingInjectorToLinkAfter(index: number) {\n    if (index == 0) return null;\n    return ListWrapper.last(this._views[index - 1].rootElementInjectors)\n  }\n\n  hydrated() {\n    return this.parentView.hydrated();\n  }\n\n  // TODO(rado): profile and decide whether bounds checks should be added\n  // to the methods below.\n  create(atIndex=-1, protoView:viewModule.AppProtoView = null, injector:Injector = null): viewModule.AppView {\n    if (atIndex == -1) atIndex = this._views.length;\n    if (!this.hydrated()) throw new BaseException(\n        'Cannot create views on a dehydrated ViewContainer');\n    if (isBlank(protoView)) {\n      protoView = this.defaultProtoView;\n    }\n    var newView = this.parentView.viewFactory.getView(protoView);\n    // insertion must come before hydration so that element injector trees are attached.\n    this._insertInjectors(newView, atIndex);\n    this.parentView.viewHydrator.hydrateViewInViewContainer(this, atIndex, newView, injector);\n\n    return newView;\n  }\n\n  insert(view, atIndex=-1): viewModule.AppView {\n    if (atIndex == -1) atIndex = this._views.length;\n    this._insertInjectors(view, atIndex);\n    this.parentView.changeDetector.addChild(view.changeDetector);\n    this.parentView.renderer.insertViewIntoContainer(this.getRender(), atIndex, view.render);\n    return view;\n  }\n\n  _insertInjectors(view, atIndex): viewModule.AppView {\n    ListWrapper.insert(this._views, atIndex, view);\n    this._linkElementInjectors(this._siblingInjectorToLinkAfter(atIndex), view);\n\n    return view;\n  }\n\n  indexOf(view:viewModule.AppView) {\n    return ListWrapper.indexOf(this._views, view);\n  }\n\n  remove(atIndex=-1) {\n    if (atIndex == -1) atIndex = this._views.length - 1;\n    var view = this._views[atIndex];\n    // opposite order as in create\n    this.parentView.viewHydrator.dehydrateViewInViewContainer(this, atIndex, view);\n    this._detachInjectors(atIndex);\n    this.parentView.viewFactory.returnView(view);\n    // view is intentionally not returned to the client.\n  }\n\n  /**\n   * The method can be used together with insert to implement a view move, i.e.\n   * moving the dom nodes while the directives in the view stay intact.\n   */\n  detach(atIndex=-1): viewModule.AppView {\n    if (atIndex == -1) atIndex = this._views.length - 1;\n    var detachedView = this._detachInjectors(atIndex);\n    detachedView.changeDetector.remove();\n    this.parentView.renderer.detachViewFromContainer(this.getRender(), atIndex);\n    return detachedView;\n  }\n\n  _detachInjectors(atIndex): viewModule.AppView {\n    var detachedView = this.get(atIndex);\n    ListWrapper.removeAt(this._views, atIndex);\n    this._unlinkElementInjectors(detachedView);\n    return detachedView;\n  }\n\n  _linkElementInjectors(sibling, view) {\n    for (var i = view.rootElementInjectors.length - 1; i >= 0; i--) {\n      view.rootElementInjectors[i].linkAfter(this.elementInjector, sibling);\n    }\n  }\n\n  _unlinkElementInjectors(view) {\n    for (var i = 0; i < view.rootElementInjectors.length; ++i) {\n      view.rootElementInjectors[i].unlink();\n    }\n  }\n}\n"]}