{"version":3,"sources":["async_pipe.js"],"names":[],"mappings":"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","file":"angular2/src/change_detection/pipes/async_pipe.es6","sourcesContent":["import {Observable, ObservableWrapper} from 'angular2/src/facade/async';\nimport {isBlank, isPresent} from 'angular2/src/facade/lang';\nimport {Pipe, NO_CHANGE} from './pipe';\nimport {ChangeDetectorRef} from '../change_detector_ref';\n\n/**\n * Implements async bindings to Observable.\n *\n * # Example\n *\n * In this example we bind the description observable to the DOM. The async pipe will convert an observable to the\n * latest value it emitted. It will also request a change detection check when a new value is emitted.\n *\n *  ```\n * @Component({\n *   selector: \"task-cmp\",\n *   changeDetection: ON_PUSH\n * })\n * @View({\n *  inline: \"Task Description {{description|async}}\"\n * })\n * class Task {\n *  description:Observable<string>;\n * }\n *\n * ```\n *\n * @exportedAs angular2/pipes\n */\nexport class AsyncPipe extends Pipe {\n  _ref:ChangeDetectorRef;\n\n  _latestValue:Object;\n  _latestReturnedValue:Object;\n\n  _subscription:Object;\n  _observable:Observable;\n\n  constructor(ref:ChangeDetectorRef) {\n    super();\n    this._ref = ref;\n    this._latestValue = null;\n    this._latestReturnedValue = null;\n    this._subscription = null;\n    this._observable = null;\n  }\n\n  supports(obs):boolean {\n    return ObservableWrapper.isObservable(obs);\n  }\n\n  onDestroy():void {\n    if (isPresent(this._subscription)) {\n      this._dispose();\n    };\n  }\n\n  transform(obs:Observable):any {\n    if (isBlank(this._subscription)) {\n      this._subscribe(obs);\n      return null;\n    }\n\n    if (obs !== this._observable) {\n      this._dispose();\n      return this.transform(obs);\n    }\n\n    if (this._latestValue === this._latestReturnedValue) {\n      return NO_CHANGE;\n    } else {\n      this._latestReturnedValue = this._latestValue;\n      return this._latestValue;\n    }\n  }\n\n  _subscribe(obs:Observable):void {\n    this._observable = obs;\n    this._subscription = ObservableWrapper.subscribe(obs,\n        value => this._updateLatestValue(value),\n        e => {throw e;}\n    );\n  }\n\n  _dispose():void {\n    ObservableWrapper.dispose(this._subscription);\n    this._latestValue = null;\n    this._latestReturnedValue = null;\n    this._subscription = null;\n    this._observable = null;\n  }\n\n  _updateLatestValue(value:Object) {\n    this._latestValue = value;\n    this._ref.requestCheck();\n  }\n}\n\n/**\n * Provides a factory for [AsyncPipe].\n *\n * @exportedAs angular2/pipes\n */\nexport class AsyncPipeFactory {\n  supports(obs):boolean {\n    return ObservableWrapper.isObservable(obs);\n  }\n\n  create(cdRef):Pipe {\n    return new AsyncPipe(cdRef);\n  }\n}"]}