MCPcopy
hub / github.com/ampproject/amphtml / whenWithinViewport

Method whenWithinViewport

src/service/resource.js:691–713  ·  view source on GitHub ↗

* @param {number|boolean} viewport derived from renderOutsideViewport. * @return {!Promise} resolves when underlying element is built and within the * viewport range given.

(viewport)

Source from the content-addressed store, hash-verified

689 * viewport range given.
690 */
691 whenWithinViewport(viewport) {
692 // TODO(#30620): remove this method once IntersectionObserver{root:doc} is
693 // polyfilled.
694 devAssert(viewport !== false);
695 // Resolve is already laid out or viewport is true.
696 if (!this.isLayoutPending() || viewport === true) {
697 return Promise.resolve();
698 }
699 // See if pre-existing promise.
700 const viewportNum = dev().assertNumber(viewport);
701 const key = String(viewportNum);
702 if (this.withViewportDeferreds_ && this.withViewportDeferreds_[key]) {
703 return this.withViewportDeferreds_[key].promise;
704 }
705 // See if already within viewport multiplier.
706 if (this.isWithinViewportRatio(viewportNum)) {
707 return Promise.resolve();
708 }
709 // return promise that will trigger when within viewport multiple.
710 this.withViewportDeferreds_ = this.withViewportDeferreds_ || {};
711 this.withViewportDeferreds_[key] = new Deferred();
712 return this.withViewportDeferreds_[key].promise;
713 }
714
715 /** @private resolves promises populated via whenWithinViewport. */
716 resolveDeferredsWhenWithinViewports_() {

Callers 1

test-resource.jsFile · 0.45

Calls 7

isLayoutPendingMethod · 0.95
isWithinViewportRatioMethod · 0.95
devAssertFunction · 0.90
devFunction · 0.90
resolveMethod · 0.80
assertNumberMethod · 0.80
StringFunction · 0.50

Tested by

no test coverage detected