{"version":3,"sources":["view_container.js"],"names":[],"mappings":"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","file":"angular2/src/core/compiler/view_container.js","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"]}