├── .babelrc ├── .eslintrc ├── .github ├── ISSUE_TEMPLATE.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ └── semgrep.yml ├── .gitignore ├── .travis.yml ├── 3p ├── 3p.js ├── README.md ├── ampcontext-integration.js ├── ampcontext-lib.js ├── ampcontext.js ├── environment.js ├── facebook.js ├── frame-metadata.js ├── frame.max.html ├── github.js ├── iframe-messaging-client.js ├── iframe-transport-client-lib.js ├── iframe-transport-client.js ├── integration.js ├── messaging.js ├── nameframe.max.html ├── polyfills.js ├── reddit.js ├── remote.html └── twitter.js ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── GOVERNANCE.md ├── LICENSE ├── OWNERS.yaml ├── Procfile ├── README.md ├── SUPPORT.md ├── ads ├── OWNERS.yaml ├── README.md ├── _a4a-config.js ├── _config.js ├── _integration-guide.md ├── _ping_.js ├── a8.js ├── a8.md ├── a9.js ├── a9.md ├── accesstrade.js ├── accesstrade.md ├── adblade.js ├── adblade.md ├── adbutler.js ├── adbutler.md ├── adform.js ├── adform.md ├── adfox.js ├── adfox.md ├── adgeneration.js ├── adgeneration.md ├── adhese.js ├── adhese.md ├── adition.js ├── adition.md ├── adman.js ├── adman.md ├── admanmedia.js ├── admanmedia.md ├── adocean.js ├── adocean.md ├── adreactor.js ├── adreactor.md ├── ads.extern.js ├── adsnative.js ├── adsnative.md ├── adspeed.js ├── adspeed.md ├── adspirit.js ├── adspirit.md ├── adstir.js ├── adstir.md ├── adtech.js ├── adtech.md ├── adthrive.js ├── adthrive.md ├── aduptech.js ├── aduptech.md ├── adverline.js ├── adverline.md ├── adverticum.js ├── adverticum.md ├── advertserve.js ├── advertserve.md ├── affiliateb.js ├── affiliateb.md ├── alp │ ├── handler.js │ └── install-alp.js ├── amoad.js ├── amoad.md ├── appnexus.js ├── appnexus.md ├── atomx.js ├── atomx.md ├── bidtellect.js ├── bidtellect.md ├── brainy.js ├── brainy.md ├── bringhub.js ├── bringhub.md ├── caajainfeed.js ├── caajainfeed.md ├── capirs.js ├── capirs.md ├── caprofitx.js ├── caprofitx.md ├── chargeads.js ├── chargeads.md ├── colombia.js ├── colombia.md ├── contentad.js ├── contentad.md ├── criteo.js ├── criteo.md ├── custom.md ├── dable.js ├── dable.md ├── dianomi.md ├── directadvert.js ├── directadvert.md ├── distroscale.js ├── distroscale.md ├── dotandads.js ├── dotandads.md ├── eas.js ├── eas.md ├── engageya.js ├── engageya.md ├── eplanning.js ├── eplanning.md ├── ezoic.js ├── ezoic.md ├── f1e.js ├── f1e.md ├── f1h.js ├── f1h.md ├── felmat.js ├── felmat.md ├── flite.js ├── flite.md ├── fluct.js ├── fluct.md ├── fusion.js ├── fusion.md ├── genieessp.js ├── genieessp.md ├── gmossp.js ├── gmossp.md ├── google │ ├── OWNERS.yaml │ ├── a4a │ │ ├── docs │ │ │ ├── 1.png │ │ │ ├── 2.png │ │ │ ├── Network-Impl-Guide.md │ │ │ ├── RTBExchangeGuide.md │ │ │ └── a4a-readme.md │ │ ├── google-data-reporter.js │ │ ├── line-delimited-response-handler.js │ │ ├── performance.js │ │ ├── test │ │ │ ├── test-google-ads-a4a-config.js │ │ │ ├── test-google-data-reporter.js │ │ │ ├── test-line-delimited-response-handler.js │ │ │ ├── test-performance.js │ │ │ ├── test-traffic-experiments.js │ │ │ └── test-utils.js │ │ ├── traffic-experiments.js │ │ ├── url-builder.js │ │ └── utils.js │ ├── adsense-amp-auto-ads.js │ ├── adsense.js │ ├── adsense.md │ ├── correlator.js │ ├── csa.js │ ├── csa.md │ ├── doubleclick.js │ ├── doubleclick.md │ ├── imaVideo.js │ ├── test │ │ ├── test-adsense-amp-auto-ads.js │ │ ├── test-adsense.js │ │ ├── test-doubleclick.js │ │ └── test-utils.js │ └── utils.js ├── gumgum.js ├── gumgum.md ├── holder.js ├── holder.md ├── ibillboard.js ├── ibillboard.md ├── imedia.js ├── imedia.md ├── imobile.js ├── imobile.md ├── improvedigital.js ├── improvedigital.md ├── inabox │ ├── frame-overlay-helper.js │ ├── frame-overlay-manager.js │ ├── inabox-host.js │ ├── inabox-host.md │ ├── inabox-messaging-host.js │ ├── position-observer.js │ └── util.js ├── industrybrains.md ├── inmobi.js ├── inmobi.md ├── innity.js ├── innity.md ├── ix.js ├── ix.md ├── kargo.js ├── kargo.md ├── kiosked.js ├── kiosked.md ├── kixer.js ├── kixer.md ├── ligatus.js ├── ligatus.md ├── loka.js ├── loka.md ├── mads.js ├── mads.md ├── mantis.js ├── mantis.md ├── mediaimpact.js ├── mediaimpact.md ├── medianet.js ├── medianet.md ├── mediavine.js ├── mediavine.md ├── meg.js ├── meg.md ├── microad.js ├── microad.md ├── mixpo.js ├── mixpo.md ├── mywidget.js ├── mywidget.md ├── nativo.js ├── nativo.md ├── navegg.js ├── navegg.md ├── nend.js ├── nend.md ├── netletix.js ├── netletix.md ├── nokta.js ├── nokta.md ├── openadstream.js ├── openadstream.md ├── openx.js ├── openx.md ├── outbrain.js ├── outbrain.md ├── plista.js ├── plista.md ├── polymorphicads.js ├── polymorphicads.md ├── popin.js ├── popin.md ├── pubmatic.js ├── pubmatic.md ├── pubmine.js ├── pubmine.md ├── pulsepoint.js ├── pulsepoint.md ├── purch.js ├── purch.md ├── relap.js ├── relap.md ├── revcontent.js ├── revcontent.md ├── rubicon.js ├── rubicon.md ├── sharethrough.js ├── sharethrough.md ├── sklik.js ├── sklik.md ├── slimcutmedia.js ├── slimcutmedia.md ├── smartadserver.js ├── smartadserver.md ├── smartclip.js ├── smartclip.md ├── sogouad.js ├── sogouad.md ├── sortable.js ├── sortable.md ├── sovrn.js ├── sovrn.md ├── spotx.js ├── spotx.md ├── sunmedia.js ├── sunmedia.md ├── swoop.js ├── swoop.md ├── taboola.js ├── taboola.md ├── teads.js ├── teads.md ├── triplelift.js ├── triplelift.md ├── valuecommerce.js ├── valuecommerce.md ├── vmfive.js ├── vmfive.md ├── webediads.js ├── webediads.md ├── weborama.js ├── weborama.md ├── widespace.js ├── widespace.md ├── xlift.js ├── xlift.md ├── yahoo.js ├── yahoo.md ├── yahoojp.js ├── yahoojp.md ├── yandex.js ├── yandex.md ├── yieldbot.js ├── yieldbot.md ├── yieldmo.js ├── yieldmo.md ├── yieldone.js ├── yieldone.md ├── zedo.js ├── zedo.md ├── zergnet.js ├── zergnet.md ├── zucks.js └── zucks.md ├── build-system ├── OWNERS.yaml ├── SERVING.md ├── amp.extern.js ├── amp.nti.extern.js ├── amp.oti.extern.js ├── amp4test.js ├── app.js ├── config.js ├── conformance-config.textproto ├── dep-check-config.js ├── eslint-rules │ ├── dict-string-keys.js │ ├── enforce-private-props.js │ ├── no-array-destructuring.js │ ├── no-es2015-number-props.js │ ├── no-export-side-effect.js │ ├── no-for-of-statement.js │ ├── no-global.js │ ├── no-spread.js │ └── todo-format.js ├── exec.js ├── global-configs │ ├── README.md │ ├── canary-config.json │ ├── prod-config.json │ └── sw-config.json ├── internal-version.js ├── pr-check.js ├── release.sh ├── runner │ ├── .classpath │ ├── .project │ ├── build.xml │ ├── dist │ │ └── runner.jar │ ├── lib │ │ └── jar-in-jar-loader.zip │ ├── runner.iml │ ├── src │ │ └── org │ │ │ └── ampproject │ │ │ ├── AmpCodingConvention.java │ │ │ ├── AmpCommandLineRunner.java │ │ │ └── AmpPass.java │ └── test │ │ └── org │ │ └── ampproject │ │ ├── AmpPassTest.java │ │ └── AmpPassTestEnvTest.java ├── server-a4a-template.html ├── server-inabox-template.html ├── server.js ├── tasks │ ├── ava.js │ ├── babel-helpers.js │ ├── changelog.js │ ├── check-links.js │ ├── clean.js │ ├── compile-access-expr.js │ ├── compile-bind-expr.js │ ├── compile-css-expr.js │ ├── compile.js │ ├── csvify-size │ │ ├── index.js │ │ └── test.js │ ├── dep-check.js │ ├── extension-generator │ │ └── index.js │ ├── gen-codeowners │ │ ├── index.js │ │ └── test.js │ ├── get-zindex │ │ ├── index.js │ │ ├── test-2.css │ │ ├── test.css │ │ └── test.js │ ├── index.js │ ├── js-license.txt │ ├── jsify-css.js │ ├── json-check.js │ ├── karma.conf.js │ ├── lint.js │ ├── make-golden.js │ ├── package.json │ ├── prepend-global │ │ ├── index.js │ │ └── test.js │ ├── presubmit-checks.js │ ├── release-tagging.js │ ├── runtime-test.js │ ├── serve.js │ ├── size.js │ ├── todos.js │ ├── validator.js │ ├── visual-diff.js │ └── visual-diff.rb └── test-server.js ├── builtins ├── README.md ├── amp-img.js ├── amp-img.md ├── amp-pixel.js └── amp-pixel.md ├── caches.json ├── contributing ├── DESIGN_PRINCIPLES.md ├── DEVELOPING.md ├── OWNERS.yaml ├── building-an-amp-extension.md ├── component-validator-rules.md ├── creating-a-welcoming-community.md ├── creating-great-first-issues.md ├── design-reviews.md ├── getting-started-e2e.md ├── getting-started-quick.md ├── git_helpers.sh ├── great-first-issues-template.md ├── issue-priorities.md ├── owners-and-committers.md ├── release-schedule.md ├── working-groups.md └── writing-css.md ├── css ├── OWNERS.yaml ├── Z_INDEX.md └── amp.css ├── examples ├── 3q-player.amp.html ├── OWNERS.yaml ├── a4a-multisize.amp.html ├── a4a.amp.html ├── ac-creative.js ├── ad-lightbox.amp.html ├── ads-legacy.amp.html ├── ads.amp.html ├── adsense.amp.html ├── alp.amp.html ├── alp │ └── creative.html ├── amp-ad-exit.amp.html ├── amp-compare-slider.amp.html ├── amp-fresh.amp.html ├── amp-gist.amp.html ├── amp-imgur.amp.html ├── amp-position-observer.amp.html ├── amp-timeago.amp.html ├── amp-video.amp.html ├── amp-web-push.amp.html ├── amp-youtube.amp.html ├── ampcontext-creative-json.html ├── ampcontext-creative.html ├── analytics-error-reporting.amp.html ├── analytics-iframe-transport-remote-frame.html ├── analytics-iframe-transport.amp.html ├── analytics-notification.amp.html ├── analytics-vendors.amp.html ├── analytics.amp.html ├── analytics.config.json ├── animations.amp.html ├── apester-media.amp.html ├── article-access-laterpay.amp.html ├── article-access.amp.html ├── article-fixed-header.amp.html ├── article-parallax.amp.html ├── article-super-short.amp.html ├── article.amp.html ├── auto-ads.amp.html ├── autosuggest.amp.html ├── av │ ├── ForBiggerJoyrides.mp4 │ └── audio.mp3 ├── bind │ ├── basic.amp.html │ ├── carousels.amp.html │ ├── ecommerce.amp.html │ ├── errors.amp.html │ ├── forms.amp.html │ ├── game.amp.html │ ├── iframe.amp.html │ ├── img │ │ ├── ic_menu_white_24dp_1x.png │ │ ├── ic_menu_white_24dp_2x.png │ │ ├── ic_search_white_24dp_1x.png │ │ └── ic_search_white_24dp_2x.png │ ├── list.amp.html │ ├── live-list.amp.html │ ├── performance.amp.html │ ├── sandbox.amp.html │ ├── shirts │ │ ├── black.jpg │ │ ├── blue.jpg │ │ ├── brown.jpg │ │ ├── dark-green.jpg │ │ ├── gray.jpg │ │ ├── light-gray.jpg │ │ ├── navy.jpg │ │ ├── swatch │ │ │ ├── black.jpg │ │ │ ├── blue.jpg │ │ │ ├── brown.jpg │ │ │ ├── dark-green.jpg │ │ │ ├── gray.jpg │ │ │ ├── light-gray.jpg │ │ │ ├── navy.jpg │ │ │ └── wine.jpg │ │ └── wine.jpg │ ├── turing.amp.html │ ├── video.amp.html │ └── xhr.amp.html ├── brid-player.amp.html ├── brightcove.amp.html ├── carousel.amp.html ├── csa.amp.html ├── csp.amp.html ├── custom.ad.example.json ├── custom.ad.example.single.json ├── dailymotion.amp.html ├── doubleclick-multisize.amp.html ├── doubleclick-rtc.amp.html ├── everything.amp.html ├── experiment.amp.html ├── facebook.amp.html ├── fake-ad.amp.html ├── font.amp.html ├── fonts │ ├── ComicAMP.ttf │ └── ComicAMPBold.ttf ├── forms.amp.html ├── gfycat.amp.html ├── ima-video.amp.html ├── img │ ├── ampicon.png │ ├── analytics.gif │ ├── bigbuckbunny.jpg │ ├── cats-anim-placeholder.gif │ ├── cats-anim.gif │ ├── clock.jpg │ ├── hero@1x.jpg │ ├── hero@2x.jpg │ ├── ima-poster.png │ ├── sample.jpg │ ├── sea@1x.jpg │ ├── sea@2x.jpg │ └── x-icon.png ├── inabox-more.amp.html ├── inabox-tag-integration.js ├── inabox.amp.html ├── inabox.gpt.html ├── inabox.host.html ├── instagram.amp.html ├── izlesene.amp.html ├── jwplayer.amp.html ├── kaltura.amp.html ├── layout-flex-item.amp.html ├── live-blog-non-floating-button.amp.html ├── live-blog.amp.html ├── live-list-update.amp.html ├── live-list.amp.html ├── loads-windowcontext-creative-https.html ├── loads-windowcontext-creative.html ├── medium-manifest.json ├── metadata-examples │ ├── README.md │ ├── article-json-ld-twitter-card.amp.html │ ├── article-json-ld.amp.html │ ├── article-microdata.amp.html │ ├── recipe-json-ld.amp.html │ ├── recipe-microdata.amp.html │ ├── review-json-ld.amp.html │ ├── review-microdata.amp.html │ ├── sports-article-json-ld.amp.html │ ├── video-json-ld.amp.html │ └── video-microdata.amp.html ├── multiple-docs.html ├── nexxtv-player.amp.html ├── o2player.amp.html ├── old-boilerplate.amp.html ├── ooyalaplayer.amp.html ├── openx.amp.html ├── pinterest.amp.html ├── playbuzz.amp.html ├── pwa │ ├── pwa-ampdoc-shell.html │ ├── pwa-sw.js │ ├── pwa.html │ └── pwa.js ├── reach-player.amp.html ├── reddit.amp.html ├── refresh.amp.html ├── released.amp.html ├── responsive.amp.html ├── share-tracking-with-url.amp.html ├── share-tracking.amp.html ├── social-share.amp.html ├── soundcloud.amp.html ├── springboard-player.amp.html ├── standard-actions.amp.html ├── sticky.ads.0.1.amp.html ├── sticky.ads.amp.html ├── twitter.amp.html ├── user-notification.amp.html ├── vega-data │ ├── bar.json │ ├── map.json │ ├── miserables.json │ ├── nodes.json │ ├── unemployment.tsv │ ├── us-10m.json │ └── world-110m.json ├── viewer-cid.amp.html ├── viewer-iframe-poll.html ├── viewer-webview.html ├── viewer.html ├── vimeo.amp.html ├── vine.amp.html ├── visual-tests │ ├── amp-by-example │ │ ├── amp-by-example.html │ │ └── amp_by_example_logo.svg │ ├── article-access.amp │ │ ├── article-access.amp.html │ │ └── img │ │ │ ├── hero@1x.jpg │ │ │ ├── hero@2x.jpg │ │ │ ├── sample.jpg │ │ │ ├── sea@1x.jpg │ │ │ └── sea@2x.jpg │ ├── article.amp │ │ ├── article.amp.html │ │ └── img │ │ │ ├── hero@1x.jpg │ │ │ ├── hero@2x.jpg │ │ │ ├── sample.jpg │ │ │ ├── sea@1x.jpg │ │ │ └── sea@2x.jpg │ ├── blank-page │ │ └── .gitkeep │ ├── font.amp.404 │ │ └── font.amp.html │ └── font.amp │ │ ├── font.amp.html │ │ └── fonts │ │ ├── ComicAMP.ttf │ │ └── ComicAMPBold.ttf ├── viz-vega.amp.html ├── vrview.amp.html └── youtube.amp.html ├── extensions ├── README.md ├── amp-3q-player │ ├── 0.1 │ │ ├── amp-3q-player.js │ │ └── test │ │ │ ├── test-amp-3q-player.js │ │ │ ├── validator-amp-3q-player.html │ │ │ └── validator-amp-3q-player.out │ ├── amp-3q-player.md │ └── validator-amp-3q-player.protoascii ├── amp-a4a │ ├── 0.1 │ │ ├── a4a-variable-source.js │ │ ├── amp-a4a.js │ │ ├── legacy-signature-verifier.js │ │ ├── refresh-manager.js │ │ ├── signature-verifier.js │ │ └── test │ │ │ ├── fetch-mock.js │ │ │ ├── test-a4a-crypto.js │ │ │ ├── test-a4a-integration.js │ │ │ ├── test-a4a-var-source.js │ │ │ ├── test-amp-a4a.js │ │ │ ├── test-legacy-signature-verifier.js │ │ │ ├── test-refresh-manager.js │ │ │ ├── test-signature-verifier.js │ │ │ ├── testdata │ │ │ ├── .eslintrc │ │ │ ├── test_fragments.js │ │ │ ├── valid_css_at_rules_amp.original.html │ │ │ └── valid_css_at_rules_amp.reserialized.js │ │ │ └── utils.js │ ├── OWNERS.yaml │ ├── amp-a4a-format.md │ └── amp-a4a-internal.md ├── amp-access-laterpay │ ├── 0.1 │ │ ├── amp-access-laterpay.css │ │ ├── amp-access-laterpay.js │ │ ├── laterpay-impl.js │ │ └── test │ │ │ ├── test-amp-access-laterpay.js │ │ │ ├── validator-amp-access-laterpay.html │ │ │ └── validator-amp-access-laterpay.out │ ├── OWNERS.yaml │ ├── amp-access-laterpay.md │ └── validator-amp-access-laterpay.protoascii ├── amp-access │ ├── 0.1 │ │ ├── access-expr-impl.jison │ │ ├── access-expr-impl.js │ │ ├── access-expr-impl.md │ │ ├── access-expr.js │ │ ├── access-vendor.js │ │ ├── amp-access-client.js │ │ ├── amp-access-other.js │ │ ├── amp-access-server-jwt.js │ │ ├── amp-access-server.js │ │ ├── amp-access-vendor.js │ │ ├── amp-access.css │ │ ├── amp-access.js │ │ ├── amp-login-done-dialog.js │ │ ├── amp-login-done.html │ │ ├── amp-login-done.js │ │ ├── jwt.js │ │ ├── login-dialog.js │ │ ├── signin.js │ │ └── test │ │ │ ├── test-access-expr.js │ │ │ ├── test-amp-access-client.js │ │ │ ├── test-amp-access-other.js │ │ │ ├── test-amp-access-server-jwt.js │ │ │ ├── test-amp-access-server.js │ │ │ ├── test-amp-access-vendor.js │ │ │ ├── test-amp-access.js │ │ │ ├── test-amp-login-done-dialog.js │ │ │ ├── test-jwt.js │ │ │ ├── test-login-dialog.js │ │ │ ├── test-signin.js │ │ │ ├── validator-amp-access.html │ │ │ └── validator-amp-access.out │ ├── OWNERS.yaml │ ├── amp-access-analytics.md │ ├── amp-access.md │ └── validator-amp-access.protoascii ├── amp-accordion │ ├── 0.1 │ │ ├── amp-accordion.js │ │ └── test │ │ │ ├── test-amp-accordion.js │ │ │ ├── validator-amp-accordion.html │ │ │ └── validator-amp-accordion.out │ ├── OWNERS.yaml │ ├── amp-accordion.md │ └── validator-amp-accordion.protoascii ├── amp-ad-exit │ ├── 0.1 │ │ ├── amp-ad-exit.js │ │ ├── config.js │ │ ├── filters │ │ │ ├── click-delay.js │ │ │ ├── click-location.js │ │ │ ├── factory.js │ │ │ └── filter.js │ │ └── test │ │ │ └── test-amp-ad-exit.js │ ├── amp-ad-exit.md │ └── validator-amp-ad-exit.protoascii ├── amp-ad-network-adsense-impl │ ├── 0.1 │ │ ├── adsense-a4a-config.js │ │ ├── adsense-shared-state.js │ │ ├── amp-ad-network-adsense-impl.js │ │ └── test │ │ │ ├── test-adsense-a4a-config.js │ │ │ └── test-amp-ad-network-adsense-impl.js │ ├── OWNERS.yaml │ └── amp-ad-network-adsense-impl-internal.md ├── amp-ad-network-cloudflare-impl │ ├── 0.1 │ │ ├── amp-ad-network-cloudflare-impl.js │ │ ├── cloudflare-a4a-config.js │ │ ├── data │ │ │ ├── fake_a4a.html │ │ │ └── fake_a4a.json │ │ ├── test │ │ │ └── test-amp-ad-network-cloudflare-impl.js │ │ └── vendors.js │ ├── OWNERS.yaml │ └── amp-ad-network-cloudflare-impl-internal.md ├── amp-ad-network-doubleclick-impl │ ├── 0.1 │ │ ├── amp-ad-network-doubleclick-impl.js │ │ ├── doubleclick-a4a-config.js │ │ └── test │ │ │ ├── test-amp-ad-network-doubleclick-impl.js │ │ │ ├── test-doubleclick-a4a-config.js │ │ │ ├── test-doubleclick-integration.js │ │ │ ├── test-doubleclick-rtc.js │ │ │ └── test-doubleclick-sra.js │ ├── OWNERS.yaml │ └── amp-ad-network-doubleclick-impl-internal.md ├── amp-ad-network-fake-impl │ ├── 0.1 │ │ ├── amp-ad-network-fake-impl.js │ │ ├── data │ │ │ ├── demo_a4a_creative.out │ │ │ ├── fake_amp.json │ │ │ └── fake_amp_ad_with_iframe_transport.html │ │ └── fake-a4a-config.js │ ├── OWNERS.yaml │ └── amp-ad-network-fake-impl-internal.md ├── amp-ad-network-gmossp-impl │ ├── 0.1 │ │ ├── amp-ad-network-gmossp-impl.js │ │ ├── gmossp-a4a-config.js │ │ └── test │ │ │ └── test-amp-ad-network-gmossp-impl.js │ ├── OWNERS.yaml │ └── amp-ad-network-gmossp-impl-internal.md ├── amp-ad-network-triplelift-impl │ ├── 0.1 │ │ ├── amp-ad-network-triplelift-impl.js │ │ ├── test │ │ │ └── test-amp-ad-network-triplelift-impl.js │ │ └── triplelift-a4a-config.js │ ├── OWNERS.yaml │ └── amp-ad-network-triplelift-impl-internal.md ├── amp-ad │ ├── 0.1 │ │ ├── a2a-listener.js │ │ ├── amp-ad-3p-impl.js │ │ ├── amp-ad-custom.js │ │ ├── amp-ad-ui.js │ │ ├── amp-ad-xorigin-iframe-handler.js │ │ ├── amp-ad.css │ │ ├── amp-ad.js │ │ ├── concurrent-load.js │ │ └── test │ │ │ ├── test-a2a-listener.js │ │ │ ├── test-amp-ad-3p-impl.js │ │ │ ├── test-amp-ad-custom.js │ │ │ ├── test-amp-ad-ui.js │ │ │ ├── test-amp-ad-xorigin-iframe-handler.js │ │ │ ├── test-amp-ad.js │ │ │ ├── test-concurrent-load.js │ │ │ ├── validator-amp-ad.html │ │ │ └── validator-amp-ad.out │ ├── OWNERS.yaml │ ├── amp-ad.md │ └── validator-amp-ad.protoascii ├── amp-analytics │ ├── 0.1 │ │ ├── activity-impl.js │ │ ├── amp-analytics.js │ │ ├── analytics-root.js │ │ ├── events.js │ │ ├── iframe-transport-message-queue.js │ │ ├── iframe-transport.js │ │ ├── instrumentation.js │ │ ├── sandbox-vars-whitelist.js │ │ ├── test │ │ │ ├── test-amp-analytics.js │ │ │ ├── test-analytics-root.js │ │ │ ├── test-events.js │ │ │ ├── test-iframe-transport-client.js │ │ │ ├── test-iframe-transport-message-queue.js │ │ │ ├── test-iframe-transport.js │ │ │ ├── test-instrumentation.js │ │ │ ├── test-transport.js │ │ │ ├── test-variables.js │ │ │ ├── test-vendors.js │ │ │ ├── test-visibility-manager.js │ │ │ ├── test-visibility-model.js │ │ │ ├── validator-analytics-notification.html │ │ │ ├── validator-analytics-notification.out │ │ │ ├── validator-analytics.html │ │ │ ├── validator-analytics.out │ │ │ └── vendor-requests.json │ │ ├── transport.js │ │ ├── variables.js │ │ ├── vendors.js │ │ ├── visibility-manager.js │ │ └── visibility-model.js │ ├── OWNERS.yaml │ ├── amp-analytics.md │ ├── amp-video-analytics.md │ ├── analytics-vars.md │ ├── integrating-analytics.md │ ├── validator-amp-analytics.protoascii │ └── why-not-iframe.md ├── amp-anim │ ├── 0.1 │ │ ├── amp-anim.js │ │ └── test │ │ │ └── test-amp-anim.js │ ├── amp-anim.md │ └── validator-amp-anim.protoascii ├── amp-animation │ ├── 0.1 │ │ ├── amp-animation.js │ │ ├── css-expr-ast.js │ │ ├── css-expr-impl.jison │ │ ├── css-expr-impl.js │ │ ├── css-expr.js │ │ ├── keyframes-extractor.js │ │ ├── test │ │ │ ├── test-amp-animation.js │ │ │ ├── test-css-expr.js │ │ │ ├── test-keyframes-extractor.js │ │ │ ├── test-web-animations.js │ │ │ ├── validator-amp-animation.html │ │ │ └── validator-amp-animation.out │ │ ├── web-animation-types.js │ │ └── web-animations.js │ ├── OWNERS.yaml │ ├── amp-animation.md │ └── validator-amp-animation.protoascii ├── amp-apester-media │ ├── 0.1 │ │ ├── amp-apester-media.css │ │ ├── amp-apester-media.js │ │ └── test │ │ │ ├── test-amp-apester-media.js │ │ │ ├── validator-amp-apester-media.html │ │ │ └── validator-amp-apester-media.out │ ├── OWNERS.yaml │ ├── amp-apester-media.md │ └── validator-amp-apester-media.protoascii ├── amp-app-banner │ ├── 0.1 │ │ ├── amp-app-banner.css │ │ ├── amp-app-banner.js │ │ └── test │ │ │ ├── test-amp-app-banner.js │ │ │ ├── validator-amp-app-banner-missing-meta.html │ │ │ ├── validator-amp-app-banner-missing-meta.out │ │ │ ├── validator-amp-app-banner-only-one-meta.html │ │ │ ├── validator-amp-app-banner-only-one-meta.out │ │ │ ├── validator-amp-app-banner.html │ │ │ └── validator-amp-app-banner.out │ ├── OWNERS.yaml │ ├── amp-app-banner.md │ └── validator-amp-app-banner.protoascii ├── amp-audio │ ├── 0.1 │ │ ├── amp-audio.js │ │ └── test │ │ │ ├── test-amp-audio.js │ │ │ ├── validator-amp-audio.html │ │ │ ├── validator-amp-audio.out │ │ │ ├── validator-amp4ads-amp-audio.html │ │ │ └── validator-amp4ads-amp-audio.out │ ├── OWNERS.yaml │ ├── amp-audio.md │ └── validator-amp-audio.protoascii ├── amp-auto-ads │ ├── 0.1 │ │ ├── ad-network-config.js │ │ ├── ad-strategy.js │ │ ├── ad-tracker.js │ │ ├── amp-auto-ads.js │ │ ├── anchor-ad-strategy.js │ │ ├── attributes.js │ │ ├── placement.js │ │ └── test │ │ │ ├── test-ad-network-config.js │ │ │ ├── test-ad-strategy.js │ │ │ ├── test-ad-tracker.js │ │ │ ├── test-amp-auto-ads.js │ │ │ ├── test-anchor-ad-strategy.js │ │ │ ├── test-attributes.js │ │ │ ├── test-placement.js │ │ │ ├── validator-amp-auto-ads.html │ │ │ └── validator-amp-auto-ads.out │ ├── OWNERS.yaml │ ├── amp-auto-ads.md │ └── validator-amp-auto-ads.protoascii ├── amp-bind │ ├── 0.1 │ │ ├── amp-bind.js │ │ ├── amp-state.js │ │ ├── bind-evaluator.js │ │ ├── bind-events.js │ │ ├── bind-expr-defines.js │ │ ├── bind-expr-impl.jison │ │ ├── bind-expr-impl.js │ │ ├── bind-expr-impl.md │ │ ├── bind-expression.js │ │ ├── bind-impl.js │ │ ├── bind-validator.js │ │ └── test │ │ │ ├── integration │ │ │ └── test-bind-impl.js │ │ │ ├── test-amp-state.js │ │ │ ├── test-bind-evaluator.js │ │ │ ├── test-bind-expression.js │ │ │ ├── test-bind-validator.js │ │ │ ├── validator-amp-bind.html │ │ │ ├── validator-amp-bind.out │ │ │ ├── validator-autosuggest.html │ │ │ └── validator-autosuggest.out │ ├── OWNERS.yaml │ ├── amp-bind.md │ └── validator-amp-bind.protoascii ├── amp-brid-player │ ├── 0.1 │ │ ├── amp-brid-player.js │ │ └── test │ │ │ ├── test-amp-brid-player.js │ │ │ ├── validator-amp-brid-player.html │ │ │ └── validator-amp-brid-player.out │ ├── OWNERS.yaml │ ├── amp-brid-player.md │ └── validator-amp-brid-player.protoascii ├── amp-brightcove │ ├── 0.1 │ │ ├── amp-brightcove.js │ │ └── test │ │ │ ├── test-amp-brightcove.js │ │ │ ├── validator-amp-brightcove.html │ │ │ └── validator-amp-brightcove.out │ ├── OWNERS.yaml │ ├── amp-brightcove.md │ └── validator-amp-brightcove.protoascii ├── amp-call-tracking │ ├── 0.1 │ │ ├── amp-call-tracking.js │ │ └── test │ │ │ ├── test-amp-call-tracking.js │ │ │ ├── validator-amp-call-tracking.html │ │ │ └── validator-amp-call-tracking.out │ ├── OWNERS.yaml │ ├── amp-call-tracking.md │ └── validator-amp-call-tracking.protoascii ├── amp-carousel │ ├── 0.1 │ │ ├── amp-carousel.css │ │ ├── amp-carousel.js │ │ ├── base-carousel.js │ │ ├── base-slides.js │ │ ├── scrollable-carousel.js │ │ ├── slidescroll.js │ │ └── test │ │ │ ├── test-base-slide.js │ │ │ ├── test-scrollable-carousel.js │ │ │ ├── test-slidescroll.js │ │ │ ├── validator-amp-carousel.html │ │ │ └── validator-amp-carousel.out │ ├── OWNERS.yaml │ ├── amp-carousel-analytics.md │ ├── amp-carousel.md │ └── validator-amp-carousel.protoascii ├── amp-compare-slider │ ├── 0.1 │ │ ├── amp-compare-slider.js │ │ └── test │ │ │ └── test-amp-compare-slider.js │ └── amp-compare-slider.md ├── amp-crypto-polyfill │ ├── 0.1 │ │ └── amp-crypto-polyfill.js │ └── OWNERS.yaml ├── amp-dailymotion │ ├── 0.1 │ │ ├── amp-dailymotion.js │ │ └── test │ │ │ ├── test-amp-dailymotion.js │ │ │ ├── validator-amp-dailymotion.html │ │ │ └── validator-amp-dailymotion.out │ ├── OWNERS.yaml │ ├── amp-dailymotion.md │ └── validator-amp-dailymotion.protoascii ├── amp-dynamic-css-classes │ ├── 0.1 │ │ ├── amp-dynamic-css-classes.js │ │ └── test │ │ │ ├── test-dynamic-classes.js │ │ │ └── test-runtime-classes.js │ ├── amp-dynamic-css-classes.md │ └── validator-amp-dynamic-css-classes.protoascii ├── amp-experiment │ ├── 0.1 │ │ ├── amp-experiment.js │ │ ├── test │ │ │ ├── test-amp-experiment.js │ │ │ ├── test-variant.js │ │ │ ├── validator-amp-experiment.html │ │ │ └── validator-amp-experiment.out │ │ └── variant.js │ ├── OWNERS.yaml │ ├── amp-experiment.md │ └── validator-amp-experiment.protoascii ├── amp-facebook-comments │ ├── 0.1 │ │ ├── amp-facebook-comments.js │ │ └── test │ │ │ ├── validator-amp-facebook-comments.html │ │ │ └── validator-amp-facebook-comments.out │ ├── OWNERS.yaml │ ├── amp-facebook-comments.md │ └── validator-amp-facebook-comments.protoascii ├── amp-facebook-like │ ├── 0.1 │ │ ├── amp-facebook-like.js │ │ └── test │ │ │ ├── validator-amp-facebook-like.html │ │ │ └── validator-amp-facebook-like.out │ ├── OWNERS.yaml │ ├── amp-facebook-like.md │ └── validator-amp-facebook-like.protoascii ├── amp-facebook │ ├── 0.1 │ │ ├── amp-facebook.js │ │ └── test │ │ │ ├── test-amp-facebook.js │ │ │ ├── validator-amp-facebook.html │ │ │ └── validator-amp-facebook.out │ ├── OWNERS.yaml │ ├── amp-facebook.md │ └── validator-amp-facebook.protoascii ├── amp-fit-text │ ├── 0.1 │ │ ├── amp-fit-text.css │ │ ├── amp-fit-text.js │ │ └── test │ │ │ └── test-amp-fit-text.js │ ├── amp-fit-text.md │ └── validator-amp-fit-text.protoascii ├── amp-font │ ├── 0.1 │ │ ├── amp-font.js │ │ ├── fontloader.js │ │ └── test │ │ │ ├── test-amp-font.js │ │ │ ├── test-fontloader.js │ │ │ ├── validator-amp-font.html │ │ │ └── validator-amp-font.out │ ├── OWNERS.yaml │ ├── amp-font.md │ └── validator-amp-font.protoascii ├── amp-form │ ├── 0.1 │ │ ├── amp-form.css │ │ ├── amp-form.js │ │ ├── form-events.js │ │ ├── form-proxy.js │ │ ├── form-validators.js │ │ ├── form-verifiers.js │ │ ├── test │ │ │ ├── integration │ │ │ │ └── test-integration-form.js │ │ │ ├── test-amp-form.js │ │ │ ├── test-form-proxy.js │ │ │ ├── test-form-validators.js │ │ │ ├── test-form-verifiers.js │ │ │ └── test-validation-bubble.js │ │ └── validation-bubble.js │ ├── OWNERS.yaml │ ├── amp-form.md │ └── validator-amp-form.protoascii ├── amp-fresh │ ├── 0.1 │ │ ├── amp-fresh-manager.js │ │ ├── amp-fresh.css │ │ ├── amp-fresh.js │ │ └── test │ │ │ ├── test-amp-fresh-manager.js │ │ │ └── test-amp-fresh.js │ └── OWNERS.yaml ├── amp-fx-flying-carpet │ ├── 0.1 │ │ ├── amp-fx-flying-carpet.css │ │ ├── amp-fx-flying-carpet.js │ │ └── test │ │ │ ├── test-amp-fx-flying-carpet.js │ │ │ ├── validator-amp-flying-carpet.html │ │ │ └── validator-amp-flying-carpet.out │ ├── OWNERS.yaml │ ├── amp-fx-flying-carpet.md │ └── validator-amp-fx-flying-carpet.protoascii ├── amp-fx-parallax │ ├── 0.1 │ │ ├── amp-fx-parallax.js │ │ └── test │ │ │ └── test-amp-fx-parallax.js │ ├── OWNERS.yaml │ └── amp-fx-parallax.md ├── amp-gfycat │ ├── 0.1 │ │ ├── amp-gfycat.js │ │ └── test │ │ │ ├── test-amp-gfycat.js │ │ │ ├── validator-amp-gfycat.html │ │ │ └── validator-amp-gfycat.out │ ├── OWNERS.yaml │ ├── amp-gfycat.md │ └── validator-amp-gfycat.protoascii ├── amp-gist │ ├── 0.1 │ │ ├── amp-gist.js │ │ └── test │ │ │ └── test-amp-gist.js │ ├── OWNERS.yaml │ ├── amp-gist.md │ └── validator-amp-gist.protoascii ├── amp-google-vrview-image │ ├── 0.1 │ │ ├── amp-google-vrview-image.js │ │ └── test │ │ │ └── test-amp-google-vrview-image.js │ ├── OWNERS.yaml │ └── amp-google-vrview-image.md ├── amp-hulu │ ├── 0.1 │ │ ├── amp-hulu.js │ │ └── test │ │ │ └── test-amp-hulu.js │ ├── OWNERS.yaml │ ├── amp-hulu.md │ └── validator-amp-hulu.protoascii ├── amp-iframe │ ├── 0.1 │ │ ├── amp-iframe.js │ │ └── test │ │ │ ├── test-amp-iframe.js │ │ │ ├── validator-amp-iframe.html │ │ │ └── validator-amp-iframe.out │ ├── OWNERS.yaml │ ├── amp-iframe.md │ └── validator-amp-iframe.protoascii ├── amp-ima-video │ ├── 0.1 │ │ ├── amp-ima-video.js │ │ └── test │ │ │ ├── test-amp-ima-video.js │ │ │ ├── validator-amp-ima-video.html │ │ │ └── validator-amp-ima-video.out │ ├── amp-ima-video.md │ └── validator-amp-ima-video.protoascii ├── amp-image-lightbox │ ├── 0.1 │ │ ├── amp-image-lightbox.css │ │ ├── amp-image-lightbox.js │ │ └── test │ │ │ └── test-amp-image-lightbox.js │ ├── OWNERS.yaml │ ├── amp-image-lightbox.md │ └── validator-amp-image-lightbox.protoascii ├── amp-imgur │ ├── 0.1 │ │ ├── amp-imgur.js │ │ └── test │ │ │ ├── test-amp-imgur.js │ │ │ ├── validator-amp-imgur.html │ │ │ └── validator-amp-imgur.out │ ├── OWNERS.yaml │ ├── amp-imgur.md │ └── validator-amp-imgur.protoascii ├── amp-instagram │ ├── 0.1 │ │ ├── amp-instagram.css │ │ ├── amp-instagram.js │ │ └── test │ │ │ ├── test-amp-instagram.js │ │ │ ├── validator-amp-instagram.html │ │ │ └── validator-amp-instagram.out │ ├── OWNERS.yaml │ ├── amp-instagram.md │ └── validator-amp-instagram.protoascii ├── amp-install-serviceworker │ ├── 0.1 │ │ ├── amp-install-serviceworker.js │ │ └── test │ │ │ └── test-amp-install-serviceworker.js │ ├── OWNERS.yaml │ ├── amp-install-serviceworker.md │ └── validator-amp-install-serviceworker.protoascii ├── amp-izlesene │ ├── 0.1 │ │ ├── amp-izlesene.js │ │ └── test │ │ │ ├── test-amp-izlesene.js │ │ │ ├── validator-amp-izlesene.html │ │ │ └── validator-amp-izlesene.out │ ├── OWNERS.yaml │ ├── amp-izlesene.md │ └── validator-amp-izlesene.protoascii ├── amp-jwplayer │ ├── 0.1 │ │ ├── amp-jwplayer.js │ │ └── test │ │ │ ├── test-amp-jwplayer.js │ │ │ ├── validator-amp-jwplayer.html │ │ │ └── validator-amp-jwplayer.out │ ├── OWNERS.yaml │ ├── amp-jwplayer.md │ └── validator-amp-jwplayer.protoascii ├── amp-kaltura-player │ ├── 0.1 │ │ ├── amp-kaltura-player.js │ │ └── test │ │ │ ├── test-amp-kaltura-player.js │ │ │ ├── validator-amp-kaltura-player.html │ │ │ └── validator-amp-kaltura-player.out │ ├── OWNERS.yaml │ ├── amp-kaltura-player.md │ └── validator-amp-kaltura-player.protoascii ├── amp-lightbox-viewer │ ├── 0.1 │ │ ├── amp-lightbox-viewer.css │ │ ├── amp-lightbox-viewer.js │ │ ├── service │ │ │ ├── lightbox-manager-discovery.js │ │ │ └── lightbox-manager-impl.js │ │ └── test │ │ │ └── test-amp-lightbox-viewer.js │ └── OWNERS.yaml ├── amp-lightbox │ ├── 0.1 │ │ ├── amp-lightbox.css │ │ └── amp-lightbox.js │ ├── OWNERS.yaml │ ├── amp-lightbox.md │ └── validator-amp-lightbox.protoascii ├── amp-list │ ├── 0.1 │ │ ├── amp-list.js │ │ └── test │ │ │ ├── test-amp-list.js │ │ │ ├── validator-amp-list.html │ │ │ └── validator-amp-list.out │ ├── amp-list.md │ └── validator-amp-list.protoascii ├── amp-live-list │ ├── 0.1 │ │ ├── amp-live-list.css │ │ ├── amp-live-list.js │ │ ├── live-list-manager.js │ │ ├── poller.js │ │ └── test │ │ │ ├── test-amp-live-list.js │ │ │ ├── test-live-list-manager.js │ │ │ ├── test-poller.js │ │ │ ├── validator-amp-live-list.html │ │ │ └── validator-amp-live-list.out │ ├── OWNERS.yaml │ ├── amp-live-list-server-side-filtering.md │ ├── amp-live-list.md │ └── validator-amp-live-list.protoascii ├── amp-mustache │ ├── 0.1 │ │ ├── amp-mustache.js │ │ └── test │ │ │ ├── test-amp-mustache.js │ │ │ ├── validator-amp-mustache.html │ │ │ └── validator-amp-mustache.out │ ├── amp-mustache.md │ └── validator-amp-mustache.protoascii ├── amp-nexxtv-player │ ├── 0.1 │ │ ├── amp-nexxtv-player.js │ │ └── test │ │ │ ├── test-amp-nexxtv-player.js │ │ │ ├── validator-amp-nexxtv-player.html │ │ │ └── validator-amp-nexxtv-player.out │ ├── OWNERS.yaml │ ├── amp-nexxtv-player.md │ └── validator-amp-nexxtv-player.protoascii ├── amp-o2-player │ ├── 0.1 │ │ ├── amp-o2-player.js │ │ └── test │ │ │ ├── test-amp-o2-player.js │ │ │ ├── validator-amp-o2-player.html │ │ │ └── validator-amp-o2-player.out │ ├── OWNERS.yaml │ ├── amp-o2-player.md │ └── validator-amp-o2-player.protoascii ├── amp-ooyala-player │ ├── 0.1 │ │ ├── amp-ooyala-player.js │ │ └── test │ │ │ ├── test-amp-ooyala.js │ │ │ ├── validator-amp-ooyala.html │ │ │ └── validator-amp-ooyala.out │ ├── OWNERS.yaml │ ├── amp-ooyala-player.md │ └── validator-amp-ooyala-player.protoascii ├── amp-pinterest │ ├── 0.1 │ │ ├── amp-pinterest.css │ │ ├── amp-pinterest.js │ │ ├── follow-button.js │ │ ├── pin-widget.js │ │ ├── pinit-button.js │ │ ├── test │ │ │ ├── test-amp-pinterest.js │ │ │ ├── validator-amp-pinterest.html │ │ │ └── validator-amp-pinterest.out │ │ └── util.js │ ├── OWNERS.yaml │ ├── amp-pinterest.md │ └── validator-amp-pinterest.protoascii ├── amp-playbuzz │ ├── 0.1 │ │ ├── amp-playbuzz.css │ │ ├── amp-playbuzz.js │ │ ├── images.js │ │ ├── test │ │ │ ├── test-amp-playbuzz.js │ │ │ ├── validator-amp-playbuzz.html │ │ │ └── validator-amp-playbuzz.out │ │ └── utils.js │ ├── OWNERS.yaml │ ├── amp-playbuzz.md │ └── validator-amp-playbuzz.protoascii ├── amp-position-observer │ ├── 0.1 │ │ ├── amp-position-observer.js │ │ └── test │ │ │ ├── test-amp-position-observer.js │ │ │ ├── validator-amp-position-observer.html │ │ │ └── validator-amp-position-observer.out │ ├── OWNERS.yaml │ ├── amp-position-observer.md │ └── validator-amp-position-observer.protoascii ├── amp-reach-player │ ├── 0.1 │ │ ├── amp-reach-player.js │ │ └── test │ │ │ ├── test-amp-reach-player.js │ │ │ ├── validator-amp-reach-player.html │ │ │ └── validator-amp-reach-player.out │ ├── OWNERS.yaml │ ├── amp-reach-player.md │ └── validator-amp-reach-player.protoascii ├── amp-reddit │ ├── 0.1 │ │ ├── amp-reddit.js │ │ └── test │ │ │ └── test-amp-reddit.js │ ├── OWNERS.yaml │ ├── amp-reddit.md │ └── validator-amp-reddit.protoascii ├── amp-selector │ ├── 0.1 │ │ ├── amp-selector.css │ │ ├── amp-selector.js │ │ └── test │ │ │ ├── test-amp-selector.js │ │ │ ├── validator-amp-selector.html │ │ │ └── validator-amp-selector.out │ ├── OWNERS.yaml │ ├── amp-selector.md │ └── validator-amp-selector.protoascii ├── amp-share-tracking │ ├── 0.1 │ │ ├── amp-share-tracking.js │ │ └── test │ │ │ └── test-amp-share-tracking.js │ ├── OWNERS.yaml │ └── amp-share-tracking.md ├── amp-sidebar │ ├── 0.1 │ │ ├── amp-sidebar.css │ │ ├── amp-sidebar.js │ │ ├── test │ │ │ ├── test-amp-sidebar.js │ │ │ ├── test-toolbar.js │ │ │ ├── validator-amp-sidebar.html │ │ │ └── validator-amp-sidebar.out │ │ └── toolbar.js │ ├── 1.0 │ │ ├── amp-sidebar-1.0.md │ │ ├── amp-sidebar.css │ │ ├── amp-sidebar.js │ │ ├── test │ │ │ ├── test-amp-sidebar.js │ │ │ ├── test-toolbar.js │ │ │ ├── validator-amp-sidebar.html │ │ │ └── validator-amp-sidebar.out │ │ └── toolbar.js │ ├── OWNERS.yaml │ ├── amp-sidebar.md │ └── validator-amp-sidebar.protoascii ├── amp-slides │ ├── 0.1 │ │ └── amp-slides.js │ ├── amp-slides-deprecated.md │ └── validator-amp-slides.protoascii ├── amp-social-share │ ├── 0.1 │ │ ├── amp-social-share-config.js │ │ ├── amp-social-share.css │ │ ├── amp-social-share.js │ │ └── test │ │ │ ├── test-amp-social-share.js │ │ │ ├── validator-amp-social-share.html │ │ │ └── validator-amp-social-share.out │ ├── OWNERS.yaml │ ├── amp-social-share.md │ └── validator-amp-social-share.protoascii ├── amp-soundcloud │ ├── 0.1 │ │ ├── amp-soundcloud.js │ │ └── test │ │ │ ├── test-amp-soundcloud.js │ │ │ ├── validator-amp-soundcloud.html │ │ │ └── validator-amp-soundcloud.out │ ├── OWNERS.yaml │ ├── amp-soundcloud.md │ └── validator-amp-soundcloud.protoascii ├── amp-springboard-player │ ├── 0.1 │ │ ├── amp-springboard-player.js │ │ └── test │ │ │ ├── test-amp-springboard-player.js │ │ │ ├── validator-amp-springboard-player.html │ │ │ └── validator-amp-springboard-player.out │ ├── OWNERS.yaml │ ├── amp-springboard-player.md │ └── validator-amp-springboard-player.protoascii ├── amp-sticky-ad │ ├── 0.1 │ │ └── test │ │ │ ├── validator-amp-sticky-ad.html │ │ │ └── validator-amp-sticky-ad.out │ ├── 1.0 │ │ ├── amp-sticky-ad.css │ │ ├── amp-sticky-ad.js │ │ └── test │ │ │ ├── test-amp-sticky-ad.js │ │ │ ├── validator-amp-sticky-ad.html │ │ │ └── validator-amp-sticky-ad.out │ ├── OWNERS.yaml │ ├── amp-sticky-ad.md │ └── validator-amp-sticky-ad.protoascii ├── amp-timeago │ ├── 0.1 │ │ ├── amp-timeago.js │ │ └── test │ │ │ ├── test-amp-timeago.js │ │ │ ├── validator-amp-timeago.html │ │ │ └── validator-amp-timeago.out │ ├── amp-timeago.md │ └── validator-amp-timeago.protoascii ├── amp-twitter │ ├── 0.1 │ │ ├── amp-twitter.js │ │ └── test │ │ │ ├── test-amp-twitter.js │ │ │ ├── validator-amp-twitter.html │ │ │ └── validator-amp-twitter.out │ ├── amp-twitter.md │ └── validator-amp-twitter.protoascii ├── amp-user-notification │ ├── 0.1 │ │ ├── amp-user-notification.css │ │ ├── amp-user-notification.js │ │ └── test │ │ │ ├── test-amp-user-notification.js │ │ │ ├── validator-amp-user-notification.html │ │ │ └── validator-amp-user-notification.out │ ├── amp-user-notification.md │ └── validator-amp-user-notification.protoascii ├── amp-video │ ├── 0.1 │ │ ├── amp-video.js │ │ └── test │ │ │ └── test-amp-video.js │ ├── OWNERS.yaml │ ├── amp-video.md │ └── validator-amp-video.protoascii ├── amp-viewer-integration │ ├── 0.1 │ │ ├── amp-viewer-integration.js │ │ ├── examples │ │ │ └── amp-viewer-host.js │ │ ├── messaging │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── messaging.js │ │ │ └── package.json │ │ ├── test │ │ │ ├── integration │ │ │ │ ├── test-amp-viewer-integration.js │ │ │ │ ├── test-amp-webview-viewer-integration.js │ │ │ │ └── test-viewer-initiated-handshake.js │ │ │ ├── test-touch-handler.js │ │ │ ├── viewer-for-testing.js │ │ │ ├── viewer-initiated-handshake-viewer-for-testing.js │ │ │ └── webview-viewer-for-testing.js │ │ └── touch-handler.js │ ├── OWNERS.yaml │ ├── TICKEVENTS.md │ ├── img │ │ ├── intro.png │ │ ├── mobile-web-handshake1.png │ │ ├── mobile-web-handshake2.png │ │ ├── mobile-web-handshake3.png │ │ ├── mobile-web-handshake4.png │ │ ├── swipe.png │ │ ├── webview-connection1.png │ │ ├── webview-connection2.png │ │ ├── webview-connection3.png │ │ ├── webview-connection4.png │ │ ├── webview-connection5.png │ │ ├── webview-handshake1.png │ │ ├── webview-handshake2.png │ │ └── webview-handshake3.png │ └── integrating-viewer-with-amp-doc-guide.md ├── amp-vimeo │ ├── 0.1 │ │ ├── amp-vimeo.js │ │ └── test │ │ │ ├── test-amp-vimeo.js │ │ │ ├── validator-amp-vimeo.html │ │ │ └── validator-amp-vimeo.out │ ├── OWNERS.yaml │ ├── amp-vimeo.md │ └── validator-amp-vimeo.protoascii ├── amp-vine │ ├── 0.1 │ │ ├── amp-vine.js │ │ └── test │ │ │ ├── test-amp-vine.js │ │ │ ├── validator-amp-vine.html │ │ │ └── validator-amp-vine.out │ ├── OWNERS.yaml │ ├── amp-vine.md │ └── validator-amp-vine.protoascii ├── amp-viz-vega │ ├── 0.1 │ │ ├── amp-viz-vega.css │ │ └── amp-viz-vega.js │ ├── OWNERS.yaml │ └── amp-viz-vega.md ├── amp-web-push │ ├── 0.1 │ │ ├── amp-web-push-config.js │ │ ├── amp-web-push-helper-frame.html │ │ ├── amp-web-push-helper-frame.js │ │ ├── amp-web-push-permission-dialog.html │ │ ├── amp-web-push-permission-dialog.js │ │ ├── amp-web-push-widget.js │ │ ├── amp-web-push.css │ │ ├── amp-web-push.js │ │ ├── amp-web-push.service-worker.js │ │ ├── iframehost.js │ │ ├── test │ │ │ ├── test-web-push-config.js │ │ │ ├── test-web-push-permission-dialog.js │ │ │ ├── test-web-push-service.js │ │ │ ├── validator-amp-web-push.html │ │ │ └── validator-amp-web-push.out │ │ ├── vars.js │ │ ├── web-push-service.js │ │ └── window-messenger.js │ ├── amp-web-push.md │ └── validator-amp-web-push.protoascii └── amp-youtube │ ├── 0.1 │ ├── amp-youtube.js │ └── test │ │ ├── test-amp-youtube.js │ │ ├── validator-amp-youtube.html │ │ └── validator-amp-youtube.out │ ├── OWNERS.yaml │ ├── amp-youtube.md │ └── validator-amp-youtube.protoascii ├── gulpfile.js ├── package.json ├── screenshots └── test │ └── manual │ ├── amp-anim.amp.html.png │ ├── amp-carousel.amp.html.png │ ├── amp-fit-text.amp.html.png │ ├── amp-iframe.amp.html.png │ ├── amp-image-lightbox.amp.html.png │ ├── amp-img.amp.html.png │ └── amp-lightbox.amp.html.png ├── spec ├── amp-actions-and-events.md ├── amp-boilerplate.md ├── amp-cache-debugging.md ├── amp-cache-guidelines.md ├── amp-cache-modifications.everything.amp.html ├── amp-cache-modifications.everything.cache.html ├── amp-cache-modifications.md ├── amp-cors-requests.md ├── amp-errors.md ├── amp-html-components.md ├── amp-html-format.md ├── amp-html-layout.md ├── amp-html-templates.md ├── amp-iframe-origin-policy.md ├── amp-managing-user-state.md ├── amp-shadow-doc.md ├── amp-tag-addendum.md ├── amp-var-substitutions.md ├── amp-versioning-policy.md └── img │ ├── contexts-with-different-storage.png │ ├── identifiers-for-use-cases.png │ ├── link-form-identifier-forwarding.png │ ├── link-identifier-forwarding-example-1.png │ └── link-identifier-forwarding-example-2.png ├── src ├── .eslintrc ├── 3p-frame-messaging.js ├── 3p-frame.js ├── OWNERS.yaml ├── action-trust.js ├── ad-cid.js ├── ad-helper.js ├── amp-babel.js ├── amp-events.js ├── amp-shadow-babel.js ├── amp-shadow.js ├── amp.js ├── analytics.js ├── anchor-click-interceptor.js ├── animation.js ├── base-element.js ├── batched-json.js ├── chunk.js ├── common-signals.js ├── config.js ├── cookies.js ├── curve.js ├── custom-element.js ├── document-ready.js ├── document-submit.js ├── dom.js ├── element-service.js ├── element-stub.js ├── error.js ├── event-helper-listen.js ├── event-helper.js ├── examiner │ └── examiner.js ├── experiments.js ├── exponential-backoff.js ├── extension-analytics.js ├── finite-state-machine.js ├── focus-history.js ├── font-stylesheet-timeout.js ├── form.js ├── friendly-iframe-embed.js ├── full-overlay-frame-helper.js ├── gesture-recognizers.js ├── gesture.js ├── get-html.js ├── iframe-attributes.js ├── iframe-helper.js ├── impression.js ├── inabox │ ├── amp-inabox.js │ ├── inabox-iframe-messaging-client.js │ └── inabox-viewport.js ├── input.js ├── intersection-observer-polyfill.js ├── intersection-observer.js ├── json.js ├── layout-delay-meter.js ├── layout-rect.js ├── layout.js ├── loader.js ├── log.js ├── mediasession-helper.js ├── mode-object.js ├── mode.js ├── motion.js ├── observable.js ├── pass.js ├── polyfills.js ├── polyfills │ ├── array-includes.js │ ├── document-contains.js │ ├── domtokenlist-toggle.js │ ├── math-sign.js │ ├── object-assign.js │ └── promise.js ├── preconnect.js ├── pull-to-refresh.js ├── render-delaying-services.js ├── runtime.js ├── sanitizer.js ├── service-worker │ ├── .eslintrc │ ├── core.js │ ├── install.js │ ├── kill.js │ └── shell.js ├── service.js ├── service │ ├── action-impl.js │ ├── ampdoc-impl.js │ ├── batched-xhr-impl.js │ ├── cid-api.js │ ├── cid-impl.js │ ├── crypto-impl.js │ ├── document-click.js │ ├── document-info-impl.js │ ├── document-state.js │ ├── extension-location.js │ ├── extensions-impl.js │ ├── fixed-layer.js │ ├── history-impl.js │ ├── ie-media-bug.js │ ├── jank-meter.js │ ├── parallax-impl.js │ ├── performance-impl.js │ ├── platform-impl.js │ ├── position-observer-impl.js │ ├── resource.js │ ├── resources-impl.js │ ├── standard-actions-impl.js │ ├── storage-impl.js │ ├── task-queue.js │ ├── template-impl.js │ ├── timer-impl.js │ ├── url-replacements-impl.js │ ├── variable-source.js │ ├── video-manager-impl.js │ ├── video-session-manager.js │ ├── viewer-cid-api.js │ ├── viewer-impl.js │ ├── viewport │ │ ├── ios-scrollfreeze-bug.js │ │ ├── viewport-binding-def.js │ │ ├── viewport-binding-ios-embed-wrapper.js │ │ ├── viewport-binding-natural-ios-embed.js │ │ ├── viewport-binding-natural.js │ │ └── viewport-impl.js │ ├── vsync-impl.js │ └── xhr-impl.js ├── services.js ├── shadow-embed.js ├── size-list.js ├── srcset.js ├── string.js ├── style-installer.js ├── style.js ├── time.js ├── transition.js ├── types.js ├── url-parse-query-string.js ├── url-try-decode-uri-component.js ├── url.js ├── utils │ ├── array.js │ ├── base64.js │ ├── bytes.js │ ├── dom-fingerprint.js │ ├── function.js │ ├── key-codes.js │ ├── math.js │ ├── object.js │ ├── pem.js │ ├── priority-queue.js │ ├── promise.js │ ├── rate-limit.js │ └── signals.js ├── validator-integration.js ├── video-interface.js ├── visibility-state.js ├── web-components.js ├── web-worker │ ├── amp-worker.js │ ├── web-worker-defines.js │ ├── web-worker-polyfills.js │ └── web-worker.js ├── window-interface.js └── worker-error-reporting.js ├── system.properties ├── test ├── OWNERS.yaml ├── SIZE.md ├── _init_tests.js ├── fixtures │ ├── 3p-ad.html │ ├── bind-basic.html │ ├── bind-brightcove.html │ ├── bind-carousel.html │ ├── bind-form.html │ ├── bind-iframe.html │ ├── bind-list.html │ ├── bind-live-list.html │ ├── bind-selector.html │ ├── bind-video.html │ ├── bind-youtube.html │ ├── boilerplate-new-visibility.html │ ├── boilerplate-old-opacity.html │ ├── carousels.html │ ├── configuration.html │ ├── doubleclick.html │ ├── errors.html │ ├── images.html │ ├── released.html │ ├── script-load-extension-footer-v0-footer.html │ ├── script-load-extension-head-v0-head.html │ ├── script-load-extensions.html │ ├── script-load-v0-footer-extension-footer.html │ ├── script-load-v0-head-extension-footer.html │ ├── script-load-v0-head-extension-head.html │ ├── served │ │ ├── ampdoc-with-messaging.html │ │ ├── iframe-clicktoplay.html │ │ ├── iframe-intersection-outer.html │ │ ├── iframe-intersection.html │ │ ├── iframe-resize-outer.html │ │ ├── iframe-stub.html │ │ └── iframe.html │ ├── video-players.html │ └── visibility-state.html ├── functional │ ├── 3p │ │ ├── test-3p-messaging.js │ │ ├── test-ampcontext-integration.js │ │ └── test-iframe-messaging-client.js │ ├── TEST_FAILURE_AND_CRASH.json │ ├── TEST_FAILURE_BLOB2.json │ ├── TEST_FAILURE_BLOBS.json │ ├── ads │ │ └── test-csa.js │ ├── generate-testdata-experiments.js_ │ ├── inabox │ │ ├── test-inabox-frame-overlay-manager.js │ │ ├── test-inabox-messaging-host.js │ │ ├── test-inabox-viewport.js │ │ └── test-position-observer.js │ ├── test-3p-environment.js │ ├── test-3p.js │ ├── test-action.js │ ├── test-activity.js │ ├── test-ad-cid.js │ ├── test-ad-helper.js │ ├── test-ads-config.js │ ├── test-alp-handler.js │ ├── test-amp-context.js │ ├── test-amp-img.js │ ├── test-amp-pixel.js │ ├── test-ampdoc.js │ ├── test-analytics.js │ ├── test-anchor-click-interceptor.js │ ├── test-animation.js │ ├── test-base-element.js │ ├── test-batched-xhr.js │ ├── test-cache-sw-core.js │ ├── test-chunk.js │ ├── test-cid-api.js │ ├── test-cid.js │ ├── test-cookies.js │ ├── test-crypto.js │ ├── test-curve.js │ ├── test-custom-element.js │ ├── test-describes.js │ ├── test-document-click.js │ ├── test-document-info.js │ ├── test-document-ready.js │ ├── test-document-state.js │ ├── test-document-submit.js │ ├── test-dom.js │ ├── test-element-service.js │ ├── test-error.js │ ├── test-event-helper.js │ ├── test-experiments.js │ ├── test-exponential-backoff.js │ ├── test-extension-analytics.js │ ├── test-extension-location.js │ ├── test-extensions.js │ ├── test-finite-state-machine.js │ ├── test-fixed-layer.js │ ├── test-focus-history.js │ ├── test-font-stylesheet-timeout.js │ ├── test-friendly-iframe-embed.js │ ├── test-gesture-recognizers.js │ ├── test-gesture.js │ ├── test-get-html.js │ ├── test-history.js │ ├── test-ie-media-bug.js │ ├── test-iframe-helper.js │ ├── test-iframe-stub.js │ ├── test-impression.js │ ├── test-input.js │ ├── test-integration.js │ ├── test-intersection-observer-polyfill.js │ ├── test-intersection-observer.js │ ├── test-ios-scrollfreeze-bug.js │ ├── test-jank-meter.js │ ├── test-json.js │ ├── test-layout-delay-meter.js │ ├── test-layout-rect.js │ ├── test-layout.js │ ├── test-log.js │ ├── test-mediasession-helper.js │ ├── test-mode.js │ ├── test-motion.js │ ├── test-mustache.js │ ├── test-object.js │ ├── test-observable.js │ ├── test-pass.js │ ├── test-performance.js │ ├── test-platform.js │ ├── test-polyfill-array-includes.js │ ├── test-polyfill-document-contains.js │ ├── test-polyfill-domtokenlist-toggle.js │ ├── test-polyfill-math-sign.js │ ├── test-polyfill-object-assign.js │ ├── test-position-observer.js │ ├── test-preconnect.js │ ├── test-pull-to-refresh.js │ ├── test-render-delaying-services.js │ ├── test-resource.js │ ├── test-resources.js │ ├── test-runtime.js │ ├── test-sanitizer.js │ ├── test-service.js │ ├── test-shadow-embed.js │ ├── test-size-list.js │ ├── test-srcset.js │ ├── test-standard-actions.js │ ├── test-storage.js │ ├── test-string.js │ ├── test-style-installer.js │ ├── test-style.js │ ├── test-task-queue.js │ ├── test-template.js │ ├── test-timer.js │ ├── test-transition.js │ ├── test-types.js │ ├── test-url-replacements.js │ ├── test-url.js │ ├── test-variable-source.js │ ├── test-video-session-manager.js │ ├── test-viewer-cid-api.js │ ├── test-viewer.js │ ├── test-viewport-binding.js │ ├── test-viewport.js │ ├── test-vsync.js │ ├── test-web-components.js │ ├── test-xhr.js │ ├── test-yield.js │ ├── testdata-experiments.js │ ├── utils │ │ ├── test-array.js │ │ ├── test-base64.js │ │ ├── test-bytes.js │ │ ├── test-dom-fingerprint.js │ │ ├── test-math.js │ │ ├── test-pem.js │ │ ├── test-priority-queue.js │ │ ├── test-promise.js │ │ ├── test-rate-limit.js │ │ └── test-signals.js │ └── web-worker │ │ └── test-amp-worker.js ├── integration │ ├── test-3p-frame.js │ ├── test-3p-nameframe.js │ ├── test-amp-ad-3p.js │ ├── test-amp-ad-doubleclick.js │ ├── test-amp-bind.js │ ├── test-amp-carousel.js │ ├── test-amp-img.js │ ├── test-amp-pixel.js │ ├── test-boilerplates.js │ ├── test-configuration.js │ ├── test-errors.js │ ├── test-extensions-loading.js │ ├── test-position-observer.js │ ├── test-released.js │ ├── test-user-error-reporting.js │ ├── test-video-manager.js │ ├── test-video-players-helper.js │ ├── test-video-players.js │ └── test-visibility-states.js ├── manual │ ├── accessibility │ │ └── aria-propagation.amp.html │ ├── ad-scrolling.amp.html │ ├── amp-accordion.amp.html │ ├── amp-ad-expose-container.html │ ├── amp-ad.amp.html │ ├── amp-ad.custom.amp.html │ ├── amp-ad.yieldbot.amp.html │ ├── amp-anim.amp.html │ ├── amp-animation │ │ ├── assets │ │ │ └── clock.jpg │ │ ├── embeds │ │ │ └── scrollbound │ │ │ │ └── clock.a4a.html │ │ └── scrollbound-embeds.amp.html │ ├── amp-audio.amp.html │ ├── amp-carousel-scroll-test.amp.html │ ├── amp-carousel.amp.html │ ├── amp-fit-text.amp.html │ ├── amp-flying-carpet.amp.html │ ├── amp-gfycat.amp.html │ ├── amp-iframe-animate-container.html │ ├── amp-iframe-clicktoplay.html │ ├── amp-iframe-resize.amp.html │ ├── amp-iframe.amp.html │ ├── amp-ima-video.html │ ├── amp-image-lightbox.amp.html │ ├── amp-img-404.html │ ├── amp-img.amp.html │ ├── amp-instagram.amp.html │ ├── amp-install-serviceworker.amp.html │ ├── amp-lightbox-viewer-mixed.amp.html │ ├── amp-lightbox-viewer-optin.amp.html │ ├── amp-lightbox-viewer-optout.amp.html │ ├── amp-lightbox.amp.html │ ├── amp-list-data.json │ ├── amp-list.amp.html │ ├── amp-pinterest.amp.html │ ├── amp-pixel.amp.html │ ├── amp-selector.amp.html │ ├── amp-sidebar-toolbar.amp.html │ ├── amp-sidebar.amp.html │ ├── amp-slidescroll.amp.html │ ├── amp-soundcloud.amp.html │ ├── amp-sticky-ad-collapse.amp.html │ ├── amp-twitter.amp.html │ ├── amp-video-auto-fullscreen.amp.html │ ├── amp-video.amp.html │ ├── amp-videoplayers-autoplay.html │ ├── amp-vine.amp.html │ ├── amp-youtube.amp.html │ ├── analytics-user-error.amp.html │ ├── cache-sw.html │ ├── dont-show-dialog.json │ ├── error.amp.html │ ├── fakead3p.amp.html │ ├── gallery.amp.html │ ├── intersection.amp.html │ ├── pre-render-load.html │ ├── show-dialog.json │ ├── test-sw.html │ ├── test-sw.js │ └── unavailable-font.amp.html ├── size.csv ├── size.txt └── visual-diff │ └── visual-tests.json ├── testing ├── describes.js ├── fake-dom.js ├── iframe.js ├── local-amp-chrome-extension │ ├── 128x128.png │ ├── 16x16.png │ ├── 48x48.png │ ├── README.md │ ├── background.js │ ├── logo.svg │ ├── manifest.json │ ├── popup.html │ └── popup.js ├── screenshots │ ├── everything-iphone6.png │ ├── make-screenshot.js │ └── screenshot-tests.md ├── test-helper.js └── yield.js ├── third_party ├── babel │ ├── LICENSE │ ├── README.amp │ └── custom-babel-helpers.js ├── caja │ ├── LICENSE │ ├── README.amp │ ├── compile.sh │ └── html-sanitizer.js ├── closure-compiler │ ├── LICENSE │ ├── Messages.properties │ ├── ParserConfig.properties │ ├── README.amp │ ├── compiler-and-tests.jar │ ├── compiler.jar │ └── externs │ │ ├── intersection_observer.js │ │ ├── performance_observer.js │ │ ├── shadow_dom.js │ │ ├── streams.js │ │ └── web_animations.js ├── closure-library │ ├── LICENSE │ ├── README.amp │ ├── compile.sh │ ├── sha384-generated.js │ └── sha384.js ├── css-escape │ ├── LICENSE │ ├── README.amp │ └── css-escape.js ├── d3-geo-projection │ ├── LICENSE │ ├── README.amp │ └── d3-geo-projection.js ├── d3 │ ├── LICENSE │ ├── README.amp │ └── d3.js ├── mustache │ ├── LICENSE │ ├── README.amp │ └── mustache.js ├── optimized-svg-icons │ ├── LICENSE │ ├── README.amp │ ├── README.md │ ├── amp-social-share-svgs.css │ ├── index.html │ ├── script.js │ └── style.css ├── timeagojs │ ├── LICENSE │ ├── README.amp │ ├── timeago-locales.js │ └── timeago.js ├── vega │ ├── LICENSE │ ├── README.amp │ └── vega.js └── webcomponentsjs │ ├── LICENSE │ ├── README.amp │ └── ShadowCSS.js ├── tools ├── errortracker │ ├── README.md │ ├── app.yaml │ ├── errortracker.go │ └── index.yaml └── experiments │ ├── README.md │ ├── experiments.html │ └── experiments.js ├── validator ├── .gitignore ├── AUTHORS ├── CHANGELOG.md ├── OWNERS.yaml ├── README.md ├── build.py ├── chromeextension │ ├── README.md │ ├── _locales │ │ └── en │ │ │ └── messages.json │ ├── amp-link-128.png │ ├── amp-link-38.png │ ├── amp-validator.html │ ├── background.html │ ├── background.js │ ├── bower.json │ ├── build_extension.sh │ ├── content_script.js │ ├── icon-128.png │ ├── icon-16.png │ ├── icon-48.png │ ├── icon-64.png │ ├── invalid-128.png │ ├── invalid-38.png │ ├── manifest.json │ ├── no-amp-128.png │ ├── no-amp-38.png │ ├── package_extension.sh │ ├── polymer.html │ ├── promotional-440.png │ ├── screenshot-chrome-1.png │ ├── screenshot-chrome-2.png │ ├── screenshot-opera-1.png │ ├── screenshot-opera-2.png │ ├── valid-128.png │ └── valid-38.png ├── engine │ ├── amp4ads-parse-css.js │ ├── amp4ads-parse-css_test.js │ ├── css-selectors.js │ ├── dom-walker.js │ ├── htmlparser-interface.js │ ├── htmlparser.js │ ├── htmlparser_test.js │ ├── json-testutil.js │ ├── parse-css.js │ ├── parse-css_test.js │ ├── parse-srcset.js │ ├── parse-srcset_test.js │ ├── parse-url.js │ ├── parse-url_test.js │ ├── saxasjson.js │ ├── tokenize-css.js │ ├── validator-in-browser.js │ ├── validator-light_test.js │ ├── validator.js │ └── validator_test.js ├── gulpjs │ ├── README.md │ ├── index.js │ ├── owers.yaml │ ├── package.json │ ├── run_sample.sh │ ├── sample │ │ └── gulpfile.js │ └── test │ │ └── validate.js ├── nodejs │ ├── README.md │ ├── index.js │ ├── index.sh │ ├── index_test.js │ ├── package.json │ └── postinstall-windows.js ├── package.json ├── testdata │ ├── amp4ads_feature_tests │ │ ├── extensions.html │ │ ├── extensions.out │ │ ├── min_valid_amp4ads.html │ │ ├── min_valid_amp4ads.out │ │ ├── noscript.html │ │ ├── noscript.out │ │ ├── obsolete_tags.html │ │ ├── obsolete_tags.out │ │ ├── style-amp-custom.html │ │ └── style-amp-custom.out │ └── feature_tests │ │ ├── ads.html │ │ ├── ads.out │ │ ├── amp_gist.html │ │ ├── amp_gist.out │ │ ├── amp_identification_missing.html │ │ ├── amp_identification_missing.out │ │ ├── amp_layouts.html │ │ ├── amp_layouts.out │ │ ├── amp_meta_tags.html │ │ ├── amp_meta_tags.out │ │ ├── amp_rtc.html │ │ ├── amp_rtc.out │ │ ├── aria.html │ │ ├── aria.out │ │ ├── article-json-ld.html │ │ ├── article-json-ld.out │ │ ├── article-microdata.html │ │ ├── article-microdata.out │ │ ├── article.html │ │ ├── article.out │ │ ├── bad_viewport.html │ │ ├── bad_viewport.out │ │ ├── base_href.html │ │ ├── base_href.out │ │ ├── css_errors.html │ │ ├── css_errors.out │ │ ├── css_length.html │ │ ├── css_length.out │ │ ├── custom_element_case.html │ │ ├── custom_element_case.out │ │ ├── deprecation_warnings_and_errors.html │ │ ├── deprecation_warnings_and_errors.out │ │ ├── dog_doc_type.html │ │ ├── dog_doc_type.out │ │ ├── duplicate_attribute.html │ │ ├── duplicate_attribute.out │ │ ├── duplicate_unique_tags_and_wrong_parents.html │ │ ├── duplicate_unique_tags_and_wrong_parents.out │ │ ├── empty.html │ │ ├── empty.out │ │ ├── empty_stylesheet.html │ │ ├── empty_stylesheet.out │ │ ├── everything.html │ │ ├── everything.out │ │ ├── extensions.html │ │ ├── extensions.out │ │ ├── forms.html │ │ ├── forms.out │ │ ├── incorrect_custom_style.html │ │ ├── incorrect_custom_style.out │ │ ├── incorrect_mandatory_style.html │ │ ├── incorrect_mandatory_style.out │ │ ├── javascript_xss.html │ │ ├── javascript_xss.out │ │ ├── lang_attr.html │ │ ├── lang_attr.out │ │ ├── link_meta_values.html │ │ ├── link_meta_values.out │ │ ├── mandatory_dimensions.html │ │ ├── mandatory_dimensions.out │ │ ├── manufactured_body.html │ │ ├── manufactured_body.out │ │ ├── mask-icon.html │ │ ├── mask-icon.out │ │ ├── minimum_valid_amp.html │ │ ├── minimum_valid_amp.out │ │ ├── multiple_body_tags.html │ │ ├── multiple_body_tags.out │ │ ├── multiple_body_tags_2.html │ │ ├── multiple_body_tags_2.out │ │ ├── multiple_body_tags_3.html │ │ ├── multiple_body_tags_3.out │ │ ├── new_and_old_boilerplate_mixed.html │ │ ├── new_and_old_boilerplate_mixed.out │ │ ├── new_and_old_boilerplate_mixed2.html │ │ ├── new_and_old_boilerplate_mixed2.out │ │ ├── new_boilerplate.html │ │ ├── new_boilerplate.out │ │ ├── no_custom_js.html │ │ ├── no_custom_js.out │ │ ├── noscript.html │ │ ├── noscript.out │ │ ├── old-boilerplate.html │ │ ├── old-boilerplate.out │ │ ├── parser.html │ │ ├── parser.out │ │ ├── partial_comment.html │ │ ├── partial_comment.out │ │ ├── property_parsing.html │ │ ├── property_parsing.out │ │ ├── rdfa.html │ │ ├── rdfa.out │ │ ├── recipe-json-ld.html │ │ ├── recipe-json-ld.out │ │ ├── recipe-microdata.html │ │ ├── recipe-microdata.out │ │ ├── regexps.html │ │ ├── regexps.out │ │ ├── review-json-ld.html │ │ ├── review-json-ld.out │ │ ├── review-microdata.html │ │ ├── review-microdata.out │ │ ├── runtime_in_body.html │ │ ├── runtime_in_body.out │ │ ├── several_errors.html │ │ ├── several_errors.out │ │ ├── slash_attrs.html │ │ ├── slash_attrs.out │ │ ├── slash_attrs.reserialized │ │ ├── slot.html │ │ ├── slot.out │ │ ├── spec_example.html │ │ ├── spec_example.out │ │ ├── stylesheet_in_body.html │ │ ├── stylesheet_in_body.out │ │ ├── svg.html │ │ ├── svg.out │ │ ├── track_tag.html │ │ ├── track_tag.out │ │ ├── urls.html │ │ ├── urls.out │ │ ├── urls_in_css.html │ │ ├── urls_in_css.out │ │ ├── valid_css_at_rules_amp.html │ │ ├── valid_css_at_rules_amp.out │ │ ├── video-json-ld.html │ │ ├── video-json-ld.out │ │ ├── video-microdata.html │ │ ├── video-microdata.out │ │ ├── xlinkhref.html │ │ └── xlinkhref.out ├── validator-main.protoascii ├── validator.proto ├── validator.protoascii ├── validator_gen.py ├── validator_gen_js.py └── webui │ ├── .gitignore │ ├── @polymer │ ├── amphtml-editor │ │ └── amphtml-editor.html │ ├── ampproject-toolbar │ │ └── ampproject-toolbar.html │ ├── webui-errorlist │ │ └── webui-errorlist.html │ ├── webui-mainpage │ │ └── webui-mainpage.html │ ├── webui-statusbar │ │ └── webui-statusbar.html │ └── webui-urlform │ │ └── webui-urlform.html │ ├── README.md │ ├── amp_favicon.png │ ├── app.yaml │ ├── build.py │ ├── index.html │ ├── logo-blue.svg │ ├── package.json │ ├── serve-standalone.go │ ├── serve.go │ └── webui.js ├── viewer-api └── swipe-api.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "optional": ["utility.inlineEnvironmentVariables"], 3 | "externalHelpers": true, 4 | "whitelist": [ 5 | "es3.memberExpressionLiterals", 6 | "es3.propertyLiterals", 7 | "es5.properties.mutators", 8 | "es6.arrowFunctions", 9 | "es6.blockScoping", 10 | "es6.classes", 11 | "es6.constants", 12 | "es6.destructuring", 13 | "es6.tailCall", 14 | "es6.modules", 15 | "es6.parameters", 16 | "es6.properties.computed", 17 | "es6.properties.shorthand", 18 | "es6.templateLiterals", 19 | "es6.spread", 20 | "utility.inlineEnvironmentVariables" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Please pick a meaningful title for your pull request using sentence case. 2 | 3 | Do not overuse punctuation in the title like `(chore):`. If it is helpful feel free to start with a project name, though, like `ProjectX: Implement some feature`. 4 | 5 | # Title instructions above. 6 | 7 | Enter a succinct description of what is achieved by the PR. Ideally describe why the change is being made. 8 | 9 | Bullet points like 10 | 11 | - Implements aspect X 12 | - Leaves out feature Y because of A 13 | - Improves performance by B 14 | - Improves accessibility by C 15 | 16 | really help with making this more readable. 17 | 18 | Fixes/Closes/Related-to #1 (enter issue number, except in rare cases where none exists). 19 | -------------------------------------------------------------------------------- /.github/workflows/semgrep.yml: -------------------------------------------------------------------------------- 1 | 2 | on: 3 | pull_request: {} 4 | workflow_dispatch: {} 5 | push: 6 | branches: 7 | - main 8 | - master 9 | schedule: 10 | - cron: '0 0 * * *' 11 | name: Semgrep config 12 | jobs: 13 | semgrep: 14 | name: semgrep/ci 15 | runs-on: ubuntu-20.04 16 | env: 17 | SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }} 18 | SEMGREP_URL: https://cloudflare.semgrep.dev 19 | SEMGREP_APP_URL: https://cloudflare.semgrep.dev 20 | SEMGREP_VERSION_CHECK_URL: https://cloudflare.semgrep.dev/api/check-version 21 | container: 22 | image: returntocorp/semgrep 23 | steps: 24 | - uses: actions/checkout@v3 25 | - run: semgrep ci 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .g4ignore 3 | build 4 | .amp-build 5 | c 6 | /dist 7 | dist.3p 8 | dist.tools 9 | examples.min 10 | node_modules 11 | npm-debug.log 12 | .idea 13 | .tm_properties 14 | .settings 15 | .vscode 16 | typings 17 | typings.json 18 | build-system/runner/TESTS-TestSuites.xml 19 | /test/manual/amp-ad.adtech.html 20 | test/coverage 21 | -------------------------------------------------------------------------------- /3p/frame.max.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /3p/nameframe.max.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /3p/remote.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 13 | 14 | 15 |
16 | 25 |
26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - cramforce 2 | - dvoytenko 3 | - jridgewell 4 | - ampproject/validator: 5 | - "*.protoascii" 6 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: gulp serve --host=0.0.0.0 2 | -------------------------------------------------------------------------------- /ads/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - lannka 2 | - zhouyx 3 | -------------------------------------------------------------------------------- /ads/a8.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function a8(global, data) { 24 | validateData(data, ['aid'], ['wid', 'eno', 'mid', 'mat', 'type']); 25 | global.a8Param = data; 26 | writeScript(global, 'https://statics.a8.net/amp/ad.js'); 27 | } 28 | -------------------------------------------------------------------------------- /ads/accesstrade.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function accesstrade(global, data) { 24 | validateData(data, ['atops', 'atrotid']); 25 | global.atParams = data; 26 | writeScript(global, 'https://h.accesstrade.net/js/amp/amp.js'); 27 | } 28 | -------------------------------------------------------------------------------- /ads/admanmedia.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # Admanmedia 18 | 19 | Please visit our web (http://www.admanmedia.com) for more details 20 | ## Example 21 | 22 | ```html 23 | 26 | 27 | ``` 28 | 29 | ## Configuration 30 | 31 | __Required:__ 32 | 33 | - `data-id` - Adunit unique id 34 | -------------------------------------------------------------------------------- /ads/adreactor.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # AdReactor 18 | 19 | ## Example 20 | 21 | ```html 22 | 27 | 28 | ``` 29 | 30 | ## Configuration 31 | 32 | For semantics of configuration, please see ad network documentation. 33 | 34 | Supported parameters: 35 | 36 | - data-pid 37 | - data-zid 38 | - data-custom3 39 | -------------------------------------------------------------------------------- /ads/adthrive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {loadScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function adthrive(global, data) { 24 | validateData(data, ['siteId', 'adUnit'], ['sizes']); 25 | loadScript(global, 'https://ads.adthrive.com/sites/' 26 | + encodeURIComponent(data.siteId) + '/amp.min.js'); 27 | } 28 | -------------------------------------------------------------------------------- /ads/adverline.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2015 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {validateData, writeScript} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function adverline(global, data) { 24 | validateData(data, ['id', 'plc'], ['s', 'section']); 25 | 26 | writeScript(global, 'https://ads.adverline.com/richmedias/amp.js'); 27 | } 28 | -------------------------------------------------------------------------------- /ads/affiliateb.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function affiliateb(global, data) { 24 | validateData(data, ['afb_a', 'afb_p', 'afb_t']); 25 | global.afbParam = data; 26 | writeScript(global, 'https://track.affiliate-b.com/amp/a.js'); 27 | } 28 | -------------------------------------------------------------------------------- /ads/caprofitx.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2015 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {loadScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function caprofitx(global, data) { 24 | validateData(data, ['tagid'], []); 25 | 26 | global.caprofitxConfig = data; 27 | loadScript(global, 'https://cdn.caprofitx.com/tags/amp/profitx_amp.js'); 28 | } 29 | -------------------------------------------------------------------------------- /ads/chargeads.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateSrcPrefix} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function chargeads(global, data) { 24 | const src = data.src; 25 | validateSrcPrefix('https://www.chargeplatform.com/', src); 26 | writeScript(global, src); 27 | } 28 | -------------------------------------------------------------------------------- /ads/directadvert.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # Directadvert 18 | 19 | ## Example 20 | 21 | ```html 22 | 25 | 26 | 27 | ``` 28 | 29 | ## Configuration 30 | 31 | For more information, please [see FAQ](https://www.directadvert.ru/text/help). 32 | 33 | Required parameters: 34 | - data-block-id 35 | -------------------------------------------------------------------------------- /ads/distroscale.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # DistroScale 18 | 19 | ## Example 20 | 21 | ```html 22 | 27 | ``` 28 | 29 | ## Configuration 30 | 31 | For semantics of configuration, please [contact DistroScale](http://www.distroscale.com). 32 | 33 | __Required:__ 34 | 35 | - `data-pid` - Partner ID 36 | -------------------------------------------------------------------------------- /ads/dotandads.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2015 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function dotandads(global, data) { 24 | global.data = data; 25 | writeScript(global, 'https://amp.ad.dotandad.com/dotandadsAmp.js'); 26 | } 27 | -------------------------------------------------------------------------------- /ads/eas.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function eas(global, data) { 24 | validateData(data, ['easDomain']); 25 | global.easAmpParams = data; 26 | writeScript(global, 'https://amp.emediate.eu/amp.v0.js'); 27 | } 28 | -------------------------------------------------------------------------------- /ads/f1e.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | 24 | export function f1e(global, data) { 25 | validateData(data, ['url','target'], []); 26 | global.f1eData = data; 27 | writeScript(global, 'https://img.ak.impact-ad.jp/util/f1e_amp.min.js'); 28 | } 29 | -------------------------------------------------------------------------------- /ads/f1e.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | # FlexOneELEPHANT 19 | 20 | ## Example 21 | 22 | ```html 23 | 27 | 28 | ``` 29 | 30 | ## Configuration 31 | 32 | Supported parameters: 33 | 34 | - `data-url` - Must start with "https:" 35 | - `data-target` 36 | 37 | -------------------------------------------------------------------------------- /ads/felmat.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function felmat(global, data) { 24 | validateData(data, ['host', 'fmt', 'fmk', 'fmp']); 25 | global.fmParam = data; 26 | writeScript(global, 'https://t.' + encodeURIComponent(data.host) + '/js/fmamp.js'); 27 | } 28 | -------------------------------------------------------------------------------- /ads/fluct.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # fluct 18 | 19 | ## Example 20 | 21 | ```html 22 | 26 | 27 | ``` 28 | 29 | ## Configuration 30 | 31 | For more information, please [contact us](https://corp.fluct.jp/en/contact.php). 32 | 33 | Supported parameters: 34 | 35 | Required: 36 | - data-g 37 | - data-u 38 | -------------------------------------------------------------------------------- /ads/genieessp.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {validateData, writeScript} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function genieessp(global, data) { 24 | validateData(data, ['vid', 'zid']); 25 | 26 | global.data = data; 27 | writeScript(global, 'https://js.gsspcln.jp/l/amp.js'); 28 | } 29 | -------------------------------------------------------------------------------- /ads/gmossp.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # GMOSSP 18 | 19 | ## Example 20 | 21 | ```html 22 | 28 | 29 | ``` 30 | 31 | ## Configuration 32 | 33 | For configuration details and to generate your tags, please contact dev@ml.gmo-am.jp 34 | 35 | Supported parameters: 36 | 37 | - data-id 38 | -------------------------------------------------------------------------------- /ads/google/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - ampproject/a4a 2 | -------------------------------------------------------------------------------- /ads/google/a4a/docs/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/ads/google/a4a/docs/1.png -------------------------------------------------------------------------------- /ads/google/a4a/docs/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/ads/google/a4a/docs/2.png -------------------------------------------------------------------------------- /ads/holder.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # Holder 18 | 19 | ## Example 20 | 21 | ```html 22 | 28 | 29 | ``` 30 | 31 | ## Configuration 32 | 33 | For configuration details and to generate your tags, please contact techinfo@holder.com.ua 34 | 35 | Supported parameters: 36 | 37 | - data-block 38 | -------------------------------------------------------------------------------- /ads/imobile.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2015 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript} from '../3p/3p'; 18 | /** 19 | * @param {!Window} global 20 | * @param {!Object} data 21 | */ 22 | export function imobile(global, data) { 23 | global.imobileParam = data; 24 | writeScript(global, 'https://spamp.i-mobile.co.jp/script/amp.js'); 25 | } 26 | -------------------------------------------------------------------------------- /ads/inabox/inabox-host.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | This is still in development. Check [here](https://github.com/ampproject/amphtml/issues/5700) for details. -------------------------------------------------------------------------------- /ads/kixer.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # Kixer 18 | 19 | ## Example 20 | 21 | ```html 22 | 25 | 26 | ``` 27 | 28 | ## Configuration 29 | 30 | For ad slot setup, please [contact Kixer](http://kixer.com). 31 | 32 | Supported parameters: 33 | 34 | - `data-adslot` 35 | -------------------------------------------------------------------------------- /ads/ligatus.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateSrcPrefix} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function ligatus(global, data) { 24 | const src = data.src; 25 | validateSrcPrefix('https://a-ssl.ligatus.com/', src); 26 | writeScript(global, src); 27 | } 28 | -------------------------------------------------------------------------------- /ads/ligatus.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # Ligatus 18 | 19 | ## Example 20 | 21 | ```html 22 | 25 | 26 | ``` 27 | 28 | ## Configuration 29 | 30 | For further configuration details, please contact mobile@ligatus.com 31 | 32 | Supported parameters: 33 | 34 | - `src` -------------------------------------------------------------------------------- /ads/mediavine.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {loadScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function mediavine(global, data) { 24 | validateData(data, ['site'], ['sizes']); 25 | loadScript(global, 'https://scripts.mediavine.com/amp/' 26 | + encodeURIComponent(data.site) + '.js'); 27 | } 28 | -------------------------------------------------------------------------------- /ads/nativo.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # Nativo 18 | 19 | ## Example 20 | 21 | ```html 22 | 26 | 27 | ``` 28 | 29 | ## Configuration 30 | 31 | For semantics of configuration, please [contact Nativo](http://www.nativo.net/#contact-us). 32 | 33 | - data-premium: (optional) Will switch to premium 34 | -------------------------------------------------------------------------------- /ads/nend.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateData} from '../3p/3p'; 18 | 19 | const nendFields = ['nend_params']; 20 | 21 | /** 22 | * @param {!Window} global 23 | * @param {!Object} data 24 | */ 25 | export function nend(global, data) { 26 | validateData(data, nendFields, []); 27 | 28 | global.nendParam = data; 29 | writeScript(global, 'https://js1.nend.net/js/amp.js'); 30 | } 31 | -------------------------------------------------------------------------------- /ads/polymorphicads.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function polymorphicads(global, data) { 24 | validateData(data, ['adunit', 'params']); 25 | global.polyParam = data; 26 | writeScript(global, 'https://www.polymorphicads.jp/js/amp.js'); 27 | } 28 | -------------------------------------------------------------------------------- /ads/pubmatic.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # pubmatic 18 | 19 | ## Example 20 | 21 | ```html 22 | 25 | 26 | ``` 27 | 28 | ## Configuration 29 | 30 | For semantics of configuration, please see ad network documentation. 31 | 32 | Supported parameters: 33 | 34 | - json 35 | - width 36 | - height -------------------------------------------------------------------------------- /ads/purch.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # Purch 18 | 19 | ## Example 20 | 21 | ```html 22 | 26 | 27 | ``` 28 | 29 | ## Configuration 30 | 31 | Supported parameters: 32 | 33 | - `data-pid` placement id 34 | - `data-divid` div id of unit -------------------------------------------------------------------------------- /ads/sharethrough.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function sharethrough(global, data) { 24 | validateData(data, ['pkey'], []); 25 | global.pkey = data.pkey; 26 | writeScript(global, 'https://native.sharethrough.com/iframe/amp.js'); 27 | } 28 | -------------------------------------------------------------------------------- /ads/slimcutmedia.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # SlimCut Media 18 | 19 | ## Example 20 | 21 | ```html 22 | 26 | 27 | ``` 28 | 29 | ## Configuration 30 | 31 | Supported parameters: 32 | 33 | - data-pid (required) 34 | - data-ffc 35 | -------------------------------------------------------------------------------- /ads/teads.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # Teads 18 | 19 | ## Example 20 | 21 | ```html 22 | 26 | 27 | ``` 28 | 29 | ## Configuration 30 | 31 | For semantics of configuration, please contact [Teads](http://teads.tv/fr/contact/). 32 | 33 | Supported parameters: 34 | 35 | - data-pid 36 | -------------------------------------------------------------------------------- /ads/triplelift.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2015 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {loadScript, validateSrcPrefix} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function triplelift(global, data) { 24 | const src = data.src; 25 | validateSrcPrefix('https://ib.3lift.com/', src); 26 | loadScript(global, src); 27 | } 28 | -------------------------------------------------------------------------------- /ads/valuecommerce.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function valuecommerce(global, data) { 24 | validateData(data, ['pid'], ['sid', 'vcptn','om']); 25 | global.vcParam = data; 26 | writeScript(global, 'https://amp.valuecommerce.com/amp_bridge.js'); 27 | } 28 | 29 | -------------------------------------------------------------------------------- /ads/yahoo.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {validateData, writeScript} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function yahoo(global, data) { 24 | validateData(data, ['sid', 'site', 'sa']); 25 | global.yadData = data; 26 | writeScript(global, 'https://s.yimg.com/os/ampad/display.js'); 27 | } 28 | -------------------------------------------------------------------------------- /ads/yahoojp.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function yahoojp(global, data) { 24 | validateData(data, ['yadsid'], []); 25 | global.yahoojpParam = data; 26 | writeScript(global, 27 | 'https://s.yimg.jp/images/listing/tool/yads/ydn/amp/amp.js'); 28 | } 29 | -------------------------------------------------------------------------------- /ads/yahoojp.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # Yahoo JP 18 | 19 | ## Example 20 | 21 | ```html 22 | 28 | 29 | ``` 30 | 31 | ## Configuration 32 | 33 | For configuration details and to generate your tags, please contact http://marketing.yahoo.co.jp/contact/ 34 | 35 | 36 | 37 | Supported parameters: 38 | 39 | - data-yadsid 40 | -------------------------------------------------------------------------------- /ads/yieldone.md: -------------------------------------------------------------------------------- 1 | # YIELD ONE 2 | --- 3 | 4 | ## Example 5 | --- 6 | 7 | 14 | 15 | 16 | 17 | ## Configuration 18 | --- 19 | For configuration details and to generate your tags, please contact https://yieldone.com/service/contact/media/index.php?act=input or 20 | 21 | Supported parameters: 22 | 23 | - data-pubid 24 | - data-pid 25 | -------------------------------------------------------------------------------- /ads/zergnet.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {writeScript, validateData} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function zergnet(global, data) { 24 | validateData(data, ['zergid'], []); 25 | global.zergnetWidgetId = data.zergid; 26 | writeScript(global, 'https://www.zergnet.com/zerg-amp.js'); 27 | } 28 | -------------------------------------------------------------------------------- /ads/zucks.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {validateData, writeScript} from '../3p/3p'; 18 | 19 | /** 20 | * @param {!Window} global 21 | * @param {!Object} data 22 | */ 23 | export function zucks(global, data) { 24 | validateData(data, ['frameId']); 25 | writeScript(global, `https://j.zucks.net.zimg.jp/j?f=${data['frameId']}`); 26 | } 27 | -------------------------------------------------------------------------------- /ads/zucks.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # Zucks 18 | 19 | ## Example 20 | 21 | ```html 22 | 25 | 26 | ``` 27 | 28 | ## Configuration 29 | 30 | For more information, please [contact Zucks](https://zucks.co.jp/contact/). 31 | 32 | Supported parameters: 33 | - data-frame-id -------------------------------------------------------------------------------- /build-system/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - erwinmombay 2 | - cramforce 3 | -------------------------------------------------------------------------------- /build-system/eslint-rules/no-array-destructuring.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 'use strict'; 17 | 18 | module.exports = function(context) { 19 | return { 20 | ArrayPattern: function(node) { 21 | context.report(node, 'No Array destructuring allowed.'); 22 | } 23 | }; 24 | }; 25 | -------------------------------------------------------------------------------- /build-system/eslint-rules/no-for-of-statement.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 'use strict'; 17 | 18 | module.exports = function(context) { 19 | return { 20 | ForOfStatement: function(node) { 21 | context.report(node, 'No for-of statement allowed.'); 22 | } 23 | }; 24 | }; 25 | -------------------------------------------------------------------------------- /build-system/eslint-rules/no-spread.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 'use strict'; 17 | 18 | module.exports = function(context) { 19 | return { 20 | SpreadElement: function(node) { 21 | context.report(node, 'No spread element allowed.'); 22 | } 23 | }; 24 | }; 25 | -------------------------------------------------------------------------------- /build-system/global-configs/README.md: -------------------------------------------------------------------------------- 1 | # Flags 2 | 3 | Please be aware that canary-config.json is actually 1% of production (which is 4 | 99%). There are some instances where you might not want this and you should 5 | instead configure the prod-config.json file with a correct frequency value 6 | besides 1 or 0. 7 | -------------------------------------------------------------------------------- /build-system/global-configs/canary-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "allow-doc-opt-in": ["visibility-v3", "amp-animation", "ampdoc-shell"], 3 | "allow-url-opt-in": ["pump-early-frame"], 4 | 5 | "canary": 1, 6 | "expAdsenseA4A": 0.01, 7 | "expDoubleclickA4A": 0.01, 8 | "expAdSenseFFDR": 0.01, 9 | "a4aProfilingRate": 1, 10 | "dbclk_a4a_viz_change": 0.02, 11 | "ad-type-custom": 1, 12 | "ios-embed-wrapper": 1, 13 | "amp-apester-media": 1, 14 | "amp-playbuzz": 1, 15 | "chunked-amp": 1, 16 | "pump-early-frame": 1, 17 | "sticky-ad-early-load": 1, 18 | "amp-auto-ads": 1, 19 | "amp-auto-ads-adsense-holdout": 0.1, 20 | "slidescroll-disable-css-snap": 1, 21 | "visibility-v3": 1, 22 | "version-locking": 1, 23 | "as-use-attr-for-format": 1, 24 | "a4aFastFetchDoubleclickLaunched": 0, 25 | "a4aFastFetchAdSenseLaunched": 0, 26 | "a4a-measure-get-ad-urls": 1, 27 | "a4a-new-signature-verifier": 0.01, 28 | "ad-loader-v2": 1, 29 | "3p-use-ampcontext": 0, 30 | "amp-animation": 1, 31 | "amp-sidebar toolbar": 1 32 | } 33 | -------------------------------------------------------------------------------- /build-system/global-configs/prod-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "allow-doc-opt-in": ["visibility-v3", "amp-animation", "ampdoc-shell"], 3 | "allow-url-opt-in": ["pump-early-frame"], 4 | 5 | "canary": 0, 6 | "expAdsenseA4A": 0.01, 7 | "expDoubleclickA4A": 0.01, 8 | "expAdSenseFFDR": 0.01, 9 | "dbclk_a4a_viz_change": 0.02, 10 | "a4aProfilingRate": 0.1, 11 | "ad-type-custom": 1, 12 | "ios-embed-wrapper": 1, 13 | "amp-apester-media": 1, 14 | "amp-playbuzz": 1, 15 | "chunked-amp": 1, 16 | "sticky-ad-early-load": 1, 17 | "amp-auto-ads": 1, 18 | "amp-auto-ads-adsense-holdout": 0.1, 19 | "slidescroll-disable-css-snap": 1, 20 | "version-locking": 1, 21 | "visibility-v3": 1, 22 | "a4aFastFetchDoubleclickLaunched": 0, 23 | "a4aFastFetchAdSenseLaunched": 0, 24 | "a4a-new-signature-verifier": 0.01, 25 | "pump-early-frame": 1, 26 | "a4a-measure-get-ad-urls": 0, 27 | "ad-loader-v2": 1, 28 | "3p-use-ampcontext": 0, 29 | "amp-animation": 1, 30 | "amp-sidebar toolbar": 1 31 | } 32 | -------------------------------------------------------------------------------- /build-system/global-configs/sw-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "cache-service-worker-blacklist": [1473441896765, 1473791909894, 1473894434081, 1474060428356] 3 | } 4 | -------------------------------------------------------------------------------- /build-system/runner/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /build-system/runner/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | runner 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /build-system/runner/dist/runner.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/build-system/runner/dist/runner.jar -------------------------------------------------------------------------------- /build-system/runner/lib/jar-in-jar-loader.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/build-system/runner/lib/jar-in-jar-loader.zip -------------------------------------------------------------------------------- /build-system/runner/runner.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /build-system/server-a4a-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | A4A Envelope 6 | 7 | 8 | 9 | 10 | 11 | 12 |

A4A Envelope

13 |
3p: FORCE3P
14 |
url: AD_URL
15 |
size: AD_WIDTHxAD_HEIGHT
16 | 17 |
scroll down to see the ad
18 | 19 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /build-system/server-inabox-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | In-a-box Envelope 6 | 7 | 8 | 16 | 17 | 18 |

In-a-box Envelope

19 |
url: AD_URL
20 |
size: AD_WIDTHxAD_HEIGHT
21 | 22 |
scroll down to see the ad
23 | 24 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /build-system/tasks/js-license.txt: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2015 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | -------------------------------------------------------------------------------- /build-system/tasks/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "markdown-link-check": "^3.0.3" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /builtins/README.md: -------------------------------------------------------------------------------- 1 | # AMP HTML Built-in Components 2 | 3 | The following components are always available in AMP documents: 4 | 5 | | Component | Description | 6 | | -------------------------- | --------------------------------------------------- | 7 | | [`amp-img`](amp-img.md) | Replacement for the HTML `img` tag. | 8 | | [`amp-pixel`](amp-pixel.md) | Used as tracking pixel to count page views. | 9 | -------------------------------------------------------------------------------- /caches.json: -------------------------------------------------------------------------------- 1 | { 2 | "caches": [ 3 | { 4 | "id": "google", 5 | "name": "Google AMP Cache", 6 | "docs": "https://developers.google.com/amp/cache/", 7 | "updateCacheApiDomainSuffix": "cdn.ampproject.org" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /contributing/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - jrozier 2 | -------------------------------------------------------------------------------- /contributing/working-groups.md: -------------------------------------------------------------------------------- 1 | # Working groups 2 | 3 | AMP Project working groups bring together parties with related interests to discuss ideas for how AMP can evolve and to receive updates on new features and changes in AMP that are relevant to the group. 4 | 5 | Working groups include a group email alias as well as periodic video conferences (over Google Hangouts). 6 | 7 | The News Publisher Working Group is currently our only active working group. See the [amp-news-publishers-wg Google group](https://groups.google.com/forum/#!forum/amp-news-publishers-wg) to express interest in joining this working group. 8 | 9 | We are actively exploring the creation of other working groups and will update this page as new working groups are created. 10 | -------------------------------------------------------------------------------- /css/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - @aghassemi 2 | - @camelburrito 3 | -------------------------------------------------------------------------------- /examples/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - camelburrito 2 | - lannka 3 | -------------------------------------------------------------------------------- /examples/alp/creative.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /examples/ampcontext-creative-json.html: -------------------------------------------------------------------------------- 1 | {"creative": 2 | " Test Ad using ampcontext.js to create window.context ", 3 | "signature":"123"} 4 | -------------------------------------------------------------------------------- /examples/analytics.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "requests": { 3 | "event": "https://raw.githubusercontent.com/ampproject/amphtml/master/examples/img/ampicon.png?remote-test&title=${title}&r=${random}" 4 | }, 5 | "vars": { 6 | "title": "Example Request" 7 | }, 8 | "triggers": { 9 | "remotePageview": { 10 | "on": "visible", 11 | "request": "event" 12 | } 13 | }, 14 | "transport" : {"beacon": false, "xhrpost": false} 15 | } 16 | 17 | -------------------------------------------------------------------------------- /examples/av/ForBiggerJoyrides.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/av/ForBiggerJoyrides.mp4 -------------------------------------------------------------------------------- /examples/av/audio.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/av/audio.mp3 -------------------------------------------------------------------------------- /examples/bind/img/ic_menu_white_24dp_1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/img/ic_menu_white_24dp_1x.png -------------------------------------------------------------------------------- /examples/bind/img/ic_menu_white_24dp_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/img/ic_menu_white_24dp_2x.png -------------------------------------------------------------------------------- /examples/bind/img/ic_search_white_24dp_1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/img/ic_search_white_24dp_1x.png -------------------------------------------------------------------------------- /examples/bind/img/ic_search_white_24dp_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/img/ic_search_white_24dp_2x.png -------------------------------------------------------------------------------- /examples/bind/shirts/black.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/black.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/blue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/blue.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/brown.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/brown.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/dark-green.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/dark-green.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/gray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/gray.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/light-gray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/light-gray.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/navy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/navy.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/swatch/black.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/swatch/black.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/swatch/blue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/swatch/blue.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/swatch/brown.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/swatch/brown.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/swatch/dark-green.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/swatch/dark-green.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/swatch/gray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/swatch/gray.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/swatch/light-gray.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/swatch/light-gray.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/swatch/navy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/swatch/navy.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/swatch/wine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/swatch/wine.jpg -------------------------------------------------------------------------------- /examples/bind/shirts/wine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/bind/shirts/wine.jpg -------------------------------------------------------------------------------- /examples/custom.ad.example.json: -------------------------------------------------------------------------------- 1 | { 2 | "1": { 3 | "src": "https://bachtrack.com/files/46901-banner-728x90px-uk-2016-5sec.gif", 4 | "href":"https://bachtrack.com", 5 | "info":"Info1" 6 | }, 7 | "2": { 8 | "src":"https://bachtrack.com/files/42327-membership-200x200.gif", 9 | "href":"http://onestoparts.com", 10 | "info":"Info2" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/custom.ad.example.single.json: -------------------------------------------------------------------------------- 1 | { 2 | "src": "https://bachtrack.com/files/46510-45th-hkaf-social-media-image-bachtrack-728x90.jpg", 3 | "href":"https://bachtrack.com", 4 | "info":"Info1" 5 | } 6 | -------------------------------------------------------------------------------- /examples/fonts/ComicAMP.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/fonts/ComicAMP.ttf -------------------------------------------------------------------------------- /examples/fonts/ComicAMPBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/fonts/ComicAMPBold.ttf -------------------------------------------------------------------------------- /examples/img/ampicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/img/ampicon.png -------------------------------------------------------------------------------- /examples/img/analytics.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/img/analytics.gif -------------------------------------------------------------------------------- /examples/img/bigbuckbunny.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/img/bigbuckbunny.jpg -------------------------------------------------------------------------------- /examples/img/cats-anim-placeholder.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/img/cats-anim-placeholder.gif -------------------------------------------------------------------------------- /examples/img/cats-anim.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/img/cats-anim.gif -------------------------------------------------------------------------------- /examples/img/clock.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/img/clock.jpg -------------------------------------------------------------------------------- /examples/img/hero@1x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/img/hero@1x.jpg -------------------------------------------------------------------------------- /examples/img/hero@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/img/hero@2x.jpg -------------------------------------------------------------------------------- /examples/img/ima-poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/img/ima-poster.png -------------------------------------------------------------------------------- /examples/img/sample.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/img/sample.jpg -------------------------------------------------------------------------------- /examples/img/sea@1x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/img/sea@1x.jpg -------------------------------------------------------------------------------- /examples/img/sea@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/img/sea@2x.jpg -------------------------------------------------------------------------------- /examples/img/x-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/img/x-icon.png -------------------------------------------------------------------------------- /examples/medium-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "prefer_related_applications": true, 3 | "related_applications": [ 4 | { 5 | "platform": "play", 6 | "id": "com.medium.reader", 7 | "url": "android-app://com.medium.reader/https/medium.com/p/cb7f223fad86" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /examples/old-boilerplate.amp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Twitter examples 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |

AMP boilerplate

14 |

Testing if the old validator is still accepted.

15 |

16 | "Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit..." 17 | "There is no one who loves pain itself, who seeks after it and wants to have it, simply because it is pain..." 18 |

19 | 20 | 21 | -------------------------------------------------------------------------------- /examples/vega-data/map.json: -------------------------------------------------------------------------------- 1 | { 2 | "width": 740, 3 | "height": 500, 4 | "padding": 0, 5 | "data": [ 6 | { 7 | "name": "world", 8 | "url": "vega-data/world-110m.json", 9 | "format": {"type": "topojson", "feature": "countries"}, 10 | "transform": [{ 11 | "type": "geopath", 12 | "projection": "winkel3", 13 | "scale": 170, 14 | "translate": [350, 250] 15 | }] 16 | } 17 | ], 18 | "marks": [ 19 | { 20 | "type": "path", 21 | "from": {"data": "world"}, 22 | "properties": { 23 | "enter": { 24 | "stroke": {"value": "#fff"}, 25 | "path": {"field": "layout_path"} 26 | }, 27 | "update": {"fill": {"value": "#ccc"}}, 28 | "hover": {"fill": {"value": "pink"}} 29 | } 30 | } 31 | ] 32 | } -------------------------------------------------------------------------------- /examples/visual-tests/article-access.amp/img/hero@1x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/visual-tests/article-access.amp/img/hero@1x.jpg -------------------------------------------------------------------------------- /examples/visual-tests/article-access.amp/img/hero@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/visual-tests/article-access.amp/img/hero@2x.jpg -------------------------------------------------------------------------------- /examples/visual-tests/article-access.amp/img/sample.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/visual-tests/article-access.amp/img/sample.jpg -------------------------------------------------------------------------------- /examples/visual-tests/article-access.amp/img/sea@1x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/visual-tests/article-access.amp/img/sea@1x.jpg -------------------------------------------------------------------------------- /examples/visual-tests/article-access.amp/img/sea@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/visual-tests/article-access.amp/img/sea@2x.jpg -------------------------------------------------------------------------------- /examples/visual-tests/article.amp/img/hero@1x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/visual-tests/article.amp/img/hero@1x.jpg -------------------------------------------------------------------------------- /examples/visual-tests/article.amp/img/hero@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/visual-tests/article.amp/img/hero@2x.jpg -------------------------------------------------------------------------------- /examples/visual-tests/article.amp/img/sample.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/visual-tests/article.amp/img/sample.jpg -------------------------------------------------------------------------------- /examples/visual-tests/article.amp/img/sea@1x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/visual-tests/article.amp/img/sea@1x.jpg -------------------------------------------------------------------------------- /examples/visual-tests/article.amp/img/sea@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/visual-tests/article.amp/img/sea@2x.jpg -------------------------------------------------------------------------------- /examples/visual-tests/blank-page/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/visual-tests/blank-page/.gitkeep -------------------------------------------------------------------------------- /examples/visual-tests/font.amp/fonts/ComicAMP.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/visual-tests/font.amp/fonts/ComicAMP.ttf -------------------------------------------------------------------------------- /examples/visual-tests/font.amp/fonts/ComicAMPBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/examples/visual-tests/font.amp/fonts/ComicAMPBold.ttf -------------------------------------------------------------------------------- /extensions/amp-3q-player/0.1/test/validator-amp-3q-player.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-3q-player/0.1/test/validator-amp-3q-player.html:41:4 The mandatory attribute 'data-id' is missing in tag 'amp-3q-player'. (see https://www.ampproject.org/docs/reference/components/amp-3q-player) [AMP_TAG_PROBLEM] 3 | -------------------------------------------------------------------------------- /extensions/amp-a4a/0.1/test/testdata/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | // We include some JSON. It doesn't like dangling commas. 4 | "comma-dangle": 0, 5 | // Files in this directory are created by automated processes; line lengths 6 | // aren't under our control. 7 | "max-len": 0 8 | } 9 | } -------------------------------------------------------------------------------- /extensions/amp-a4a/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - ampproject/a4a 2 | 3 | -------------------------------------------------------------------------------- /extensions/amp-access-laterpay/0.1/test/validator-amp-access-laterpay.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-access-laterpay/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - trodrigues 2 | -------------------------------------------------------------------------------- /extensions/amp-access/0.1/access-expr-impl.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | ## Overview 18 | 19 | This documentation describes how to build `access-expr-impl.js` based on the 20 | `access-expr-impl.jison`. 21 | 22 | We use [Jison](https://zaach.github.io/jison/) grammar compiler. 23 | 24 | ## Compile 25 | 26 | Run: 27 | 28 | ``` 29 | gulp compile-access-expr 30 | ``` 31 | -------------------------------------------------------------------------------- /extensions/amp-access/0.1/amp-access.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2015 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | -------------------------------------------------------------------------------- /extensions/amp-access/0.1/test/validator-amp-access.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-access/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - dvoytenko 2 | -------------------------------------------------------------------------------- /extensions/amp-accordion/0.1/test/validator-amp-accordion.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-accordion/0.1/test/validator-amp-accordion.html:62:4 Tag 'amp-accordion' is disallowed as child of tag 'amp-accordion'. Child tag must be one of ['section']. (see https://www.ampproject.org/docs/reference/components/amp-accordion) [AMP_TAG_PROBLEM] 3 | amp-accordion/0.1/test/validator-amp-accordion.html:64:4 Tag 'p' is disallowed as child of tag 'amp-accordion'. Child tag must be one of ['section']. (see https://www.ampproject.org/docs/reference/components/amp-accordion) [AMP_TAG_PROBLEM] 4 | amp-accordion/0.1/test/validator-amp-accordion.html:66:6 Tag 'div' is disallowed as first child of tag 'amp-accordion > section'. First child tag must be one of ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header']. [AMP_TAG_PROBLEM] 5 | amp-accordion/0.1/test/validator-amp-accordion.html:65:4 Tag 'amp-accordion > section' must have 2 child tags - saw 3 child tags. [AMP_TAG_PROBLEM] 6 | -------------------------------------------------------------------------------- /extensions/amp-accordion/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - camelburrito 2 | -------------------------------------------------------------------------------- /extensions/amp-ad-network-adsense-impl/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - ampproject/a4a 2 | 3 | -------------------------------------------------------------------------------- /extensions/amp-ad-network-cloudflare-impl/0.1/cloudflare-a4a-config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /** 18 | * Determines which tags desire A4A handling 19 | * 20 | * @returns {boolean} 21 | */ 22 | export function cloudflareIsA4AEnabled() { 23 | // We assume fast fetch for all content, but this will gracefully degrade, 24 | // when non-a4a content is delivered 25 | return true; 26 | } 27 | -------------------------------------------------------------------------------- /extensions/amp-ad-network-cloudflare-impl/0.1/data/fake_a4a.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |

Cloudflare

12 | 19 | 20 | -------------------------------------------------------------------------------- /extensions/amp-ad-network-cloudflare-impl/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - oliy 2 | -------------------------------------------------------------------------------- /extensions/amp-ad-network-doubleclick-impl/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - ampproject/a4a 2 | 3 | -------------------------------------------------------------------------------- /extensions/amp-ad-network-fake-impl/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - ampproject/a4a 2 | 3 | -------------------------------------------------------------------------------- /extensions/amp-ad-network-gmossp-impl/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - ampproject/a4a 2 | 3 | -------------------------------------------------------------------------------- /extensions/amp-ad-network-triplelift-impl/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - ampproject/a4a 2 | - szach 3 | -------------------------------------------------------------------------------- /extensions/amp-ad/0.1/test/validator-amp-ad.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-ad/0.1/test/validator-amp-ad.html:45:4 The tag 'amp-ad with data-multi-size attribute' may not appear as a descendant of tag 'amp-fx-flying-carpet'. (see https://www.ampproject.org/docs/reference/components/amp-ad) [AMP_TAG_PROBLEM] 3 | amp-ad/0.1/test/validator-amp-ad.html:49:4 The tag 'amp-embed with data-multi-size attribute' may not appear as a descendant of tag 'amp-fx-flying-carpet'. (see https://www.ampproject.org/docs/reference/components/amp-ad) [AMP_TAG_PROBLEM] 4 | -------------------------------------------------------------------------------- /extensions/amp-ad/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - zhouyx 2 | - lannka 3 | -------------------------------------------------------------------------------- /extensions/amp-analytics/0.1/test/validator-analytics-notification.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-analytics/0.1/test/validator-analytics.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-analytics/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - avimehta 2 | - dvoytenko 3 | - lannka 4 | -------------------------------------------------------------------------------- /extensions/amp-animation/0.1/css-expr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {parser} from './css-expr-impl'; 18 | 19 | 20 | /** 21 | * @param {string} cssString 22 | * @return {?./css-expr-ast.CssNode} 23 | */ 24 | export function parseCss(cssString) { 25 | return parser.parse(cssString); 26 | } 27 | -------------------------------------------------------------------------------- /extensions/amp-animation/0.1/test/validator-amp-animation.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-animation/0.1/test/validator-amp-animation.html:44:4 The parent tag of tag 'amp-animation' is 'span', but it can only be 'body'. (see https://www.ampproject.org/docs/reference/components/amp-animation) [AMP_TAG_PROBLEM] 3 | amp-animation/0.1/test/validator-amp-animation.html:56:2 The attribute 'trigger' in tag 'amp-animation' is set to the invalid value 'display'. (see https://www.ampproject.org/docs/reference/components/amp-animation) [AMP_TAG_PROBLEM] 4 | amp-animation/0.1/test/validator-amp-animation.html:67:2 Tag 'amp-animation' must have 1 child tags - saw 0 child tags. (see https://www.ampproject.org/docs/reference/components/amp-animation) [AMP_TAG_PROBLEM] 5 | -------------------------------------------------------------------------------- /extensions/amp-animation/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - alanorozco 3 | - dvoytenko 4 | -------------------------------------------------------------------------------- /extensions/amp-apester-media/0.1/test/validator-amp-apester-media.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-apester-media/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - mrsufgi 2 | -------------------------------------------------------------------------------- /extensions/amp-app-banner/0.1/test/validator-amp-app-banner-missing-meta.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-app-banner/0.1/test/validator-amp-app-banner-missing-meta.html:46:7 The tag 'amp-app-banner data source' is missing or incorrect, but required by 'amp-app-banner'. (see https://www.ampproject.org/docs/reference/components/amp-app-banner) [AMP_TAG_PROBLEM] 3 | -------------------------------------------------------------------------------- /extensions/amp-app-banner/0.1/test/validator-amp-app-banner-only-one-meta.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-app-banner/0.1/test/validator-amp-app-banner.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-app-banner/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | -------------------------------------------------------------------------------- /extensions/amp-audio/0.1/test/validator-amp-audio.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-audio/0.1/test/validator-amp4ads-amp-audio.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-audio/0.1/test/validator-amp4ads-amp-audio.html:41:2 The attribute 'autoplay' may not appear in tag 'amp-audio (A4A)'. (see https://www.ampproject.org/docs/reference/components/amp-audio) [AMP_TAG_PROBLEM] 3 | -------------------------------------------------------------------------------- /extensions/amp-audio/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - wassgha 3 | -------------------------------------------------------------------------------- /extensions/amp-auto-ads/0.1/test/validator-amp-auto-ads.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-auto-ads/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - tlong2 2 | -------------------------------------------------------------------------------- /extensions/amp-bind/0.1/amp-bind.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import {AmpState} from './amp-state'; 18 | import {Bind} from './bind-impl'; 19 | 20 | /** @const {string} */ 21 | const TAG = 'amp-bind'; 22 | 23 | AMP.extension(TAG, '0.1', function(AMP) { 24 | AMP.registerServiceForDoc('bind', Bind); 25 | AMP.registerElement('amp-state', AmpState); 26 | }); 27 | -------------------------------------------------------------------------------- /extensions/amp-bind/0.1/bind-events.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /** 18 | * Enum used to specify Events for the Amp Bind extension 19 | * 20 | * @enum {string} 21 | */ 22 | export const BindEvents = { 23 | INITIALIZE: 'amp:bind:initialize', 24 | RESCAN_TEMPLATE: 'amp:bind:rescan-template', 25 | SET_STATE: 'amp:bind:setState', 26 | }; 27 | -------------------------------------------------------------------------------- /extensions/amp-bind/0.1/bind-expr-impl.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | ## Overview 18 | 19 | This documentation describes how to build `bind-expr-impl.js` based on the 20 | `bind-expr-impl.jison`. 21 | 22 | We use [Jison](https://zaach.github.io/jison/) grammar compiler. 23 | 24 | ## Compile 25 | 26 | Run: 27 | 28 | ``` 29 | gulp compile-bind-expr 30 | ``` 31 | -------------------------------------------------------------------------------- /extensions/amp-bind/0.1/test/validator-amp-bind.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-bind/0.1/test/validator-autosuggest.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-bind/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - choumx 2 | -------------------------------------------------------------------------------- /extensions/amp-brid-player/0.1/test/validator-amp-brid-player.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-brid-player/0.1/test/validator-amp-brid-player.html:48:2 The mandatory attribute 'data-player' is missing in tag 'amp-brid-player'. (see https://www.ampproject.org/docs/reference/components/amp-brid-player) [AMP_TAG_PROBLEM] 3 | amp-brid-player/0.1/test/validator-amp-brid-player.html:55:2 The tag 'amp-brid-player' is missing a mandatory attribute - pick one of ['data-playlist', 'data-video']. (see https://www.ampproject.org/docs/reference/components/amp-brid-player) [AMP_TAG_PROBLEM] 4 | -------------------------------------------------------------------------------- /extensions/amp-brid-player/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - DarXector 3 | -------------------------------------------------------------------------------- /extensions/amp-brightcove/0.1/test/validator-amp-brightcove.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-brightcove/0.1/test/validator-amp-brightcove.html:54:2 The mandatory attribute 'data-account' is missing in tag 'amp-brightcove'. (see https://www.ampproject.org/docs/reference/components/amp-brightcove) [AMP_TAG_PROBLEM] 3 | -------------------------------------------------------------------------------- /extensions/amp-brightcove/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - mister-ben 3 | -------------------------------------------------------------------------------- /extensions/amp-call-tracking/0.1/test/validator-amp-call-tracking.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-call-tracking/0.1/test/validator-amp-call-tracking.html:37:2 Tag 'amp-call-tracking' must have 1 child tags - saw 0 child tags. (see https://www.ampproject.org/docs/reference/components/amp-call-tracking) [AMP_TAG_PROBLEM] 3 | amp-call-tracking/0.1/test/validator-amp-call-tracking.html:41:2 Tag 'amp-call-tracking' must have 1 child tags - saw 2 child tags. (see https://www.ampproject.org/docs/reference/components/amp-call-tracking) [AMP_TAG_PROBLEM] 4 | amp-call-tracking/0.1/test/validator-amp-call-tracking.html:47:2 The mandatory attribute 'config' is missing in tag 'amp-call-tracking'. (see https://www.ampproject.org/docs/reference/components/amp-call-tracking) [AMP_TAG_PROBLEM] 5 | amp-call-tracking/0.1/test/validator-amp-call-tracking.html:53:4 Tag 'div' is disallowed as child of tag 'amp-call-tracking'. Child tag must be one of ['a']. (see https://www.ampproject.org/docs/reference/components/amp-call-tracking) [AMP_TAG_PROBLEM] 6 | -------------------------------------------------------------------------------- /extensions/amp-call-tracking/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - alanorozco 2 | -------------------------------------------------------------------------------- /extensions/amp-carousel/0.1/test/validator-amp-carousel.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-carousel/0.1/test/validator-amp-carousel.html:32:2 The attribute 'delay' in tag 'amp-carousel' is set to the invalid value ''. (see https://www.ampproject.org/docs/reference/components/amp-carousel) [AMP_TAG_PROBLEM] 3 | -------------------------------------------------------------------------------- /extensions/amp-carousel/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - camelburrito 2 | - dvoytenko 3 | -------------------------------------------------------------------------------- /extensions/amp-crypto-polyfill/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - lannka 2 | -------------------------------------------------------------------------------- /extensions/amp-dailymotion/0.1/test/validator-amp-dailymotion.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-dailymotion/0.1/test/validator-amp-dailymotion.html:48:0 The attribute 'data-videoid' in tag 'amp-dailymotion' is set to the invalid value 'i don't think so'. (see https://www.ampproject.org/docs/reference/components/amp-dailymotion) [AMP_TAG_PROBLEM] 3 | amp-dailymotion/0.1/test/validator-amp-dailymotion.html:52:0 The mandatory attribute 'data-videoid' is missing in tag 'amp-dailymotion'. (see https://www.ampproject.org/docs/reference/components/amp-dailymotion) [AMP_TAG_PROBLEM] 4 | amp-dailymotion/0.1/test/validator-amp-dailymotion.html:55:0 The attribute 'data-ui-highlight' in tag 'amp-dailymotion' is set to the invalid value 'blue'. (see https://www.ampproject.org/docs/reference/components/amp-dailymotion) [AMP_TAG_PROBLEM] 5 | -------------------------------------------------------------------------------- /extensions/amp-dailymotion/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - zeno 2 | - erwinmombay 3 | - aghassemi 4 | - wassgha 5 | -------------------------------------------------------------------------------- /extensions/amp-experiment/0.1/test/validator-amp-experiment.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-experiment/0.1/test/validator-amp-experiment.html:47:0 The tag 'amp-experiment' appears more than once in the document. (see https://www.ampproject.org/docs/reference/components/amp-experiment) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 3 | amp-experiment/0.1/test/validator-amp-experiment.html:48:4 The tag 'script' is disallowed except in specific forms. [CUSTOM_JAVASCRIPT_DISALLOWED] 4 | -------------------------------------------------------------------------------- /extensions/amp-experiment/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - lannka 2 | -------------------------------------------------------------------------------- /extensions/amp-facebook-comments/0.1/test/validator-amp-facebook-comments.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-facebook-comments/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - ymschaap 2 | -------------------------------------------------------------------------------- /extensions/amp-facebook-like/0.1/test/validator-amp-facebook-like.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-facebook-like/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - eduardogoncalves 2 | -------------------------------------------------------------------------------- /extensions/amp-facebook/0.1/test/validator-amp-facebook.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-facebook/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | -------------------------------------------------------------------------------- /extensions/amp-font/0.1/test/validator-amp-font.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-font/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - camelburrito 2 | -------------------------------------------------------------------------------- /extensions/amp-form/0.1/form-events.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /** @enum {string} */ 18 | export const FormEvents = { 19 | // Dispatched by the window when AmpFormService initializes. 20 | SERVICE_INIT: 'amp:form-service:initialize', 21 | }; 22 | -------------------------------------------------------------------------------- /extensions/amp-form/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - cvializ 3 | -------------------------------------------------------------------------------- /extensions/amp-fresh/0.1/amp-fresh.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software' 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /** 18 | * `amp-fresh` starts as invisible by default and is shown once the content is 19 | * updated. Can be customized by the page author. 20 | */ 21 | amp-fresh.amp-fresh-ready { 22 | visibility: visible; 23 | } 24 | -------------------------------------------------------------------------------- /extensions/amp-fresh/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - erwinmombay 2 | -------------------------------------------------------------------------------- /extensions/amp-fx-flying-carpet/0.1/test/validator-amp-flying-carpet.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-fx-flying-carpet/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - jridgewell 2 | -------------------------------------------------------------------------------- /extensions/amp-fx-parallax/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - cvializ 2 | -------------------------------------------------------------------------------- /extensions/amp-gfycat/0.1/test/validator-amp-gfycat.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-gfycat/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - koshka 2 | -------------------------------------------------------------------------------- /extensions/amp-gist/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - levidurfee 2 | - aghassemi 3 | -------------------------------------------------------------------------------- /extensions/amp-google-vrview-image/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - dvoytenko 2 | -------------------------------------------------------------------------------- /extensions/amp-hulu/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - unbug 3 | -------------------------------------------------------------------------------- /extensions/amp-iframe/0.1/test/validator-amp-iframe.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-iframe/0.1/test/validator-amp-iframe.html:41:2 The attribute 'src' in tag 'amp-iframe' is missing or incorrect, but required by attribute '[src]'. (see https://www.ampproject.org/docs/reference/components/amp-iframe) [DISALLOWED_HTML] 3 | -------------------------------------------------------------------------------- /extensions/amp-iframe/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - camelburrito 2 | -------------------------------------------------------------------------------- /extensions/amp-ima-video/0.1/test/validator-amp-ima-video.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-image-lightbox/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - dvoytenko 3 | -------------------------------------------------------------------------------- /extensions/amp-imgur/0.1/test/validator-amp-imgur.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-imgur/0.1/test/validator-amp-imgur.html:34:2 The mandatory attribute 'data-imgur-id' is missing in tag 'amp-imgur'. (see https://www.ampproject.org/docs/reference/components/amp-imgur) [AMP_TAG_PROBLEM] 3 | -------------------------------------------------------------------------------- /extensions/amp-imgur/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - techhtml -------------------------------------------------------------------------------- /extensions/amp-instagram/0.1/amp-instagram.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2015 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /* Non-overridable properties */ 18 | 19 | /* Adjust default spacing to allow for frame style */ 20 | amp-instagram.amp-instagram-default-framing { 21 | border: 1px solid #dbdbdb !important; 22 | } 23 | -------------------------------------------------------------------------------- /extensions/amp-instagram/0.1/test/validator-amp-instagram.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-instagram/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - jpettitt 3 | - src-code 4 | -------------------------------------------------------------------------------- /extensions/amp-install-serviceworker/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - jridgewell 2 | -------------------------------------------------------------------------------- /extensions/amp-izlesene/0.1/test/validator-amp-izlesene.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-izlesene/0.1/test/validator-amp-izlesene.html:42:2 The attribute 'data-videoid' in tag 'amp-izlesene' is set to the invalid value 'something else'. (see https://www.ampproject.org/docs/reference/components/amp-izlesene) [AMP_TAG_PROBLEM] 3 | amp-izlesene/0.1/test/validator-amp-izlesene.html:45:2 The mandatory attribute 'data-videoid' is missing in tag 'amp-izlesene'. (see https://www.ampproject.org/docs/reference/components/amp-izlesene) [AMP_TAG_PROBLEM] 4 | -------------------------------------------------------------------------------- /extensions/amp-izlesene/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - merty 3 | -------------------------------------------------------------------------------- /extensions/amp-jwplayer/0.1/test/validator-amp-jwplayer.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-jwplayer/0.1/test/validator-amp-jwplayer.html:44:2 The tag 'amp-jwplayer' is missing a mandatory attribute - pick one of data-media-id or data-playlist-id. (see https://www.ampproject.org/docs/reference/components/amp-jwplayer) [AMP_TAG_PROBLEM] 3 | amp-jwplayer/0.1/test/validator-amp-jwplayer.html:44:2 The mandatory attribute 'data-player-id' is missing in tag 'amp-jwplayer'. (see https://www.ampproject.org/docs/reference/components/amp-jwplayer) [AMP_TAG_PROBLEM] 4 | amp-jwplayer/0.1/test/validator-amp-jwplayer.html:48:2 The tag 'amp-jwplayer' is missing a mandatory attribute - pick one of data-media-id or data-playlist-id. (see https://www.ampproject.org/docs/reference/components/amp-jwplayer) [AMP_TAG_PROBLEM] 5 | -------------------------------------------------------------------------------- /extensions/amp-jwplayer/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - pablos1 3 | -------------------------------------------------------------------------------- /extensions/amp-kaltura-player/0.1/test/validator-amp-kaltura-player.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-kaltura-player/0.1/test/validator-amp-kaltura-player.html:41:2 The mandatory attribute 'data-partner' is missing in tag 'amp-kaltura-player'. (see https://www.ampproject.org/docs/reference/components/amp-kaltura-player) [AMP_TAG_PROBLEM] 3 | -------------------------------------------------------------------------------- /extensions/amp-kaltura-player/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - itaykinnrot 3 | -------------------------------------------------------------------------------- /extensions/amp-lightbox-viewer/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - zhouyx 3 | -------------------------------------------------------------------------------- /extensions/amp-lightbox/0.1/amp-lightbox.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | amp-lightbox { 17 | display: none; 18 | position: fixed !important; 19 | z-index: 1000; 20 | top: 0 !important; 21 | left: 0 !important; 22 | bottom: 0 !important; 23 | right: 0 !important; 24 | } 25 | 26 | amp-lightbox[scrollable] { 27 | overflow-y: auto !important; 28 | overflow-x: hidden !important; 29 | } 30 | -------------------------------------------------------------------------------- /extensions/amp-lightbox/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - muxin 3 | -------------------------------------------------------------------------------- /extensions/amp-list/0.1/test/validator-amp-list.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-list/0.1/test/validator-amp-list.html:31:2 The tag 'amp-list' requires including the 'amp-list' extension JavaScript. (see https://www.ampproject.org/docs/reference/components/amp-list) [AMP_TAG_PROBLEM] 3 | amp-list/0.1/test/validator-amp-list.html:36:2 The tag 'amp-list' requires including the 'amp-list' extension JavaScript. (see https://www.ampproject.org/docs/reference/components/amp-list) [AMP_TAG_PROBLEM] 4 | amp-list/0.1/test/validator-amp-list.html:42:2 The attribute 'wdith' may not appear in tag 'amp-list'. (see https://www.ampproject.org/docs/reference/components/amp-list) [AMP_TAG_PROBLEM] 5 | amp-list/0.1/test/validator-amp-list.html:47:2 The mandatory attribute 'src' is missing in tag 'amp-list'. (see https://www.ampproject.org/docs/reference/components/amp-list) [AMP_TAG_PROBLEM] 6 | amp-list/0.1/test/validator-amp-list.html:52:2 The implied layout 'CONTAINER' is not supported by tag 'amp-list'. (see https://www.ampproject.org/docs/reference/components/amp-list) [AMP_LAYOUT_PROBLEM] 7 | -------------------------------------------------------------------------------- /extensions/amp-live-list/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - erwinmombay 2 | -------------------------------------------------------------------------------- /extensions/amp-nexxtv-player/0.1/test/validator-amp-nexxtv-player.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-nexxtv-player/0.1/test/validator-amp-nexxtv-player.html:59:4 The mandatory attribute 'data-mediaid' is missing in tag 'amp-nexxtv-player'. (see https://www.ampproject.org/docs/reference/components/amp-nexxtv-player) [AMP_TAG_PROBLEM] 3 | amp-nexxtv-player/0.1/test/validator-amp-nexxtv-player.html:65:4 The mandatory attribute 'data-client' is missing in tag 'amp-nexxtv-player'. (see https://www.ampproject.org/docs/reference/components/amp-nexxtv-player) [AMP_TAG_PROBLEM] 4 | -------------------------------------------------------------------------------- /extensions/amp-nexxtv-player/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - neko-fire 3 | -------------------------------------------------------------------------------- /extensions/amp-o2-player/0.1/test/validator-amp-o2-player.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-o2-player/0.1/test/validator-amp-o2-player.html:49:2 The mandatory attribute 'data-bcid' is missing in tag 'amp-o2-player'. (see https://www.ampproject.org/docs/reference/components/amp-o2-player) [AMP_TAG_PROBLEM] 3 | amp-o2-player/0.1/test/validator-amp-o2-player.html:56:2 The mandatory attribute 'data-pid' is missing in tag 'amp-o2-player'. (see https://www.ampproject.org/docs/reference/components/amp-o2-player) [AMP_TAG_PROBLEM] 4 | -------------------------------------------------------------------------------- /extensions/amp-o2-player/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - yevheniiminin 3 | -------------------------------------------------------------------------------- /extensions/amp-ooyala-player/0.1/test/validator-amp-ooyala.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-ooyala-player/0.1/test/validator-amp-ooyala.html:51:4 The mandatory attribute 'data-pcode' is missing in tag 'amp-ooyala-player'. (see https://www.ampproject.org/docs/reference/components/amp-ooyala-player) [AMP_TAG_PROBLEM] 3 | amp-ooyala-player/0.1/test/validator-amp-ooyala.html:59:4 The mandatory attribute 'data-embedcode' is missing in tag 'amp-ooyala-player'. (see https://www.ampproject.org/docs/reference/components/amp-ooyala-player) [AMP_TAG_PROBLEM] 4 | amp-ooyala-player/0.1/test/validator-amp-ooyala.html:67:4 The mandatory attribute 'data-playerid' is missing in tag 'amp-ooyala-player'. (see https://www.ampproject.org/docs/reference/components/amp-ooyala-player) [AMP_TAG_PROBLEM] 5 | -------------------------------------------------------------------------------- /extensions/amp-ooyala-player/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - mityaha 3 | -------------------------------------------------------------------------------- /extensions/amp-pinterest/0.1/test/validator-amp-pinterest.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-pinterest/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - kentbrew 2 | -------------------------------------------------------------------------------- /extensions/amp-playbuzz/0.1/test/validator-amp-playbuzz.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-playbuzz/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - buzzdan 2 | -------------------------------------------------------------------------------- /extensions/amp-position-observer/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | -------------------------------------------------------------------------------- /extensions/amp-reach-player/0.1/test/validator-amp-reach-player.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-reach-player/0.1/test/validator-amp-reach-player.html:38:2 The mandatory attribute 'data-embed-id' is missing in tag 'amp-reach-player'. (see https://www.ampproject.org/docs/reference/components/amp-reach-player) [AMP_TAG_PROBLEM] 3 | -------------------------------------------------------------------------------- /extensions/amp-reach-player/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - mikepmtl 3 | -------------------------------------------------------------------------------- /extensions/amp-reddit/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - samiamorwas 2 | -------------------------------------------------------------------------------- /extensions/amp-selector/0.1/test/validator-amp-selector.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-selector/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - camelburrito 2 | -------------------------------------------------------------------------------- /extensions/amp-share-tracking/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - muxin 2 | -------------------------------------------------------------------------------- /extensions/amp-share-tracking/amp-share-tracking.md: -------------------------------------------------------------------------------- 1 | 16 | # `amp-share-tracking` 17 | 18 | The [share tracking feature](https://github.com/ampproject/amphtml/issues/3135) is under development. 19 | -------------------------------------------------------------------------------- /extensions/amp-sidebar/0.1/test/validator-amp-sidebar.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-sidebar/0.1/test/validator-amp-sidebar.html:60:4 Tag 'amp-sidebar > nav' must have 1 child tags - saw 2 child tags. [AMP_TAG_PROBLEM] 3 | amp-sidebar/0.1/test/validator-amp-sidebar.html:73:4 The tag 'amp-ad' may not appear as a descendant of tag 'amp-sidebar'. (see https://www.ampproject.org/docs/reference/components/amp-ad) [AMP_TAG_PROBLEM] 4 | amp-sidebar/0.1/test/validator-amp-sidebar.html:76:2 The attribute 'side' in tag 'amp-sidebar' is set to the invalid value 'center'. (see https://www.ampproject.org/docs/reference/components/amp-sidebar) [AMP_TAG_PROBLEM] 5 | -------------------------------------------------------------------------------- /extensions/amp-sidebar/1.0/test/validator-amp-sidebar.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-sidebar/1.0/test/validator-amp-sidebar.html:59:4 Tag 'amp-sidebar > nav' must have 1 child tags - saw 2 child tags. [AMP_TAG_PROBLEM] 3 | amp-sidebar/1.0/test/validator-amp-sidebar.html:72:4 The tag 'amp-ad' may not appear as a descendant of tag 'amp-sidebar'. (see https://www.ampproject.org/docs/reference/components/amp-ad) [AMP_TAG_PROBLEM] 4 | amp-sidebar/1.0/test/validator-amp-sidebar.html:75:2 The attribute 'side' in tag 'amp-sidebar' is set to the invalid value 'center'. (see https://www.ampproject.org/docs/reference/components/amp-sidebar) [AMP_TAG_PROBLEM] 5 | -------------------------------------------------------------------------------- /extensions/amp-sidebar/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - camelburrito 2 | -------------------------------------------------------------------------------- /extensions/amp-slides/amp-slides-deprecated.md: -------------------------------------------------------------------------------- 1 | 16 | 17 | # `amp-slides` 18 | 19 | WARNING: amp-slides is no longer supported. Please see [`amp-carousel`](../amp-carousel/amp-carousel.md) 20 | with `type=slides` attributes instead. 21 | -------------------------------------------------------------------------------- /extensions/amp-social-share/0.1/test/validator-amp-social-share.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-social-share/0.1/test/validator-amp-social-share.html:79:2 Invalid URL protocol 'votethisup:' for attribute 'data-share-endpoint' in tag 'amp-social-share'. (see https://www.ampproject.org/docs/reference/components/amp-social-share) [AMP_TAG_PROBLEM] 3 | amp-social-share/0.1/test/validator-amp-social-share.html:87:2 Invalid URL protocol 'j a v a s c r i p t :' for attribute 'data-share-endpoint' in tag 'amp-social-share'. (see https://www.ampproject.org/docs/reference/components/amp-social-share) [AMP_TAG_PROBLEM] 4 | -------------------------------------------------------------------------------- /extensions/amp-social-share/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - ithinkihaveacat 3 | - RyanCopley 4 | -------------------------------------------------------------------------------- /extensions/amp-soundcloud/0.1/test/validator-amp-soundcloud.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-soundcloud/0.1/test/validator-amp-soundcloud.html:39:2 The attribute 'data-visual' in tag 'amp-soundcloud' is set to the invalid value ''. (see https://www.ampproject.org/docs/reference/components/amp-soundcloud) [AMP_TAG_PROBLEM] 3 | amp-soundcloud/0.1/test/validator-amp-soundcloud.html:42:2 The attribute 'data-trackid' in tag 'amp-soundcloud' is set to the invalid value 'mahler_number_6.ogg'. (see https://www.ampproject.org/docs/reference/components/amp-soundcloud) [AMP_TAG_PROBLEM] 4 | amp-soundcloud/0.1/test/validator-amp-soundcloud.html:45:2 The specified layout 'RESPONSIVE' is not supported by tag 'amp-soundcloud'. (see https://www.ampproject.org/docs/reference/components/amp-soundcloud) [AMP_LAYOUT_PROBLEM] 5 | -------------------------------------------------------------------------------- /extensions/amp-soundcloud/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - asap 2 | - wassgha 3 | -------------------------------------------------------------------------------- /extensions/amp-springboard-player/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - Em-PredragMilosevic 3 | -------------------------------------------------------------------------------- /extensions/amp-sticky-ad/0.1/test/validator-amp-sticky-ad.out: -------------------------------------------------------------------------------- 1 | PASS 2 | amp-sticky-ad/0.1/test/validator-amp-sticky-ad.html:28:2 The extension 'amp-sticky-ad' is referenced at version '0.1' which is a deprecated version. Please use a more recent version of this extension. This may become an error in the future. (see https://www.ampproject.org/docs/reference/components/amp-sticky-ad) [DEPRECATION] 3 | amp-sticky-ad/0.1/test/validator-amp-sticky-ad.html:40:7 The tag 'amp-ad extension .js script' is missing or incorrect, but required by 'amp-ad'. This will soon be an error. (see https://www.ampproject.org/docs/reference/components/amp-ad) [DEPRECATION] 4 | -------------------------------------------------------------------------------- /extensions/amp-sticky-ad/1.0/test/validator-amp-sticky-ad.out: -------------------------------------------------------------------------------- 1 | PASS 2 | amp-sticky-ad/1.0/test/validator-amp-sticky-ad.html:40:7 The tag 'amp-ad extension .js script' is missing or incorrect, but required by 'amp-ad'. This will soon be an error. (see https://www.ampproject.org/docs/reference/components/amp-ad) [DEPRECATION] 3 | -------------------------------------------------------------------------------- /extensions/amp-sticky-ad/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - zhouyx 2 | -------------------------------------------------------------------------------- /extensions/amp-timeago/0.1/test/validator-amp-timeago.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-timeago/0.1/test/validator-amp-timeago.html:42:4 The attribute 'datetime' in tag 'amp-timeago' is set to the invalid value '2017/04/11'. (see https://www.ampproject.org/docs/reference/components/amp-timeago) [AMP_TAG_PROBLEM] 3 | amp-timeago/0.1/test/validator-amp-timeago.html:45:4 The mandatory attribute 'datetime' is missing in tag 'amp-timeago'. (see https://www.ampproject.org/docs/reference/components/amp-timeago) [AMP_TAG_PROBLEM] 4 | -------------------------------------------------------------------------------- /extensions/amp-twitter/0.1/test/validator-amp-twitter.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-user-notification/0.1/test/validator-amp-user-notification.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-user-notification/0.1/test/validator-amp-user-notification.html:70:2 The specified layout 'CONTAINER' is not supported by tag 'amp-user-notification'. (see https://www.ampproject.org/docs/reference/components/amp-user-notification) [AMP_LAYOUT_PROBLEM] 3 | -------------------------------------------------------------------------------- /extensions/amp-video/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - wassgha 3 | -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/0.1/messaging/README.md: -------------------------------------------------------------------------------- 1 | # amp-viewer-messaging Package 2 | 3 | This package is published and available at 4 | https://www.npmjs.com/package/amp-viewer-messaging. -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/0.1/messaging/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "amp-viewer-messaging", 3 | "version": "1.0.2", 4 | "description": "Messaging between an AMP Doc and a Viewer", 5 | "author": "The AMP HTML Authors", 6 | "license": "Apache-2.0", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/ampproject/amphtml/tree/master/extensions/amp-viewer-integration/0.1/messaging/" 10 | } 11 | } -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - chenshay 2 | -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/intro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/intro.png -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/mobile-web-handshake1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/mobile-web-handshake1.png -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/mobile-web-handshake2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/mobile-web-handshake2.png -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/mobile-web-handshake3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/mobile-web-handshake3.png -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/mobile-web-handshake4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/mobile-web-handshake4.png -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/swipe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/swipe.png -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/webview-connection1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/webview-connection1.png -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/webview-connection2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/webview-connection2.png -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/webview-connection3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/webview-connection3.png -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/webview-connection4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/webview-connection4.png -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/webview-connection5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/webview-connection5.png -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/webview-handshake1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/webview-handshake1.png -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/webview-handshake2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/webview-handshake2.png -------------------------------------------------------------------------------- /extensions/amp-viewer-integration/img/webview-handshake3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/extensions/amp-viewer-integration/img/webview-handshake3.png -------------------------------------------------------------------------------- /extensions/amp-vimeo/0.1/test/validator-amp-vimeo.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-vimeo/0.1/test/validator-amp-vimeo.html:45:0 The attribute 'data-videoid' in tag 'amp-vimeo' is set to the invalid value 'i don't think so'. (see https://www.ampproject.org/docs/reference/components/amp-vimeo) [AMP_TAG_PROBLEM] 3 | amp-vimeo/0.1/test/validator-amp-vimeo.html:48:0 The mandatory attribute 'data-videoid' is missing in tag 'amp-vimeo'. (see https://www.ampproject.org/docs/reference/components/amp-vimeo) [AMP_TAG_PROBLEM] 4 | amp-vimeo/0.1/test/validator-amp-vimeo.html:51:0 The attribute 'noloading' in tag 'amp-vimeo' is set to the invalid value 'foo'. (see https://www.ampproject.org/docs/reference/components/amp-vimeo) [AMP_TAG_PROBLEM] 5 | -------------------------------------------------------------------------------- /extensions/amp-vimeo/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | -------------------------------------------------------------------------------- /extensions/amp-vine/0.1/test/validator-amp-vine.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-vine/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - niallkennedy 3 | -------------------------------------------------------------------------------- /extensions/amp-viz-vega/0.1/amp-viz-vega.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | amp-viz-vega canvas { 18 | display: block; 19 | } 20 | -------------------------------------------------------------------------------- /extensions/amp-viz-vega/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | -------------------------------------------------------------------------------- /extensions/amp-web-push/0.1/amp-web-push-helper-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /extensions/amp-web-push/0.1/amp-web-push-permission-dialog.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /extensions/amp-web-push/0.1/amp-web-push.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 | * use this file except in compliance with the License. You may obtain a copy of 6 | * the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, WITHOUT 12 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 | * License for the specific language governing permissions and limitations under 14 | * the License. 15 | */ 16 | 17 | amp-web-push-widget.amp-invisible { 18 | visibility: hidden; 19 | } -------------------------------------------------------------------------------- /extensions/amp-web-push/0.1/test/validator-amp-web-push.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /extensions/amp-youtube/0.1/test/validator-amp-youtube.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp-youtube/0.1/test/validator-amp-youtube.html:40:2 The mandatory attribute 'data-videoid' is missing in tag 'amp-youtube'. (see https://www.ampproject.org/docs/reference/components/amp-youtube) [AMP_TAG_PROBLEM] 3 | amp-youtube/0.1/test/validator-amp-youtube.html:42:2 The implied layout 'CONTAINER' is not supported by tag 'amp-youtube'. (see https://www.ampproject.org/docs/reference/components/amp-youtube) [AMP_LAYOUT_PROBLEM] 4 | amp-youtube/0.1/test/validator-amp-youtube.html:45:2 The attribute 'data-videoid' in tag 'amp-youtube' is set to the invalid value 'https://www.youtube.com/watch?v=dQw4w9WgXcQ'. (see https://www.ampproject.org/docs/reference/components/amp-youtube) [AMP_TAG_PROBLEM] 5 | -------------------------------------------------------------------------------- /extensions/amp-youtube/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - aghassemi 2 | - wassgha 3 | -------------------------------------------------------------------------------- /screenshots/test/manual/amp-anim.amp.html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/screenshots/test/manual/amp-anim.amp.html.png -------------------------------------------------------------------------------- /screenshots/test/manual/amp-carousel.amp.html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/screenshots/test/manual/amp-carousel.amp.html.png -------------------------------------------------------------------------------- /screenshots/test/manual/amp-fit-text.amp.html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/screenshots/test/manual/amp-fit-text.amp.html.png -------------------------------------------------------------------------------- /screenshots/test/manual/amp-iframe.amp.html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/screenshots/test/manual/amp-iframe.amp.html.png -------------------------------------------------------------------------------- /screenshots/test/manual/amp-image-lightbox.amp.html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/screenshots/test/manual/amp-image-lightbox.amp.html.png -------------------------------------------------------------------------------- /screenshots/test/manual/amp-img.amp.html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/screenshots/test/manual/amp-img.amp.html.png -------------------------------------------------------------------------------- /screenshots/test/manual/amp-lightbox.amp.html.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/screenshots/test/manual/amp-lightbox.amp.html.png -------------------------------------------------------------------------------- /spec/img/contexts-with-different-storage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/spec/img/contexts-with-different-storage.png -------------------------------------------------------------------------------- /spec/img/identifiers-for-use-cases.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/spec/img/identifiers-for-use-cases.png -------------------------------------------------------------------------------- /spec/img/link-form-identifier-forwarding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/spec/img/link-form-identifier-forwarding.png -------------------------------------------------------------------------------- /spec/img/link-identifier-forwarding-example-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/spec/img/link-identifier-forwarding-example-1.png -------------------------------------------------------------------------------- /spec/img/link-identifier-forwarding-example-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/spec/img/link-identifier-forwarding-example-2.png -------------------------------------------------------------------------------- /src/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-global": 2 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - dvoytenko 2 | - jridgewell 3 | -------------------------------------------------------------------------------- /src/action-trust.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /** 18 | * Trust level of an action. 19 | * 20 | * Corresponds to degree of user intent, i.e. events triggered with strong 21 | * user intent have high trust. 22 | * 23 | * @enum {number} 24 | */ 25 | export const ActionTrust = { 26 | LOW: 1, 27 | HIGH: 100, 28 | }; 29 | -------------------------------------------------------------------------------- /src/amp-babel.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2015 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // Entry point into AMP for compilation with babel. Just loads amp.js and 18 | // Babel's helpers. 19 | 20 | import '../third_party/babel/custom-babel-helpers'; 21 | import './amp'; 22 | -------------------------------------------------------------------------------- /src/amp-shadow-babel.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | // Entry point into AMP for compilation with babel. Just loads amp.js and 18 | // Babel's helpers. 19 | 20 | import '../third_party/babel/custom-babel-helpers'; 21 | import './amp-shadow'; 22 | -------------------------------------------------------------------------------- /src/service-worker/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "serviceworker": true 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/time.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2015 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | 18 | /** 19 | * Absolute time in milliseconds. 20 | * @typedef {number} 21 | */ 22 | export let timeDef; 23 | 24 | 25 | /** 26 | * Number between 0 and 1 that designates normalized time, as in "from start to 27 | * end". 28 | * @typedef {number} 29 | */ 30 | export let normtimeDef; 31 | -------------------------------------------------------------------------------- /src/utils/key-codes.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /** 18 | * @enum {number} 19 | */ 20 | export const KeyCodes = { 21 | ENTER: 13, 22 | ESCAPE: 27, 23 | SPACE: 32, 24 | LEFT_ARROW: 37, 25 | UP_ARROW: 38, 26 | RIGHT_ARROW: 39, 27 | DOWN_ARROW: 40, 28 | }; 29 | -------------------------------------------------------------------------------- /src/web-worker/web-worker-defines.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2017 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /** 18 | * @typedef {{ 19 | * method: string, 20 | * args: !Array, 21 | * scope: number, 22 | * id: number, 23 | * }} 24 | */ 25 | export let ToWorkerMessageDef; 26 | 27 | /** 28 | * @typedef {{ 29 | * method: string, 30 | * returnValue: *, 31 | * id: number, 32 | * }} 33 | */ 34 | export let FromWorkerMessageDef; 35 | -------------------------------------------------------------------------------- /system.properties: -------------------------------------------------------------------------------- 1 | java.runtime.version=1.8 2 | -------------------------------------------------------------------------------- /test/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - @ampproject/runtime 2 | - @ampproject/validator 3 | -------------------------------------------------------------------------------- /test/SIZE.md: -------------------------------------------------------------------------------- 1 | The size.txt and size.csv files are updated weekly by a cron job with the 2 | binary sizes of the files we serve off of the cache. We have this to be able to 3 | plot and catch large delta changes in sizes and to make improvement in the size. 4 | -------------------------------------------------------------------------------- /test/fixtures/boilerplate-old-opacity.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Released AMP components 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |

AMP boilerplate

14 |

15 | "Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit..." 16 | "There is no one who loves pain itself, who seeks after it and wants to have it, simply because it is pain..." 17 |

18 | 19 | 20 | -------------------------------------------------------------------------------- /test/fixtures/served/iframe-clicktoplay.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | iframe - Click to play 4 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /test/fixtures/served/iframe-intersection-outer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /test/fixtures/served/iframe-resize-outer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /test/manual/amp-animation/assets/clock.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/test/manual/amp-animation/assets/clock.jpg -------------------------------------------------------------------------------- /test/manual/amp-list-data.json: -------------------------------------------------------------------------------- 1 | { 2 | "items": [ 3 | { 4 | "title": "Best news 1", 5 | "imageUrl": "https://lh3.googleusercontent.com/pSECrJ82R7-AqeBCOEPGPM9iG9OEIQ_QXcbubWIOdkY=w400-h300-no-n" 6 | }, 7 | 8 | { 9 | "title": "Best news 2", 10 | "imageUrl": "https://lh3.googleusercontent.com/5rcQ32ml8E5ONp9f9-Rf78IofLb9QjS5_0mqsY1zEFc=w400-h300-no-n" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /test/manual/dont-show-dialog.json: -------------------------------------------------------------------------------- 1 | { 2 | "showNotification": false 3 | } 4 | -------------------------------------------------------------------------------- /test/manual/pre-render-load.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/manual/show-dialog.json: -------------------------------------------------------------------------------- 1 | { 2 | "showNotification": true 3 | } 4 | -------------------------------------------------------------------------------- /test/manual/test-sw.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/manual/test-sw.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2015 The AMP HTML Authors. All Rights Reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS-IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | console./*OK*/info('ServiceWorker loaded.'); 18 | -------------------------------------------------------------------------------- /testing/local-amp-chrome-extension/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/testing/local-amp-chrome-extension/128x128.png -------------------------------------------------------------------------------- /testing/local-amp-chrome-extension/16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/testing/local-amp-chrome-extension/16x16.png -------------------------------------------------------------------------------- /testing/local-amp-chrome-extension/48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/testing/local-amp-chrome-extension/48x48.png -------------------------------------------------------------------------------- /testing/local-amp-chrome-extension/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Local AMP", 3 | "version": "0.0.1", 4 | "manifest_version": 2, 5 | "description": "Run prod AMP pages with the local AMP runtime.", 6 | "homepage_url": "https://www.ampproject.org", 7 | "background": { 8 | "scripts": [ 9 | "background.js" 10 | ], 11 | "persistent": true 12 | }, 13 | "icons": { 14 | "16": "16x16.png", 15 | "48": "48x48.png", 16 | "128": "128x128.png" 17 | }, 18 | "browser_action": { 19 | "default_icon": { 20 | "16": "16x16.png", 21 | "48": "48x48.png", 22 | "128": "128x128.png" 23 | }, 24 | "default_title": "AMP Local Proxy", 25 | "default_popup": "popup.html" 26 | }, 27 | "permissions": [ 28 | "webRequest", 29 | "webRequestBlocking", 30 | "*://*/*" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /testing/screenshots/everything-iphone6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/testing/screenshots/everything-iphone6.png -------------------------------------------------------------------------------- /third_party/babel/README.amp: -------------------------------------------------------------------------------- 1 | URL: https://registry.npmjs.org/babel-core/-/babel-core-5.8.25.tgz 2 | Version: 5.8.25 3 | License: MIT License 4 | License File: https://github.com/babel/babel/blob/master/LICENSE 5 | 6 | Description: 7 | Helper methods used by babel for es2015 (es6) features. 8 | Run `gulp babel-helpers` to re-generate this file if new es2015 (es6) features 9 | are used. 10 | 11 | Local Modifications: 12 | Dynamically generated file through the `gulp babel-helpers` command. (see 13 | DEVELOPING.md for installation) 14 | -------------------------------------------------------------------------------- /third_party/caja/README.amp: -------------------------------------------------------------------------------- 1 | URL: https://github.com/google/caja 2 | License: Apache License 3 | License File: https://github.com/google/caja/blob/master/LICENSE.txt 4 | 5 | Description: 6 | HTML Sanitizer. 7 | Run compile.sh to generate a new version. 8 | 9 | Local Modifications: 10 | Export to ES6. 11 | Change unicode literal to unicode escaped character. (see https://github.com/google/caja/issues/1978) 12 | Change html attribute regex to optionally accept bracketed attribute names for amp-bind 13 | RegEx fixes (see https://github.com/google/caja/pull/2026) 14 | -------------------------------------------------------------------------------- /third_party/caja/compile.sh: -------------------------------------------------------------------------------- 1 | # Run this file with bash to generate new caja sanitizer library for inclusion 2 | # into AMP. 3 | 4 | # $1 is a path to the Caja REPO. 5 | # Dependencies: Java and Ant must be installed 6 | 7 | readonly CAJA_HOME=$1 8 | 9 | echo "CAJA Home: $CAJA_HOME" 10 | echo "Java: `java --version`" 11 | echo "Ant: `ant -version`" 12 | 13 | readonly GIT_COMMIT=`sh -c "cd $CAJA_HOME && git log --pretty=format:'%H' -n 1"` 14 | echo "GIT Commit: $GIT_COMMIT" 15 | 16 | pushd $CAJA_HOME 17 | ant MinifiedJs 18 | popd 19 | 20 | echo "/* Generated from CAJA Sanitizer library commit $GIT_COMMIT */" > html-sanitizer.js 21 | echo "" >> html-sanitizer.js 22 | cat $CAJA_HOME/ant-lib/com/google/caja/plugin/html-sanitizer-bundle.js \ 23 | | grep -v "window\[\'html" | grep -v "window\[\'URI" >> html-sanitizer.js 24 | echo "" >> html-sanitizer.js 25 | echo "export var htmlSanitizer = html;" >> html-sanitizer.js 26 | -------------------------------------------------------------------------------- /third_party/closure-compiler/README.amp: -------------------------------------------------------------------------------- 1 | URL: https://github.com/google/closure-compiler 2 | License: Apache License 3 | License File: https://github.com/google/closure-compiler/blob/master/COPYING 4 | 5 | Description: 6 | Temporary check in of a compiled closure compiler while we wait for 7 | a patch to land. 8 | 9 | Local Modifications: 10 | - Add compiler-and-tests.jar (built from all-classes-jar ant build) to use 11 | for testing. 12 | - Add Messages.properties and ParserConfig.properties for testing. 13 | - Copied intersection_observer.js extern missing from default externs. 14 | -------------------------------------------------------------------------------- /third_party/closure-compiler/compiler-and-tests.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/third_party/closure-compiler/compiler-and-tests.jar -------------------------------------------------------------------------------- /third_party/closure-compiler/compiler.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/third_party/closure-compiler/compiler.jar -------------------------------------------------------------------------------- /third_party/closure-library/README.amp: -------------------------------------------------------------------------------- 1 | URL: https://github.com/google/closure-library 2 | License: Apache License 3 | License File: https://github.com/google/closure-library/blob/master/LICENSE 4 | 5 | Description: 6 | Used to pull in selected functions from the closure library. 7 | We only check in the compiled version. 8 | Run compile.sh to generate a new version. 9 | 10 | Local Modifications: 11 | Forked base64.js to remove dependency on user agent detection 12 | because all supported browsers for AMP support native base64 13 | encoding. 14 | -------------------------------------------------------------------------------- /third_party/css-escape/README.amp: -------------------------------------------------------------------------------- 1 | URL: https://github.com/mathiasbynens/CSS.escape 2 | License: The MIT License 3 | License File: https://github.com/mathiasbynens/CSS.escape/blob/master/LICENSE-MIT.txt 4 | 5 | Description: 6 | For of CSS.escape polyfill. 7 | 8 | Local Modifications: 9 | Stripped polyfill part and turn it into utility function. 10 | -------------------------------------------------------------------------------- /third_party/d3-geo-projection/README.amp: -------------------------------------------------------------------------------- 1 | URL: https://github.com/d3/d3-geo-projection/tree/v0.2.16 2 | License: BSD 3 | License File: https://github.com/d3/d3-geo-projection/blob/v0.2.16/LICENSE 4 | 5 | Description: 6 | Copy of minified (d3-geo-projection.min.js) from release v0.2.16 7 | https://github.com/d3/d3-geo-projection/tree/v0.2.16 8 | 9 | Local Modifications: 10 | None 11 | -------------------------------------------------------------------------------- /third_party/d3/README.amp: -------------------------------------------------------------------------------- 1 | URL: https://github.com/d3/d3/tree/v3.5.17 2 | License: BSD 3 | License File: https://github.com/d3/d3/blob/v3.5.17/LICENSE 4 | 5 | Description: 6 | Copy of minified (d3.min.js) from release v3.5.17 7 | https://github.com/d3/d3/tree/v3.5.17 8 | 9 | Local Modifications: 10 | None 11 | -------------------------------------------------------------------------------- /third_party/mustache/README.amp: -------------------------------------------------------------------------------- 1 | URL: https://github.com/janl/mustache.js/ 2 | License: The MIT License 3 | License File: https://github.com/janl/mustache.js/blob/master/LICENSE 4 | 5 | Description: 6 | Fork of mustache.js library. 7 | 8 | Local Modifications: 9 | None yet, but expected changes for restricting instructions and sanitizing 10 | of the output. 11 | -------------------------------------------------------------------------------- /third_party/optimized-svg-icons/README.amp: -------------------------------------------------------------------------------- 1 | URL: http://codepen.io/anon/pen/KVZNGp 2 | License: The MIT License 3 | License File: https://gist.githubusercontent.com/anonymous/920164b2cafcdade77a2/raw/97801f67daefc7cde3523d9c35ef73f6a43759f5/script.js 4 | 5 | Description: 6 | Online SVGs of popular logos 7 | 8 | Local Modifications: 9 | Created a derived css file from the index.html, contained in 10 | amp-social-share-svgs.css. To be imported into the ampproject to provide in-line 11 | svg icons through css. 12 | 13 | Gist created verbatim from source for referencing files: 14 | https://gist.github.com/anonymous/920164b2cafcdade77a2 15 | -------------------------------------------------------------------------------- /third_party/optimized-svg-icons/README.md: -------------------------------------------------------------------------------- 1 | Optimized Inline SVG Icons 2 | -------------------------- 3 | SVG-powered social media icon set, yo :P 4 | Thanks for all the comments and suggestions! 5 | 6 | Forked from [Ruandre Janse Van Rensburg](http://codepen.io/ruandre/)'s Pen [Optimized Inline SVG Icons](http://codepen.io/ruandre/pen/howFi/). 7 | 8 | A [Pen](http://codepen.io/anon/pen/KVZNGp) by [Captain Anonymous](http://codepen.io/anon) on [CodePen](http://codepen.io/). 9 | 10 | [License](http://codepen.io/anon/pen/KVZNGp/license). 11 | -------------------------------------------------------------------------------- /third_party/timeagojs/README.amp: -------------------------------------------------------------------------------- 1 | URL: https://github.com/hustcc/timeago.js 2 | License: MIT 3 | License File: https://github.com/hustcc/timeago.js/blob/v3.0.0/LICENSE 4 | 5 | Description: 6 | Fork of timeago.js from release v3.0.0 7 | https://github.com/hustcc/timeago.js/tree/v3.0.0 8 | 9 | Local Modifications: 10 | Made formatting changes to ensure code passes AMP validation. 11 | Removed some functions from timeago.js file that are not required in the AMP 12 | implementation. 13 | Included entire locales directory which provide 37 locale options. 14 | -------------------------------------------------------------------------------- /third_party/vega/README.amp: -------------------------------------------------------------------------------- 1 | URL: https://github.com/vega/vega/tree/v2.6.1 2 | License: BSD 3 | License File: https://github.com/vega/vega/blob/v2.6.1/LICENSE 4 | 5 | Description: 6 | Copy of minified (vega.min.js) from release v2.6.1 7 | https://github.com/vega/vega/tree/v2.6.1 8 | 9 | Local Modifications: 10 | None 11 | -------------------------------------------------------------------------------- /third_party/webcomponentsjs/README.amp: -------------------------------------------------------------------------------- 1 | URL: https://github.com/webcomponents/webcomponentsjs 2 | License: BSD 3 | License File: https://github.com/webcomponents/webcomponentsjs/blob/master/LICENSE.md 4 | 5 | Description: 6 | Shadow DOM-related polyfills 7 | 8 | Local Modifications: 9 | Stripped to only perform necessary Shadow CSS polyfilling. 10 | -------------------------------------------------------------------------------- /tools/errortracker/README.md: -------------------------------------------------------------------------------- 1 | # Error reporting 2 | 3 | Receives error reports emitted by errors.js and send them to the 4 | [Google Cloud Error Logging service](https://cloud.google.com/error-reporting/). 5 | 6 | ## Setup and deploy 7 | 8 | 1. Enable Google Cloud Logging API. 9 | 2. Switch app id in app.yaml to your own. 10 | 3. Deploy. 11 | 12 | ``` 13 | $ goapp get . 14 | $ goapp deploy 15 | ``` 16 | 17 | [Sample URL](https://goo.gl/dKvgfk) 18 | -------------------------------------------------------------------------------- /tools/errortracker/app.yaml: -------------------------------------------------------------------------------- 1 | runtime: go 2 | api_version: go1 3 | 4 | handlers: 5 | - url: /r.* 6 | script: _go_app 7 | -------------------------------------------------------------------------------- /tools/errortracker/index.yaml: -------------------------------------------------------------------------------- 1 | indexes: 2 | 3 | # AUTOGENERATED 4 | 5 | # This index.yaml is automatically updated whenever the dev_appserver 6 | # detects that a new type of query is run. If you want to manage the 7 | # index.yaml file manually, remove the above marker line (the line 8 | # saying "# AUTOGENERATED"). If you want to manage some indexes 9 | # manually, move them above the marker line. The index.yaml file is 10 | # automatically uploaded to the admin console when you next deploy 11 | # your application using appcfg.py. 12 | -------------------------------------------------------------------------------- /validator/.gitignore: -------------------------------------------------------------------------------- 1 | # This directory gets generated by build.py. 2 | dist/ 3 | # This directory gets created by npm. 4 | node_modules/ 5 | # The Python interpreter generates these. 6 | *.pyc 7 | -------------------------------------------------------------------------------- /validator/AUTHORS: -------------------------------------------------------------------------------- 1 | # This is a list of contributors to AMP HTML. 2 | 3 | # Names should be added to this file like so: 4 | # Name or Organization 5 | 6 | Google Inc. 7 | -------------------------------------------------------------------------------- /validator/OWNERS.yaml: -------------------------------------------------------------------------------- 1 | - powdercloud 2 | - Gregable 3 | - honeybadgerdontcare 4 | -------------------------------------------------------------------------------- /validator/chromeextension/amp-link-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/amp-link-128.png -------------------------------------------------------------------------------- /validator/chromeextension/amp-link-38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/amp-link-38.png -------------------------------------------------------------------------------- /validator/chromeextension/background.html: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /validator/chromeextension/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "amp-validator-chrome-extension", 3 | "version": "1.0.7", 4 | "dependencies": { 5 | "iron-pages": "PolymerElements/iron-pages#^1.0.0", 6 | "paper-item": "PolymerElements/paper-item#^1.0.0", 7 | "paper-spinner": "PolymerElements/paper-spinner#^1.0.0", 8 | "paper-tabs": "PolymerElements/paper-tabs#^1.0.0", 9 | "paper-toolbar": "PolymerElements/paper-toolbar#^1.0.0" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /validator/chromeextension/build_extension.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -ex 2 | # 3 | # Copyright 2016 The AMP HTML Authors. All Rights Reserved. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS-IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the license. 16 | # 17 | # A script to install dependencies and then build the extension. 18 | 19 | echo 'Installing web components' 20 | bower install 21 | 22 | echo 'Polybuild AMP Validator' 23 | polybuild amp-validator.html 24 | 25 | echo 'Removing web components' 26 | rm -rf bower_components 27 | 28 | echo 'Done' 29 | -------------------------------------------------------------------------------- /validator/chromeextension/icon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/icon-128.png -------------------------------------------------------------------------------- /validator/chromeextension/icon-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/icon-16.png -------------------------------------------------------------------------------- /validator/chromeextension/icon-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/icon-48.png -------------------------------------------------------------------------------- /validator/chromeextension/icon-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/icon-64.png -------------------------------------------------------------------------------- /validator/chromeextension/invalid-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/invalid-128.png -------------------------------------------------------------------------------- /validator/chromeextension/invalid-38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/invalid-38.png -------------------------------------------------------------------------------- /validator/chromeextension/no-amp-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/no-amp-128.png -------------------------------------------------------------------------------- /validator/chromeextension/no-amp-38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/no-amp-38.png -------------------------------------------------------------------------------- /validator/chromeextension/promotional-440.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/promotional-440.png -------------------------------------------------------------------------------- /validator/chromeextension/screenshot-chrome-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/screenshot-chrome-1.png -------------------------------------------------------------------------------- /validator/chromeextension/screenshot-chrome-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/screenshot-chrome-2.png -------------------------------------------------------------------------------- /validator/chromeextension/screenshot-opera-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/screenshot-opera-1.png -------------------------------------------------------------------------------- /validator/chromeextension/screenshot-opera-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/screenshot-opera-2.png -------------------------------------------------------------------------------- /validator/chromeextension/valid-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/valid-128.png -------------------------------------------------------------------------------- /validator/chromeextension/valid-38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/chromeextension/valid-38.png -------------------------------------------------------------------------------- /validator/gulpjs/owers.yaml: -------------------------------------------------------------------------------- 1 | - sebastianbenz 2 | -------------------------------------------------------------------------------- /validator/gulpjs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gulp-amphtml-validator", 3 | "version": "1.0.1", 4 | "description": "Gulp plugin for the official AMP HTML validator (www.ampproject.org)", 5 | "keywords": [ 6 | "gulpplugin", 7 | "AMP", 8 | "validator", 9 | "validate", 10 | "AMP HTML", 11 | "Accelerated Mobile Pages" 12 | ], 13 | "engines": { 14 | "node": ">=0.10.25" 15 | }, 16 | "author": "The AMP HTML Authors", 17 | "license": "Apache-2.0", 18 | "repository": { 19 | "type": "git", 20 | "url": "https://github.com/ampproject/amphtml/tree/master/validator/gulpjs" 21 | }, 22 | "dependencies": { 23 | "amphtml-validator": "1.0.18", 24 | "gulp-util": "^3.0.7", 25 | "through2": "^2.0.1" 26 | }, 27 | "devDependencies": { 28 | "gulp": "^3.9.1", 29 | "mocha": "^3.2.0" 30 | }, 31 | "scripts": { 32 | "test": " ./node_modules/mocha/bin/mocha", 33 | "run-sample": " ./run_sample.sh" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /validator/gulpjs/run_sample.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Install the local module and execute sample/gulpfile.js 3 | npm link 4 | cd sample && npm link gulp-amphtml-validator && gulp 5 | -------------------------------------------------------------------------------- /validator/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "amphtml-validator", 3 | "version": "1.0.20", 4 | "description": "Official validator for AMP HTML (www.ampproject.org)", 5 | "keywords": ["AMP", "validator", "validate", "AMP HTML", "Accelerated Mobile Pages"], 6 | "engines": { 7 | "node": ">=0.10.25" 8 | }, 9 | "author": "The AMP HTML Authors", 10 | "license": "Apache-2.0", 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/ampproject/amphtml/tree/master/validator/nodejs/" 14 | }, 15 | "bin": { 16 | "amphtml-validator": "index.sh" 17 | }, 18 | "dependencies": { 19 | "colors": "1.1.2", 20 | "commander": "2.9.0", 21 | "promise" : "7.1.1" 22 | }, 23 | "devDependencies": { 24 | "jasmine": "2.3.2" 25 | }, 26 | "scripts": { 27 | "postinstall": "/bin/sh -c \"exit 0\" 2> postinstall.DELETEME && rm postinstall.DELETEME || node postinstall-windows.js" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /validator/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "amp-validator", 3 | "version": "0.1.0", 4 | "description": "Validator for AMP HTML (www.ampproject.org)", 5 | "engines": { 6 | "node": "^0.10.25" 7 | }, 8 | "author": "The AMP HTML Authors", 9 | "license": "Apache-2.0", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/ampproject/amphtml.git" 13 | }, 14 | "devDependencies": { 15 | "google-closure-compiler": "20160517.1.0", 16 | "google-closure-library": "20160517.0.0", 17 | "jasmine": "2.3.2" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /validator/testdata/amp4ads_feature_tests/min_valid_amp4ads.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/amp4ads_feature_tests/noscript.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | amp4ads_feature_tests/noscript.html:30:2 The tag 'noscript' is disallowed. [DISALLOWED_HTML] 3 | amp4ads_feature_tests/noscript.html:32:2 The tag 'img' is disallowed. [DISALLOWED_HTML] 4 | amp4ads_feature_tests/noscript.html:34:2 The tag 'noscript' is disallowed. [DISALLOWED_HTML] 5 | amp4ads_feature_tests/noscript.html:35:4 The tag 'img' is disallowed. [DISALLOWED_HTML] 6 | amp4ads_feature_tests/noscript.html:37:2 The tag 'noscript' is disallowed. [DISALLOWED_HTML] 7 | amp4ads_feature_tests/noscript.html:38:4 The tag 'video' is disallowed. [DISALLOWED_HTML] 8 | amp4ads_feature_tests/noscript.html:39:4 The tag 'audio' is disallowed. [DISALLOWED_HTML] 9 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/ads.out: -------------------------------------------------------------------------------- 1 | PASS 2 | feature_tests/ads.html:1333:7 The extension 'amp-analytics' was found on this page, but is unused (no 'amp-analytics' tag seen). This may become an error in the future. [DEPRECATION] 3 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/amp_gist.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/amp_identification_missing.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/amp_identification_missing.html:22:0 The mandatory attribute '⚡' is missing in tag 'html ⚡ for top-level html'. (see https://www.ampproject.org/docs/reference/spec#required-markup) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 3 | feature_tests/amp_identification_missing.html:33:7 The mandatory tag 'html ⚡ for top-level html' is missing or incorrect. (see https://www.ampproject.org/docs/reference/spec#required-markup) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 4 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/amp_meta_tags.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/amp_meta_tags.html:38:2 The attribute 'name' in tag 'meta name= and content=' is set to the invalid value 'amp-tag-does-not-exist'. [DISALLOWED_HTML] 3 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/amp_rtc.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/amp_rtc.html:44:2 The parent tag of tag 'script id=amp-rtc' is 'body', but it can only be 'head'. [DISALLOWED_HTML] 3 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/aria.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/aria.html:37:2 The attribute 'role' in tag 'amp-img' is missing or incorrect, but required by attribute 'on'. (see https://www.ampproject.org/docs/reference/components/amp-img) [DISALLOWED_HTML] 3 | feature_tests/aria.html:39:2 The attribute 'tabindex' in tag 'amp-img' is missing or incorrect, but required by attribute 'on'. (see https://www.ampproject.org/docs/reference/components/amp-img) [DISALLOWED_HTML] 4 | feature_tests/aria.html:41:2 The attribute 'role' in tag 'amp-img' is missing or incorrect, but required by attribute 'on'. (see https://www.ampproject.org/docs/reference/components/amp-img) [DISALLOWED_HTML] 5 | feature_tests/aria.html:41:2 The attribute 'tabindex' in tag 'amp-img' is missing or incorrect, but required by attribute 'on'. (see https://www.ampproject.org/docs/reference/components/amp-img) [DISALLOWED_HTML] 6 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/article-json-ld.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/article-microdata.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/article.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/article.html:287:2 The tag 'content' is disallowed. [DISALLOWED_HTML] 3 | feature_tests/article.html:498:7 The tag 'amp-video extension .js script' is missing or incorrect, but required by 'amp-video'. This will soon be an error. (see https://www.ampproject.org/docs/reference/components/amp-video) [DEPRECATION] 4 | feature_tests/article.html:498:7 The extension 'amp-analytics' was found on this page, but is unused (no 'amp-analytics' tag seen). This may become an error in the future. [DEPRECATION] 5 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/bad_viewport.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/bad_viewport.html:25:2 The property 'foo' in attribute 'content' in tag 'meta name=viewport' is disallowed. (see https://www.ampproject.org/docs/reference/spec#required-markup) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 3 | feature_tests/bad_viewport.html:25:2 The property 'minimum-scale' in attribute 'content' in tag 'meta name=viewport' is set to 'not-a-number', which is invalid. (see https://www.ampproject.org/docs/reference/spec#required-markup) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 4 | feature_tests/bad_viewport.html:25:2 The property 'width' is missing from attribute 'content' in tag 'meta name=viewport'. (see https://www.ampproject.org/docs/reference/spec#required-markup) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 5 | feature_tests/bad_viewport.html:32:7 The mandatory tag 'meta name=viewport' is missing or incorrect. (see https://www.ampproject.org/docs/reference/spec#required-markup) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 6 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/base_href.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/base_href.html:26:2 The attribute 'href' in tag 'base' is set to the invalid value 'https://example.com/'. [DISALLOWED_HTML] 3 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/css_errors.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/css_errors.html:35:8 CSS syntax error in tag 'style amp-custom' - unterminated string. [AUTHOR_STYLESHEET_PROBLEM] 3 | feature_tests/css_errors.html:36:25 CSS syntax error in tag 'style amp-custom' - stray trailing backslash. [AUTHOR_STYLESHEET_PROBLEM] 4 | feature_tests/css_errors.html:37:4 CSS syntax error in tag 'style amp-custom' - bad url. [AUTHOR_STYLESHEET_PROBLEM] 5 | feature_tests/css_errors.html:31:8 CSS syntax error in tag 'style amp-custom' - incomplete declaration. [AUTHOR_STYLESHEET_PROBLEM] 6 | feature_tests/css_errors.html:33:8 CSS syntax error in tag 'style amp-custom' - invalid declaration. [AUTHOR_STYLESHEET_PROBLEM] 7 | feature_tests/css_errors.html:35:4 CSS syntax error in tag 'style amp-custom' - end of stylesheet encountered in prelude of a qualified rule. [AUTHOR_STYLESHEET_PROBLEM] 8 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/css_length.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/custom_element_case.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/custom_element_case.html:30:2 The attribute 'custom-element' may not appear in tag 'amp-analytics extension .js script'. (see https://www.ampproject.org/docs/reference/components/amp-analytics) [AMP_TAG_PROBLEM] 3 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/deprecation_warnings_and_errors.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/deprecation_warnings_and_errors.html:29:2 The tag 'head > style[amp-boilerplate] - old variant' is deprecated - use 'head > style[amp-boilerplate]' instead. (see https://github.com/ampproject/amphtml/blob/master/spec/amp-boilerplate.md) [DEPRECATION] 3 | feature_tests/deprecation_warnings_and_errors.html:30:12 The tag 'noscript > style[amp-boilerplate] - old variant' is deprecated - use 'noscript > style[amp-boilerplate]' instead. (see https://github.com/ampproject/amphtml/blob/master/spec/amp-boilerplate.md) [DEPRECATION] 4 | feature_tests/deprecation_warnings_and_errors.html:34:0 The tag 'disallowed-tag' is disallowed. [DISALLOWED_HTML] 5 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/dog_doc_type.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/dog_doc_type.html:23:0 The attribute '🐶' may not appear in tag 'html doctype'. (see https://www.ampproject.org/docs/reference/spec#required-markup) [DISALLOWED_HTML] 3 | feature_tests/dog_doc_type.html:24:0 The mandatory attribute '⚡' is missing in tag 'html ⚡ for top-level html'. (see https://www.ampproject.org/docs/reference/spec#required-markup) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 4 | feature_tests/dog_doc_type.html:35:7 The mandatory tag 'html doctype' is missing or incorrect. (see https://www.ampproject.org/docs/reference/spec#required-markup) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 5 | feature_tests/dog_doc_type.html:35:7 The mandatory tag 'html ⚡ for top-level html' is missing or incorrect. (see https://www.ampproject.org/docs/reference/spec#required-markup) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 6 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/duplicate_attribute.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/duplicate_attribute.html:30:2 The attribute 'custom-element' in tag 'script' is set to the invalid value 'duplicate'. [DISALLOWED_HTML] 3 | feature_tests/duplicate_attribute.html:31:2 The attribute 'custom-element' in tag 'script' is set to the invalid value 'duplicate'. [DISALLOWED_HTML] 4 | feature_tests/duplicate_attribute.html:37:3 The attribute 'width' in tag 'amp-img' is set to the invalid value '100%'. (see https://www.ampproject.org/docs/reference/components/amp-img) [AMP_LAYOUT_PROBLEM] 5 | feature_tests/duplicate_attribute.html:41:3 The attribute 'type' in tag 'script' is set to the invalid value 'text/javascript'. [CUSTOM_JAVASCRIPT_DISALLOWED] 6 | feature_tests/duplicate_attribute.html:42:3 The attribute 'type' in tag 'script' is set to the invalid value 'text/javascript'. [CUSTOM_JAVASCRIPT_DISALLOWED] 7 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/duplicate_unique_tags_and_wrong_parents.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/duplicate_unique_tags_and_wrong_parents.html:31:2 The tag 'style amp-custom' appears more than once in the document. (see https://www.ampproject.org/docs/reference/spec#stylesheets) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 3 | feature_tests/duplicate_unique_tags_and_wrong_parents.html:35:0 The parent tag of tag 'style amp-custom' is 'body', but it can only be 'head'. (see https://www.ampproject.org/docs/reference/spec#stylesheets) [DISALLOWED_HTML] 4 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/empty.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/testdata/feature_tests/empty.html -------------------------------------------------------------------------------- /validator/testdata/feature_tests/empty_stylesheet.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/everything.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/extensions.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/extensions.html:42:2 The tag 'amp-analytics' requires including the 'amp-analytics' extension JavaScript. (see https://www.ampproject.org/docs/reference/components/amp-analytics) [AMP_TAG_PROBLEM] 3 | feature_tests/extensions.html:43:4 The tag 'amp-analytics extension .json script' requires including the 'amp-analytics' extension JavaScript. (see https://www.ampproject.org/docs/reference/components/amp-analytics) [AMP_TAG_PROBLEM] 4 | feature_tests/extensions.html:48:7 The extension 'amp-timeago' was found on this page, but is unused. Please remove this extension. [AMP_TAG_PROBLEM] 5 | feature_tests/extensions.html:48:7 The extension 'amp-ad' was found on this page, but is unused (no 'amp-ad' tag seen). This may become an error in the future. [DEPRECATION] 6 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/incorrect_mandatory_style.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/incorrect_mandatory_style.html:28:2 The mandatory text (CDATA) inside tag 'head > style[amp-boilerplate]' is missing or incorrect. (see https://github.com/ampproject/amphtml/blob/master/spec/amp-boilerplate.md) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 3 | feature_tests/incorrect_mandatory_style.html:28:58 The mandatory text (CDATA) inside tag 'noscript > style[amp-boilerplate]' is missing or incorrect. (see https://github.com/ampproject/amphtml/blob/master/spec/amp-boilerplate.md) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 4 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/javascript_xss.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/javascript_xss.html:27:2 Invalid URL protocol 'javascript:' for attribute 'href' in tag 'a'. (see https://www.ampproject.org/docs/reference/spec#links) [DISALLOWED_HTML] 3 | feature_tests/javascript_xss.html:28:2 Invalid URL protocol 'javascript:' for attribute 'href' in tag 'a'. (see https://www.ampproject.org/docs/reference/spec#links) [DISALLOWED_HTML] 4 | feature_tests/javascript_xss.html:29:2 Invalid URL protocol 'vbscript:' for attribute 'href' in tag 'a'. (see https://www.ampproject.org/docs/reference/spec#links) [DISALLOWED_HTML] 5 | feature_tests/javascript_xss.html:30:2 Invalid URL protocol 'data:' for attribute 'href' in tag 'a'. (see https://www.ampproject.org/docs/reference/spec#links) [DISALLOWED_HTML] 6 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/lang_attr.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/manufactured_body.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/manufactured_body.html:32:0 Tag or text which is only allowed inside the body section found outside of the body section. [DISALLOWED_HTML] 3 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/mask-icon.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/minimum_valid_amp.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/multiple_body_tags.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/multiple_body_tags.html:31:0 The tag 'BODY' appears more than once in the document. [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 3 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/multiple_body_tags_2.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/multiple_body_tags_2.html:33:0 The tag 'BODY' appears more than once in the document. [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 3 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/new_and_old_boilerplate_mixed.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/new_and_old_boilerplate_mixed.html:28:12 The tag 'noscript > style[amp-boilerplate] - old variant' is deprecated - use 'noscript > style[amp-boilerplate]' instead. (see https://github.com/ampproject/amphtml/blob/master/spec/amp-boilerplate.md) [DEPRECATION] 3 | feature_tests/new_and_old_boilerplate_mixed.html:34:7 The tag 'noscript > style[amp-boilerplate]' is missing or incorrect, but required by 'head > style[amp-boilerplate]'. (see https://github.com/ampproject/amphtml/blob/master/spec/amp-boilerplate.md) [GENERIC] 4 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/new_and_old_boilerplate_mixed2.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/new_and_old_boilerplate_mixed2.html:28:2 The tag 'head > style[amp-boilerplate] - old variant' is deprecated - use 'head > style[amp-boilerplate]' instead. (see https://github.com/ampproject/amphtml/blob/master/spec/amp-boilerplate.md) [DEPRECATION] 3 | feature_tests/new_and_old_boilerplate_mixed2.html:35:7 The tag 'head > style[amp-boilerplate]' is missing or incorrect, but required by 'noscript > style[amp-boilerplate]'. (see https://github.com/ampproject/amphtml/blob/master/spec/amp-boilerplate.md) [GENERIC] 4 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/new_boilerplate.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/no_custom_js.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/no_custom_js.html:28:3 The tag 'script' is disallowed except in specific forms. [CUSTOM_JAVASCRIPT_DISALLOWED] 3 | feature_tests/no_custom_js.html:29:3 The tag 'script' is disallowed except in specific forms. [CUSTOM_JAVASCRIPT_DISALLOWED] 4 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/old-boilerplate.out: -------------------------------------------------------------------------------- 1 | PASS 2 | feature_tests/old-boilerplate.html:24:2 The tag 'head > style[amp-boilerplate] - old variant' is deprecated - use 'head > style[amp-boilerplate]' instead. (see https://github.com/ampproject/amphtml/blob/master/spec/amp-boilerplate.md) [DEPRECATION] 3 | feature_tests/old-boilerplate.html:24:44 The tag 'noscript > style[amp-boilerplate] - old variant' is deprecated - use 'noscript > style[amp-boilerplate]' instead. (see https://github.com/ampproject/amphtml/blob/master/spec/amp-boilerplate.md) [DEPRECATION] 4 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/partial_comment.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/property_parsing.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/rdfa.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/recipe-json-ld.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/recipe-microdata.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/review-json-ld.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/review-microdata.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/runtime_in_body.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/runtime_in_body.html:40:2 The parent tag of tag 'amphtml engine v0.js script' is 'body', but it can only be 'head'. (see https://www.ampproject.org/docs/reference/spec#required-markup) [DISALLOWED_HTML] 3 | feature_tests/runtime_in_body.html:43:7 The mandatory tag 'amphtml engine v0.js script' is missing or incorrect. (see https://www.ampproject.org/docs/reference/spec#required-markup) [MANDATORY_AMP_TAG_MISSING_OR_INCORRECT] 4 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/slash_attrs.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/slash_attrs.html:33:2 The attribute 'data-\this-is-not' may not appear in tag 'p'. [DISALLOWED_HTML] 3 | feature_tests/slash_attrs.html:34:2 The attribute 'data-/this-is-not' may not appear in tag 'p'. [DISALLOWED_HTML] 4 | feature_tests/slash_attrs.html:35:2 The attribute 'data-\this-is-not' may not appear in tag 'p'. [DISALLOWED_HTML] 5 | feature_tests/slash_attrs.html:36:2 The attribute 'data-/this-is-not' may not appear in tag 'p'. [DISALLOWED_HTML] 6 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/slash_attrs.reserialized: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/testdata/feature_tests/slash_attrs.reserialized -------------------------------------------------------------------------------- /validator/testdata/feature_tests/slot.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/spec_example.out: -------------------------------------------------------------------------------- 1 | PASS 2 | feature_tests/spec_example.html:59:7 The tag 'amp-ad extension .js script' is missing or incorrect, but required by 'amp-ad'. This will soon be an error. (see https://www.ampproject.org/docs/reference/components/amp-ad) [DEPRECATION] 3 | feature_tests/spec_example.html:59:7 The extension 'amp-carousel' was found on this page, but is unused (no 'amp-carousel' tag seen). This may become an error in the future. [DEPRECATION] 4 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/stylesheet_in_body.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/stylesheet_in_body.html:41:2 The parent tag of tag 'link rel=stylesheet for fonts' is 'body', but it can only be 'head'. (see https://www.ampproject.org/docs/reference/spec#custom-fonts) [DISALLOWED_HTML] 3 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/svg.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/track_tag.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/track_tag.html:48:4 Invalid URL protocol 'http:' for attribute 'src' in tag 'amp-audio > track'. [AMP_TAG_PROBLEM] 3 | feature_tests/track_tag.html:50:4 The mandatory attribute 'srclang' is missing in tag 'amp-audio > track[kind=subtitles]'. [AMP_TAG_PROBLEM] 4 | feature_tests/track_tag.html:55:11 The mandatory attribute 'srclang' is missing in tag 'audio > track[kind=subtitles]'. [DISALLOWED_HTML] 5 | feature_tests/track_tag.html:56:11 The mandatory attribute 'srclang' is missing in tag 'video > track[kind=subtitles]'. [DISALLOWED_HTML] 6 | feature_tests/track_tag.html:59:4 The mandatory attribute 'srclang' is missing in tag 'amp-video > track[kind=subtitles]'. [AMP_TAG_PROBLEM] 7 | feature_tests/track_tag.html:63:7 The tag 'amp-video extension .js script' is missing or incorrect, but required by 'amp-video'. This will soon be an error. (see https://www.ampproject.org/docs/reference/components/amp-video) [DEPRECATION] 8 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/urls_in_css.out: -------------------------------------------------------------------------------- 1 | FAIL 2 | feature_tests/urls_in_css.html:32:11 CSS syntax error in tag 'style amp-custom' - bad url. [AUTHOR_STYLESHEET_PROBLEM] 3 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/valid_css_at_rules_amp.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/video-json-ld.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/testdata/feature_tests/video-microdata.out: -------------------------------------------------------------------------------- 1 | PASS 2 | -------------------------------------------------------------------------------- /validator/validator.protoascii: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2016 The AMP HTML Authors. All Rights Reserved. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS-IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the license. 15 | # 16 | 17 | This file was split up into validator-main.protoascii (in this directory) 18 | and extensions/*/validator-*.protoascii. Please update your bookmarks 19 | and references. 20 | -------------------------------------------------------------------------------- /validator/webui/.gitignore: -------------------------------------------------------------------------------- 1 | # This directory gets created by npm. 2 | node_modules/ 3 | # This file gets created if someone builds the standalone server. 4 | serve-standalone 5 | # This gets created by build.py. 6 | dist 7 | -------------------------------------------------------------------------------- /validator/webui/amp_favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/amphtml/4a3a811e092d24e8836a02f8ad8af3eaf5fb6401/validator/webui/amp_favicon.png -------------------------------------------------------------------------------- /validator/webui/app.yaml: -------------------------------------------------------------------------------- 1 | version: 1 2 | runtime: go 3 | api_version: go1 4 | 5 | handlers: 6 | - url: /fetch 7 | script: _go_app 8 | secure: always 9 | 10 | - url: /$ 11 | static_files: index.html 12 | upload: index.html 13 | secure: always 14 | 15 | - url: /amp_favicon.png$ 16 | static_files: amp_favicon.png 17 | upload: amp_favicon\.png$ 18 | secure: always 19 | 20 | - url: /logo-blue.svg$ 21 | static_files: logo-blue.svg 22 | upload: logo-blue\.svg$ 23 | secure: always 24 | 25 | skip_files: 26 | serve-standalone.go 27 | --------------------------------------------------------------------------------