diff --git a/extensions/amp-next-page/1.0/amp-next-page.css b/extensions/amp-next-page/1.0/amp-next-page.css index 51761a0c20cb..62e7f975c622 100644 --- a/extensions/amp-next-page/1.0/amp-next-page.css +++ b/extensions/amp-next-page/1.0/amp-next-page.css @@ -27,6 +27,25 @@ overflow: visible; } +.amp-next-page-default-separator { + position: relative; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + text-align: center; + font-family: 'Roboto', Helvetica, Arial, sans-serif; + font-weight: 400; + font-size: 14px; + width: 160px; + height: 38px; + margin: auto; + border-radius: 32px; + box-shadow: 0px 6px 17px 0px rgba(0, 0, 0, 0.09); + background: black; + color: white; +} + /** Fixes collapsing margins when switching between the visible and hidden states */ .i-amphtml-next-page-document:before, .i-amphtml-next-page-document:after { diff --git a/extensions/amp-next-page/1.0/page.js b/extensions/amp-next-page/1.0/page.js index c70d2a7c0425..1819d75638f9 100644 --- a/extensions/amp-next-page/1.0/page.js +++ b/extensions/amp-next-page/1.0/page.js @@ -53,7 +53,7 @@ export class Page { /** @private {?Element} */ this.container_ = null; /** @private {?Document} */ - this.cachedContent_ = null; + this.content_ = null; /** @private {!PageState} */ this.state_ = PageState.QUEUED; /** @private {!VisibilityState} */ @@ -193,7 +193,7 @@ export class Page { * root has been removed */ resume() { - this.attach_(devAssert(this.cachedContent_)); + this.attach_(); } /** @@ -234,13 +234,14 @@ export class Page { .fetchPageDocument(this) .then(content => { this.state_ = PageState.LOADED; - this.container_ = this.manager_.createDocumentContainerForPage( - this /** page */ - ); + this.content_ = content; + return this.manager_.createDocumentContainerForPage(this /** page */); + }) + .then(container => { + this.container_ = container; // TODO(wassgha): To further optimize, this should ideally // be parsed from the service worker instead of stored in memory - this.cachedContent_ = content; - this.attach_(content); + this.attach_(); }) .catch(() => { this.state_ = PageState.FAILED; @@ -251,12 +252,11 @@ export class Page { /** * Inserts the fetched (or cached) HTML as the document's content - * @param {!Document} content */ - attach_(content) { + attach_() { const shadowDoc = this.manager_.attachDocumentToPage( this /** page */, - content, + /** @type {!Document} */ (devAssert(this.content_)), this.isPaused() /** force */ ); diff --git a/extensions/amp-next-page/1.0/service.js b/extensions/amp-next-page/1.0/service.js index 0603f82deb02..d574eb0ee592 100644 --- a/extensions/amp-next-page/1.0/service.js +++ b/extensions/amp-next-page/1.0/service.js @@ -23,11 +23,13 @@ import { childElementByAttr, childElementsByTag, isJsonScriptTag, + removeChildren, removeElement, scopedQuerySelector, } from '../../../src/dom'; import {dev, devAssert, user, userAssert} from '../../../src/log'; import {escapeCssSelectorIdent} from '../../../src/css'; +import {htmlFor} from '../../../src/static-template'; import {installStylesForDoc} from '../../../src/style-installer'; import { parseFavicon, @@ -77,6 +79,9 @@ export class NextPageService { */ this.mutator_ = Services.mutatorForDoc(ampdoc); + /** @private @const {!../../../src/service/template-impl.Templates} */ + this.templates_ = Services.templatesFor(this.win_); + /** @private {?Element} */ this.separator_ = null; @@ -380,22 +385,26 @@ export class NextPageService { * Create a container element for the document and insert it into * the amp-next-page element * @param {!Page} page - * @return {!Element} + * @return {!Promise} */ createDocumentContainerForPage(page) { const container = this.win_.document.createElement('div'); container.classList.add(DOC_CONTAINER_CLASS); + this.element_.insertBefore(container, dev().assertElement(this.moreBox_)); + + // Insert the separator + const separatorInstance = this.separator_.cloneNode(true); + container.appendChild(separatorInstance); + const separatorRenderPromise = this.maybeRenderSeparatorTemplate_( + separatorInstance, + page + ); + // Insert the document const shadowRoot = this.win_.document.createElement('div'); shadowRoot.classList.add(SHADOW_ROOT_CLASS); container.appendChild(shadowRoot); - // Insert the separator - container.appendChild(this.separator_.cloneNode(true)); - - // Insert the container - this.element_.insertBefore(container, this.moreBox_); - // Observe this page's visibility this.visibilityObserver_.observe( shadowRoot /** element */, @@ -406,7 +415,7 @@ export class NextPageService { } ); - return container; + return separatorRenderPromise.then(() => container); } /** @@ -632,7 +641,10 @@ export class NextPageService { doc.close(); return doc; }) - .catch(e => user().error(TAG, 'failed to fetch %s', page.url, e)); + .catch(e => { + user().error(TAG, 'failed to fetch %s', page.url, e); + throw e; + }); } /** @@ -715,11 +727,17 @@ export class NextPageService { 'be inside a + -
- Read more +
+
Here are a few more articles ... diff --git a/test/manual/amp-next-page/1.0/amp-next-page.script-templated-separator.amp.html b/test/manual/amp-next-page/1.0/amp-next-page.script-templated-separator.amp.html new file mode 100644 index 000000000000..f628ea2265aa --- /dev/null +++ b/test/manual/amp-next-page/1.0/amp-next-page.script-templated-separator.amp.html @@ -0,0 +1,312 @@ + + + + + AMP next page examples + + + + + + + + + + + + +
+

Host page

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vitae + libero porta nulla iaculis viverra. Vestibulum consectetur scelerisque + varius. Nam pulvinar dui a tortor hendrerit, id iaculis elit auctor. Nam + dapibus felis in gravida ornare. Nulla varius id mauris sed venenatis. Sed + turpis ex, aliquet nec fermentum eget, sollicitudin non est. Suspendisse + tincidunt ornare tortor, at vehicula orci aliquam a. Aliquam eleifend odio + quis quam dignissim posuere. Proin ac dolor rhoncus, consectetur ipsum + non, dictum est. Nam sollicitudin est eu est aliquet eleifend. Duis + condimentum, nisl eu finibus auctor, lectus odio fringilla nisi, quis + cursus libero magna imperdiet purus. In condimentum vehicula est, nec + varius est suscipit vitae. Maecenas ut sapien diam. Vivamus viverra nisl + at quam pellentesque posuere. Cras ut nibh non arcu dignissim elementum. +

+

+ Vestibulum a nisi est. Fusce consequat iaculis vehicula. Aliquam luctus + nunc risus, ut congue augue tristique nec. In venenatis aliquam tristique. + Integer eleifend diam vel nunc porttitor sollicitudin. Aliquam quis + ullamcorper tortor. Morbi et dui vitae elit finibus sodales. Donec + pharetra tincidunt neque, eget sagittis nisi sodales vel. Duis elit massa, + malesuada a rhoncus sed, bibendum nec velit. Duis iaculis magna suscipit + felis fermentum accumsan. Nunc venenatis pellentesque magna at tincidunt. + Mauris nec placerat augue, eu auctor elit. Class aptent taciti sociosqu ad + litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum + pretium ligula diam, a eleifend lectus porttitor non. Integer vitae tempus + enim, non pellentesque sem. Nam non sem lacinia, lacinia nisi non, + consectetur enim. +

+

+ Maecenas sed quam nec dolor rhoncus rutrum ut non mauris. Pellentesque + ante dolor, pretium quis enim eu, condimentum volutpat augue. Donec nulla + nisl, ullamcorper et hendrerit vel, sagittis sit amet ex. Mauris a enim in + sem feugiat mollis in eu lorem. Quisque finibus a diam ut facilisis. Sed + ultricies massa ut urna dapibus semper. Integer id nunc dictum, luctus + ligula eu, bibendum ex. Etiam tincidunt sapien ut lorem pharetra feugiat. + Aliquam erat volutpat. Sed vehicula tincidunt mauris, vitae cursus nisl. + Nulla imperdiet ex at venenatis dignissim. +

+

+ Sed pretium sed ex eu varius. Praesent sapien purus, tincidunt at dolor + ac, porttitor fermentum enim. Morbi rhoncus quam eu lorem ultrices, vitae + tempor felis volutpat. Suspendisse auctor, quam quis suscipit dictum, + felis lectus imperdiet velit, a faucibus quam diam et risus. Etiam varius + in arcu sed cursus. Praesent pulvinar enim nibh, eu euismod ante pretium + et. Pellentesque nec vestibulum eros. Praesent nec venenatis ipsum. Duis + pharetra suscipit mauris quis dictum. Pellentesque sed porttitor tellus. + Aenean rutrum blandit est in tincidunt. Nulla ante orci, pellentesque id + imperdiet at, posuere quis dui. Cras fringilla lobortis lectus. Mauris + vitae convallis orci. Mauris sodales faucibus nulla vitae posuere. +

+

+ Donec vehicula nisi eget metus blandit, at semper nunc porttitor. + Vestibulum sit amet posuere risus, at mattis nibh. Maecenas ultricies + scelerisque nibh et feugiat. Praesent mattis, nibh viverra consequat + rhoncus, turpis leo venenatis orci, vitae mollis libero magna eget massa. + In dapibus, metus sit amet venenatis finibus, lacus metus rhoncus massa, + sit amet mattis tortor massa vitae nunc. Mauris a enim sagittis, + condimentum tortor vitae, egestas nulla. Ut dictum laoreet sapien non + blandit. Etiam fermentum, magna et tincidunt maximus, ex orci sollicitudin + felis, ut dapibus orci ipsum quis leo. Nam accumsan tortor sit amet orci + gravida, eget dapibus metus dapibus. Fusce congue ultrices dignissim. Duis + quis metus in mi pharetra tempus. Etiam dapibus tellus vitae blandit + rhoncus. Fusce commodo risus id sapien ultrices vehicula. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vitae + libero porta nulla iaculis viverra. Vestibulum consectetur scelerisque + varius. Nam pulvinar dui a tortor hendrerit, id iaculis elit auctor. Nam + dapibus felis in gravida ornare. Nulla varius id mauris sed venenatis. Sed + turpis ex, aliquet nec fermentum eget, sollicitudin non est. Suspendisse + tincidunt ornare tortor, at vehicula orci aliquam a. Aliquam eleifend odio + quis quam dignissim posuere. Proin ac dolor rhoncus, consectetur ipsum + non, dictum est. Nam sollicitudin est eu est aliquet eleifend. Duis + condimentum, nisl eu finibus auctor, lectus odio fringilla nisi, quis + cursus libero magna imperdiet purus. In condimentum vehicula est, nec + varius est suscipit vitae. Maecenas ut sapien diam. Vivamus viverra nisl + at quam pellentesque posuere. Cras ut nibh non arcu dignissim elementum. +

+

+ Vestibulum a nisi est. Fusce consequat iaculis vehicula. Aliquam luctus + nunc risus, ut congue augue tristique nec. In venenatis aliquam tristique. + Integer eleifend diam vel nunc porttitor sollicitudin. Aliquam quis + ullamcorper tortor. Morbi et dui vitae elit finibus sodales. Donec + pharetra tincidunt neque, eget sagittis nisi sodales vel. Duis elit massa, + malesuada a rhoncus sed, bibendum nec velit. Duis iaculis magna suscipit + felis fermentum accumsan. Nunc venenatis pellentesque magna at tincidunt. + Mauris nec placerat augue, eu auctor elit. Class aptent taciti sociosqu ad + litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum + pretium ligula diam, a eleifend lectus porttitor non. Integer vitae tempus + enim, non pellentesque sem. Nam non sem lacinia, lacinia nisi non, + consectetur enim. +

+

+ Maecenas sed quam nec dolor rhoncus rutrum ut non mauris. Pellentesque + ante dolor, pretium quis enim eu, condimentum volutpat augue. Donec nulla + nisl, ullamcorper et hendrerit vel, sagittis sit amet ex. Mauris a enim in + sem feugiat mollis in eu lorem. Quisque finibus a diam ut facilisis. Sed + ultricies massa ut urna dapibus semper. Integer id nunc dictum, luctus + ligula eu, bibendum ex. Etiam tincidunt sapien ut lorem pharetra feugiat. + Aliquam erat volutpat. Sed vehicula tincidunt mauris, vitae cursus nisl. + Nulla imperdiet ex at venenatis dignissim. +

+

+ Sed pretium sed ex eu varius. Praesent sapien purus, tincidunt at dolor + ac, porttitor fermentum enim. Morbi rhoncus quam eu lorem ultrices, vitae + tempor felis volutpat. Suspendisse auctor, quam quis suscipit dictum, + felis lectus imperdiet velit, a faucibus quam diam et risus. Etiam varius + in arcu sed cursus. Praesent pulvinar enim nibh, eu euismod ante pretium + et. Pellentesque nec vestibulum eros. Praesent nec venenatis ipsum. Duis + pharetra suscipit mauris quis dictum. Pellentesque sed porttitor tellus. + Aenean rutrum blandit est in tincidunt. Nulla ante orci, pellentesque id + imperdiet at, posuere quis dui. Cras fringilla lobortis lectus. Mauris + vitae convallis orci. Mauris sodales faucibus nulla vitae posuere. +

+

+ Donec vehicula nisi eget metus blandit, at semper nunc porttitor. + Vestibulum sit amet posuere risus, at mattis nibh. Maecenas ultricies + scelerisque nibh et feugiat. Praesent mattis, nibh viverra consequat + rhoncus, turpis leo venenatis orci, vitae mollis libero magna eget massa. + In dapibus, metus sit amet venenatis finibus, lacus metus rhoncus massa, + sit amet mattis tortor massa vitae nunc. Mauris a enim sagittis, + condimentum tortor vitae, egestas nulla. Ut dictum laoreet sapien non + blandit. Etiam fermentum, magna et tincidunt maximus, ex orci sollicitudin + felis, ut dapibus orci ipsum quis leo. Nam accumsan tortor sit amet orci + gravida, eget dapibus metus dapibus. Fusce congue ultrices dignissim. Duis + quis metus in mi pharetra tempus. Etiam dapibus tellus vitae blandit + rhoncus. Fusce commodo risus id sapien ultrices vehicula. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vitae + libero porta nulla iaculis viverra. Vestibulum consectetur scelerisque + varius. Nam pulvinar dui a tortor hendrerit, id iaculis elit auctor. Nam + dapibus felis in gravida ornare. Nulla varius id mauris sed venenatis. Sed + turpis ex, aliquet nec fermentum eget, sollicitudin non est. Suspendisse + tincidunt ornare tortor, at vehicula orci aliquam a. Aliquam eleifend odio + quis quam dignissim posuere. Proin ac dolor rhoncus, consectetur ipsum + non, dictum est. Nam sollicitudin est eu est aliquet eleifend. Duis + condimentum, nisl eu finibus auctor, lectus odio fringilla nisi, quis + cursus libero magna imperdiet purus. In condimentum vehicula est, nec + varius est suscipit vitae. Maecenas ut sapien diam. Vivamus viverra nisl + at quam pellentesque posuere. Cras ut nibh non arcu dignissim elementum. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vitae + libero porta nulla iaculis viverra. Vestibulum consectetur scelerisque + varius. Nam pulvinar dui a tortor hendrerit, id iaculis elit auctor. Nam + dapibus felis in gravida ornare. Nulla varius id mauris sed venenatis. Sed + turpis ex, aliquet nec fermentum eget, sollicitudin non est. Suspendisse + tincidunt ornare tortor, at vehicula orci aliquam a. Aliquam eleifend odio + quis quam dignissim posuere. Proin ac dolor rhoncus, consectetur ipsum + non, dictum est. Nam sollicitudin est eu est aliquet eleifend. Duis + condimentum, nisl eu finibus auctor, lectus odio fringilla nisi, quis + cursus libero magna imperdiet purus. In condimentum vehicula est, nec + varius est suscipit vitae. Maecenas ut sapien diam. Vivamus viverra nisl + at quam pellentesque posuere. Cras ut nibh non arcu dignissim elementum. +

+

+ Vestibulum a nisi est. Fusce consequat iaculis vehicula. Aliquam luctus + nunc risus, ut congue augue tristique nec. In venenatis aliquam tristique. + Integer eleifend diam vel nunc porttitor sollicitudin. Aliquam quis + ullamcorper tortor. Morbi et dui vitae elit finibus sodales. Donec + pharetra tincidunt neque, eget sagittis nisi sodales vel. Duis elit massa, + malesuada a rhoncus sed, bibendum nec velit. Duis iaculis magna suscipit + felis fermentum accumsan. Nunc venenatis pellentesque magna at tincidunt. + Mauris nec placerat augue, eu auctor elit. Class aptent taciti sociosqu ad + litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum + pretium ligula diam, a eleifend lectus porttitor non. Integer vitae tempus + enim, non pellentesque sem. Nam non sem lacinia, lacinia nisi non, + consectetur enim. +

+

+ Maecenas sed quam nec dolor rhoncus rutrum ut non mauris. Pellentesque + ante dolor, pretium quis enim eu, condimentum volutpat augue. Donec nulla + nisl, ullamcorper et hendrerit vel, sagittis sit amet ex. Mauris a enim in + sem feugiat mollis in eu lorem. Quisque finibus a diam ut facilisis. Sed + ultricies massa ut urna dapibus semper. Integer id nunc dictum, luctus + ligula eu, bibendum ex. Etiam tincidunt sapien ut lorem pharetra feugiat. + Aliquam erat volutpat. Sed vehicula tincidunt mauris, vitae cursus nisl. + Nulla imperdiet ex at venenatis dignissim. +

+

+ Sed pretium sed ex eu varius. Praesent sapien purus, tincidunt at dolor + ac, porttitor fermentum enim. Morbi rhoncus quam eu lorem ultrices, vitae + tempor felis volutpat. Suspendisse auctor, quam quis suscipit dictum, + felis lectus imperdiet velit, a faucibus quam diam et risus. Etiam varius + in arcu sed cursus. Praesent pulvinar enim nibh, eu euismod ante pretium + et. Pellentesque nec vestibulum eros. Praesent nec venenatis ipsum. Duis + pharetra suscipit mauris quis dictum. Pellentesque sed porttitor tellus. + Aenean rutrum blandit est in tincidunt. Nulla ante orci, pellentesque id + imperdiet at, posuere quis dui. Cras fringilla lobortis lectus. Mauris + vitae convallis orci. Mauris sodales faucibus nulla vitae posuere. +

+

+ Donec vehicula nisi eget metus blandit, at semper nunc porttitor. + Vestibulum sit amet posuere risus, at mattis nibh. Maecenas ultricies + scelerisque nibh et feugiat. Praesent mattis, nibh viverra consequat + rhoncus, turpis leo venenatis orci, vitae mollis libero magna eget massa. + In dapibus, metus sit amet venenatis finibus, lacus metus rhoncus massa, + sit amet mattis tortor massa vitae nunc. Mauris a enim sagittis, + condimentum tortor vitae, egestas nulla. Ut dictum laoreet sapien non + blandit. Etiam fermentum, magna et tincidunt maximus, ex orci sollicitudin + felis, ut dapibus orci ipsum quis leo. Nam accumsan tortor sit amet orci + gravida, eget dapibus metus dapibus. Fusce congue ultrices dignissim. Duis + quis metus in mi pharetra tempus. Etiam dapibus tellus vitae blandit + rhoncus. Fusce commodo risus id sapien ultrices vehicula. +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean vitae + libero porta nulla iaculis viverra. Vestibulum consectetur scelerisque + varius. Nam pulvinar dui a tortor hendrerit, id iaculis elit auctor. Nam + dapibus felis in gravida ornare. Nulla varius id mauris sed venenatis. Sed + turpis ex, aliquet nec fermentum eget, sollicitudin non est. Suspendisse + tincidunt ornare tortor, at vehicula orci aliquam a. Aliquam eleifend odio + quis quam dignissim posuere. Proin ac dolor rhoncus, consectetur ipsum + non, dictum est. Nam sollicitudin est eu est aliquet eleifend. Duis + condimentum, nisl eu finibus auctor, lectus odio fringilla nisi, quis + cursus libero magna imperdiet purus. In condimentum vehicula est, nec + varius est suscipit vitae. Maecenas ut sapien diam. Vivamus viverra nisl + at quam pellentesque posuere. Cras ut nibh non arcu dignissim elementum. +

+

+ Donec vehicula nisi eget metus blandit, at semper nunc porttitor. + Vestibulum sit amet posuere risus, at mattis nibh. Maecenas ultricies + scelerisque nibh et feugiat. Praesent mattis, nibh viverra consequat + rhoncus, turpis leo venenatis orci, vitae mollis libero magna eget massa. + In dapibus, metus sit amet venenatis finibus, lacus metus rhoncus massa, + sit amet mattis tortor massa vitae nunc. Mauris a enim sagittis, + condimentum tortor vitae, egestas nulla. Ut dictum laoreet sapien non + blandit. Etiam fermentum, magna et tincidunt maximus, ex orci sollicitudin + felis, ut dapibus orci ipsum quis leo. Nam accumsan tortor sit amet orci + gravida, eget dapibus metus dapibus. Fusce congue ultrices dignissim. Duis + quis metus in mi pharetra tempus. Etiam dapibus tellus vitae blandit + rhoncus. Fusce commodo risus id sapien ultrices vehicula. +

+
+ + + +
+ +
+
+ Here are a few more articles ... +
+
+ +