amp-html 0.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/issue_template.md +16 -0
- data/.github/pull_request_template.md +21 -0
- data/.gitignore +13 -0
- data/.travis.yml +4 -0
- data/CHANGELOG.md +302 -0
- data/CONTRIBUTING.md +1 -0
- data/DEPRECATIONS.md +9 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +162 -0
- data/INSTALL.md +1 -0
- data/LICENSE +21 -0
- data/OWNERS.yaml +1 -0
- data/README.md +192 -0
- data/Rakefile +6 -0
- data/amp-html.gemspec +29 -0
- data/bin/amp-html +4 -0
- data/lib/amp_html.rb +27 -0
- data/lib/amp_html/cli.rb +113 -0
- data/lib/amp_html/components/docs/README.md +101 -0
- data/lib/amp_html/components/docs/ad.md +83 -0
- data/lib/amp_html/components/docs/analytics.md +131 -0
- data/lib/amp_html/components/docs/anim.md +66 -0
- data/lib/amp_html/components/docs/fonts.md +63 -0
- data/lib/amp_html/components/docs/forms.md +79 -0
- data/lib/amp_html/components/docs/iframe.md +62 -0
- data/lib/amp_html/components/docs/javascript.md +71 -0
- data/lib/amp_html/components/docs/lists.md +168 -0
- data/lib/amp_html/components/docs/media.md +52 -0
- data/lib/amp_html/components/docs/mustache.md +46 -0
- data/lib/amp_html/components/docs/notifications.md +0 -0
- data/lib/amp_html/components/docs/schema.md +80 -0
- data/lib/amp_html/components/docs/service_worker.md +60 -0
- data/lib/amp_html/components/docs/social.md +130 -0
- data/lib/amp_html/components/docs/stylesheets.md +50 -0
- data/lib/amp_html/components/help.rb +19 -0
- data/lib/amp_html/components/install.rb +34 -0
- data/lib/amp_html/components/templates/ERROR.md +5 -0
- data/lib/amp_html/components/templates/README.md +12 -0
- data/lib/amp_html/configuration.rb +170 -0
- data/lib/amp_html/configuration/docs/README.md +0 -0
- data/lib/amp_html/configuration/help.rb +11 -0
- data/lib/amp_html/helpers/docs/README.md +98 -0
- data/lib/amp_html/helpers/docs/amp.md +0 -0
- data/lib/amp_html/helpers/docs/amp_ad.md +86 -0
- data/lib/amp_html/helpers/docs/amp_analytics.md +76 -0
- data/lib/amp_html/helpers/docs/amp_anim.md +68 -0
- data/lib/amp_html/helpers/docs/amp_audio.md +54 -0
- data/lib/amp_html/helpers/docs/amp_auto_ads.md +43 -0
- data/lib/amp_html/helpers/docs/amp_close_user_notification_button.md +0 -0
- data/lib/amp_html/helpers/docs/amp_css.md +37 -0
- data/lib/amp_html/helpers/docs/amp_css_link.md +0 -0
- data/lib/amp_html/helpers/docs/amp_custom_ad.md +0 -0
- data/lib/amp_html/helpers/docs/amp_document_link.md +0 -0
- data/lib/amp_html/helpers/docs/amp_embed.md +86 -0
- data/lib/amp_html/helpers/docs/amp_facebook.md +70 -0
- data/lib/amp_html/helpers/docs/amp_fallback.md +47 -0
- data/lib/amp_html/helpers/docs/amp_font.md +0 -0
- data/lib/amp_html/helpers/docs/amp_font_link.md +0 -0
- data/lib/amp_html/helpers/docs/amp_form.md +0 -0
- data/lib/amp_html/helpers/docs/amp_form_response.md +0 -0
- data/lib/amp_html/helpers/docs/amp_gfycat.md +0 -0
- data/lib/amp_html/helpers/docs/amp_global_css.md +0 -0
- data/lib/amp_html/helpers/docs/amp_google_analytics.md +0 -0
- data/lib/amp_html/helpers/docs/amp_google_font.md +0 -0
- data/lib/amp_html/helpers/docs/amp_head.md +0 -0
- data/lib/amp_html/helpers/docs/amp_html_doctype.md +0 -0
- data/lib/amp_html/helpers/docs/amp_iframe.md +0 -0
- data/lib/amp_html/helpers/docs/amp_image.md +0 -0
- data/lib/amp_html/helpers/docs/amp_input.md +0 -0
- data/lib/amp_html/helpers/docs/amp_instagram.md +0 -0
- data/lib/amp_html/helpers/docs/amp_js.md +0 -0
- data/lib/amp_html/helpers/docs/amp_link.md +0 -0
- data/lib/amp_html/helpers/docs/amp_list.md +0 -0
- data/lib/amp_html/helpers/docs/amp_live_list.md +0 -0
- data/lib/amp_html/helpers/docs/amp_live_list_items.md +0 -0
- data/lib/amp_html/helpers/docs/amp_live_list_pagination.md +0 -0
- data/lib/amp_html/helpers/docs/amp_live_list_update.md +0 -0
- data/lib/amp_html/helpers/docs/amp_mustache.md +0 -0
- data/lib/amp_html/helpers/docs/amp_pin_it.md +0 -0
- data/lib/amp_html/helpers/docs/amp_pin_widget.md +0 -0
- data/lib/amp_html/helpers/docs/amp_pinterest_follow.md +0 -0
- data/lib/amp_html/helpers/docs/amp_pixel.md +0 -0
- data/lib/amp_html/helpers/docs/amp_placeholder.md +0 -0
- data/lib/amp_html/helpers/docs/amp_reddit.md +0 -0
- data/lib/amp_html/helpers/docs/amp_resources.md +0 -0
- data/lib/amp_html/helpers/docs/amp_selector.md +0 -0
- data/lib/amp_html/helpers/docs/amp_serviceworker.md +0 -0
- data/lib/amp_html/helpers/docs/amp_social_share.md +0 -0
- data/lib/amp_html/helpers/docs/amp_soundcloud.md +0 -0
- data/lib/amp_html/helpers/docs/amp_twitter.md +0 -0
- data/lib/amp_html/helpers/docs/amp_user_notification.md +0 -0
- data/lib/amp_html/helpers/docs/amp_video.md +0 -0
- data/lib/amp_html/helpers/docs/amp_video_ad.md +0 -0
- data/lib/amp_html/helpers/docs/amp_vine.md +0 -0
- data/lib/amp_html/helpers/docs/amp_youtube.md +0 -0
- data/lib/amp_html/helpers/docs/audio_tag.md +0 -0
- data/lib/amp_html/helpers/docs/canonical_document_link.md +0 -0
- data/lib/amp_html/helpers/docs/form_tag.md +0 -0
- data/lib/amp_html/helpers/docs/image_tag.md +0 -0
- data/lib/amp_html/helpers/docs/input_tag.md +0 -0
- data/lib/amp_html/helpers/docs/javascript_include_tag.md +0 -0
- data/lib/amp_html/helpers/docs/noscript_tag.md +0 -0
- data/lib/amp_html/helpers/docs/schema_tag.md +0 -0
- data/lib/amp_html/helpers/docs/stylesheet_link_tag.md +0 -0
- data/lib/amp_html/helpers/docs/video_tag.md +0 -0
- data/lib/amp_html/helpers/help.rb +23 -0
- data/lib/amp_html/root.rb +7 -0
- data/lib/amp_html/test.rb +169 -0
- data/lib/amp_html/test/help.rb +11 -0
- data/lib/amp_html/test/templates/README.md +43 -0
- data/lib/amp_html/test/templates/css/!important.md +1 -0
- data/lib/amp_html/test/templates/css/-amp-.md +1 -0
- data/lib/amp_html/test/templates/css/-moz-binding.md +1 -0
- data/lib/amp_html/test/templates/css/@import.md +1 -0
- data/lib/amp_html/test/templates/css/behavior.md +1 -0
- data/lib/amp_html/test/templates/css/filter.md +1 -0
- data/lib/amp_html/test/templates/css/i-amp-.md +1 -0
- data/lib/amp_html/test/templates/css/overflow.md +1 -0
- data/lib/amp_html/test/templates/html/applet.md +1 -0
- data/lib/amp_html/test/templates/html/audio.md +1 -0
- data/lib/amp_html/test/templates/html/base.md +1 -0
- data/lib/amp_html/test/templates/html/embed.md +1 -0
- data/lib/amp_html/test/templates/html/frame.md +1 -0
- data/lib/amp_html/test/templates/html/frameset.md +1 -0
- data/lib/amp_html/test/templates/html/http-equiv.md +1 -0
- data/lib/amp_html/test/templates/html/iframe.md +1 -0
- data/lib/amp_html/test/templates/html/img.md +1 -0
- data/lib/amp_html/test/templates/html/javascript_include_tag.md +1 -0
- data/lib/amp_html/test/templates/html/object.md +1 -0
- data/lib/amp_html/test/templates/html/onclick.md +1 -0
- data/lib/amp_html/test/templates/html/onmousehover.md +1 -0
- data/lib/amp_html/test/templates/html/param.md +1 -0
- data/lib/amp_html/test/templates/html/stylesheet_link_tag.md +1 -0
- data/lib/amp_html/test/templates/html/video.md +1 -0
- data/lib/amp_html/test/templates/markup/!doctype.md +1 -0
- data/lib/amp_html/test/templates/markup/amp_document_link.md +1 -0
- data/lib/amp_html/test/templates/markup/amp_head.md +1 -0
- data/lib/amp_html/test/templates/markup/amp_html_doctype.md +1 -0
- data/lib/amp_html/test/templates/markup/canonical_document_link.md +1 -0
- data/lib/amp_html/test/templates/markup/head_body.md +1 -0
- data/lib/amp_html/test/templates/markup/html.md +1 -0
- data/lib/amp_html/test/templates/markup/meta_viewport.md +1 -0
- data/lib/amp_html/validate.rb +46 -0
- data/lib/amp_html/validate/help.rb +11 -0
- data/lib/amp_html/validate/templates/README.md +32 -0
- data/lib/amp_html/version.rb +13 -0
- data/lib/generators/amphtml/assets_generator.rb +31 -0
- data/lib/generators/amphtml/bundle_generator.rb +50 -0
- data/lib/generators/amphtml/components_generator.rb +84 -0
- data/lib/generators/amphtml/helpers_generator.rb +32 -0
- data/lib/generators/amphtml/install_generator.rb +53 -0
- data/lib/generators/amphtml/views_generator.rb +62 -0
- data/lib/generators/templates/assets/README.md +0 -0
- data/lib/generators/templates/assets/stylesheets/application.scss +15 -0
- data/lib/generators/templates/components/README.md +0 -0
- data/lib/generators/templates/components/assets/javascripts/application.js +15 -0
- data/lib/generators/templates/components/helpers/ad_tag_helper.rb +83 -0
- data/lib/generators/templates/components/helpers/analytics_tag_helper.rb +30 -0
- data/lib/generators/templates/components/helpers/anim_tag_helper.rb +42 -0
- data/lib/generators/templates/components/helpers/iframe_tag_helper.rb +27 -0
- data/lib/generators/templates/components/helpers/javascript_tag_helper.rb +12 -0
- data/lib/generators/templates/components/helpers/lists_tag_helper.rb +82 -0
- data/lib/generators/templates/components/helpers/notification_tag_helper.rb +16 -0
- data/lib/generators/templates/components/helpers/serviceworker_tag_helper.rb +15 -0
- data/lib/generators/templates/components/helpers/social_tag_helper.rb +228 -0
- data/lib/generators/templates/components/public/remote.html +28 -0
- data/lib/generators/templates/components/views/_components.html.erb +141 -0
- data/lib/generators/templates/components/views/_google_analytics.html.erb +23 -0
- data/lib/generators/templates/helpers/README.md +1 -0
- data/lib/generators/templates/helpers/amp/fallback_tag_helper.rb +16 -0
- data/lib/generators/templates/helpers/amp/font_tag_helper.rb +37 -0
- data/lib/generators/templates/helpers/amp/link_tag_helper.rb +11 -0
- data/lib/generators/templates/helpers/amp/mustache_tag_helper.rb +13 -0
- data/lib/generators/templates/helpers/amp/noscript_tag_helper.rb +13 -0
- data/lib/generators/templates/helpers/amp/placeholder_tag_helper.rb +16 -0
- data/lib/generators/templates/helpers/amp/schema_tag_helper.rb +16 -0
- data/lib/generators/templates/helpers/amp/stylesheets_tag_helper.rb +21 -0
- data/lib/generators/templates/helpers/amp_tag_helper.rb.erb +65 -0
- data/lib/generators/templates/helpers/asset_tag_helper.rb.erb +119 -0
- data/lib/generators/templates/helpers/form_tag_helper.rb.erb +79 -0
- data/lib/generators/templates/install/README.md +1 -0
- data/lib/generators/templates/install/amphtml.rb.erb +19 -0
- data/lib/generators/templates/install/amphtml.yml.erb +189 -0
- data/lib/generators/templates/views/README.md +1 -0
- data/lib/generators/templates/views/application.html.erb +71 -0
- data/lib/generators/templates/views/application/_head.html.erb +47 -0
- data/lib/generators/templates/views/application/_resources.html.erb +16 -0
- data/lib/generators/templates/views/application/_schema.html.erb +6 -0
- data/lib/generators/templates/views/config/mime_types.rb +8 -0
- metadata +294 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<head>
|
|
3
|
+
<meta charset="utf-8">
|
|
4
|
+
<meta name="robots" content="noindex">
|
|
5
|
+
<script>
|
|
6
|
+
(function() {
|
|
7
|
+
var v = location.search.substr(1);
|
|
8
|
+
if (!(/^\d+(-canary)?$/.test(v))) return;
|
|
9
|
+
var u = 'https://3p.ampproject.net/'+encodeURIComponent(v)+'/f.js';
|
|
10
|
+
document.write('<script'+' src="'+encodeURI(u)+'"><'+'/script>');
|
|
11
|
+
})();
|
|
12
|
+
</script>
|
|
13
|
+
</head>
|
|
14
|
+
<body style="margin:0">
|
|
15
|
+
<div id="c" style="position:absolute;top:0;left:0;bottom:0;right:0;">
|
|
16
|
+
<script>
|
|
17
|
+
draw3p(undefined,
|
|
18
|
+
// List of expected amp-ad types.
|
|
19
|
+
['allowed-ad-type1', 'allowed-ad-type2'],
|
|
20
|
+
// List of hostnames that are allowed to embed this change.
|
|
21
|
+
// Please also use ALLOW-FROM X-Frame-Options to get security in
|
|
22
|
+
// browsers that do not support location.ancestorOrigins.
|
|
23
|
+
['your-domain.com']);
|
|
24
|
+
</script>
|
|
25
|
+
</div>
|
|
26
|
+
<script>if (window.docEndCallback) window.docEndCallback()</script>
|
|
27
|
+
</body>
|
|
28
|
+
</html>
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
<!-- ************************** -->
|
|
2
|
+
<!-- DO NOT ALTER THIS FILE! -->
|
|
3
|
+
<!-- ************************** -->
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
<!-- Assets -->
|
|
7
|
+
|
|
8
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-anim> (amp_anim helper) for animated images. Learn more: https://www.ampproject.org/docs/guides/author-develop/amp_replacements -->
|
|
9
|
+
<% if options[:anim] || options[:all] %>
|
|
10
|
+
<script async custom-element="amp-anim" src="https://cdn.ampproject.org/v0/amp-anim-0.1.js"></script>
|
|
11
|
+
<% else %>
|
|
12
|
+
<!-- <script async custom-element="amp-anim" src="https://cdn.ampproject.org/v0/amp-anim-0.1.js"></script> -->
|
|
13
|
+
<% end %>
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
<!-- Components -->
|
|
17
|
+
|
|
18
|
+
<!-- Forms -->
|
|
19
|
+
<script async custom-element="amp-form" src="https://cdn.ampproject.org/v0/amp-form-0.1.js"></script>
|
|
20
|
+
<%% if AmpHtml.forms_selector %><script async custom-element="amp-selector" src="https://cdn.ampproject.org/v0/amp-selector-0.1.js"></script><%% end %>
|
|
21
|
+
|
|
22
|
+
<!-- Mustache.js -->
|
|
23
|
+
<script async custom-template="amp-mustache" src="https://cdn.ampproject.org/v0/amp-mustache-0.1.js"></script>
|
|
24
|
+
|
|
25
|
+
<!-- Lists -->
|
|
26
|
+
<% if options[:lists] || options[:all] %>
|
|
27
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-list> (amp_list helper). Learn more: https://www.ampproject.org/docs/reference/components/dynamic/amp-list -->
|
|
28
|
+
<script async custom-element="amp-list" src="https://cdn.ampproject.org/v0/amp-list-0.1.js"></script>
|
|
29
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-live-list> (amp_live_list helper). Learn more: https://www.ampproject.org/docs/reference/components/dynamic/amp-live-list -->
|
|
30
|
+
<script async custom-element="amp-live-list" src="https://cdn.ampproject.org/v0/amp-live-list-0.1.js"></script>
|
|
31
|
+
<% else %>
|
|
32
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-list> (amp_list helper). Learn more: https://www.ampproject.org/docs/reference/components/dynamic/amp-list -->
|
|
33
|
+
<!-- <script async custom-element="amp-list" src="https://cdn.ampproject.org/v0/amp-list-0.1.js"></script> -->
|
|
34
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-live-list> (amp_live_list helper). Learn more: https://www.ampproject.org/docs/reference/components/dynamic/amp-live-list -->
|
|
35
|
+
<!-- <script async custom-element="amp-live-list" src="https://cdn.ampproject.org/v0/amp-live-list-0.1.js"></script> -->
|
|
36
|
+
<% end %>
|
|
37
|
+
|
|
38
|
+
<!-- Ads -->
|
|
39
|
+
<% if options[:ad] || options[:all] %>
|
|
40
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-ad> (amp_ad helper). Learn more: https://www.ampproject.org/docs/reference/components/ads/amp-ad -->
|
|
41
|
+
<script async custom-element="amp-ad" src="https://cdn.ampproject.org/v0/amp-ad-0.1.js"></script>
|
|
42
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-sticky-ad> (amp_ad(sticky: true) helper). Learn more: https://www.ampproject.org/docs/reference/components/ads/amp-sticky-ad -->
|
|
43
|
+
<script async custom-element="amp-sticky-ad" src="https://cdn.ampproject.org/v0/amp-sticky-ad-1.0.js"></script>
|
|
44
|
+
<% else %>
|
|
45
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-ad> (amp_ad helper). Learn more: https://www.ampproject.org/docs/reference/components/ads/amp-ad -->
|
|
46
|
+
<!-- <script async custom-element="amp-ad" src="https://cdn.ampproject.org/v0/amp-ad-0.1.js"></script> -->
|
|
47
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-sticky-ad> (amp_ad(sticky: true) helper). Learn more: https://www.ampproject.org/docs/reference/components/ads/amp-sticky-ad -->
|
|
48
|
+
<!-- <script async custom-element="amp-sticky-ad" src="https://cdn.ampproject.org/v0/amp-sticky-ad-1.0.js"></script> -->
|
|
49
|
+
<% end %>
|
|
50
|
+
|
|
51
|
+
<!-- iframe -->
|
|
52
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-iframe> (amp_iframe helper). Learn more: https://www.ampproject.org/docs/guides/author-develop/iframes -->
|
|
53
|
+
<% if options[:iframe] || options[:javascript] || options[:service_worker] || options[:all] %>
|
|
54
|
+
<script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-iframe-0.1.js"></script>
|
|
55
|
+
<% else %>
|
|
56
|
+
<!-- <script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-iframe-0.1.js"></script> -->
|
|
57
|
+
<% end %>
|
|
58
|
+
|
|
59
|
+
<!-- iframe -->
|
|
60
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-install-serviceworker> (amp_serviceworker helper). Learn more: https://www.ampproject.org/docs/reference/components/dynamic/amp-install-serviceworker -->
|
|
61
|
+
<% if options[:service_worker] || options[:all] %>
|
|
62
|
+
<script async custom-element="amp-install-serviceworker" src="https://cdn.ampproject.org/v0/amp-install-serviceworker-0.1.js"></script>
|
|
63
|
+
<% else %>
|
|
64
|
+
<!-- <script async custom-element="amp-install-serviceworker" src="https://cdn.ampproject.org/v0/amp-install-serviceworker-0.1.js"></script> -->
|
|
65
|
+
<% end %>
|
|
66
|
+
|
|
67
|
+
<!-- Analytics -->
|
|
68
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-analytics> (amp_analytics helper). Learn more: https://www.ampproject.org/docs/reference/components/ads/amp-analytics -->
|
|
69
|
+
<% if options[:analytics] || options[:notifications] || options[:all] %>
|
|
70
|
+
<script async custom-element="amp-analytics" src="https://cdn.ampproject.org/v0/amp-analytics-0.1.js"></script>
|
|
71
|
+
<% else %>
|
|
72
|
+
<!-- <script async custom-element="amp-analytics" src="https://cdn.ampproject.org/v0/amp-analytics-0.1.js"></script> -->
|
|
73
|
+
<% end %>
|
|
74
|
+
|
|
75
|
+
<!-- Notifications -->
|
|
76
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-user-notification> (amp_user_notification helper). Learn more: https://www.ampproject.org/docs/reference/components/dynamic/amp-user-notification -->
|
|
77
|
+
<% if options[:notifications] || options[:all] %>
|
|
78
|
+
<script async custom-element="amp-user-notification" src="https://cdn.ampproject.org/v0/amp-user-notification-0.1.js"></script>
|
|
79
|
+
<% else %>
|
|
80
|
+
<!-- <script async custom-element="amp-user-notification" src="https://cdn.ampproject.org/v0/amp-user-notification-0.1.js"></script> -->
|
|
81
|
+
<% end %>
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
<!-- Social -->
|
|
85
|
+
|
|
86
|
+
<% if options[:social] || options[:all] %>
|
|
87
|
+
|
|
88
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-twitter> (amp_twitter helper) for embedding Twitter Tweets. Learn more: https://www.ampproject.org/docs/guides/author-develop/third_party_components -->
|
|
89
|
+
<script async custom-element="amp-twitter" src="https://cdn.ampproject.org/v0/amp-twitter-0.1.js"></script>
|
|
90
|
+
|
|
91
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-instagram> (amp_instagram helper) for embedding Instagrams. Learn more: https://www.ampproject.org/docs/guides/author-develop/third_party_components -->
|
|
92
|
+
<script async custom-element="amp-instagram" src="https://cdn.ampproject.org/v0/amp-instagram-0.1.js"></script>
|
|
93
|
+
|
|
94
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-facebook> (amp_facebook helper) for embedding a Facebook post or video. Learn more: https://www.ampproject.org/docs/guides/author-develop/third_party_components -->
|
|
95
|
+
<script async custom-element="amp-facebook" src="https://cdn.ampproject.org/v0/amp-facebook-0.1.js"></script>
|
|
96
|
+
|
|
97
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-youtube> (amp_youtube helper) for embedding a YouTube video. Learn more: https://www.ampproject.org/docs/guides/author-develop/third_party_components -->
|
|
98
|
+
<script async custom-element="amp-youtube" src="https://cdn.ampproject.org/v0/amp-youtube-0.1.js"></script>
|
|
99
|
+
|
|
100
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-reddit> (amp_reddit helper) for embedding a Reddit post or comment. Learn more: https://www.ampproject.org/docs/reference/components/social/amp-reddit -->
|
|
101
|
+
<script async custom-element="amp-reddit" src="https://cdn.ampproject.org/v0/amp-reddit-0.1.js"></script>
|
|
102
|
+
|
|
103
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-social-share> (amp_social_share helper) for displaying a social share button. Learn more: https://www.ampproject.org/docs/reference/components/social/amp-social-share -->
|
|
104
|
+
<script async custom-element="amp-social-share" src="https://cdn.ampproject.org/v0/amp-social-share-0.1.js"></script>
|
|
105
|
+
|
|
106
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-soundcloud> (amp_soundcloud helper) for embedding a SoundCloud track. Learn more: https://www.ampproject.org/docs/reference/components/media/amp-soundcloud -->
|
|
107
|
+
<script async custom-element="amp-soundcloud" src="https://cdn.ampproject.org/v0/amp-soundcloud-0.1.js"></script>
|
|
108
|
+
|
|
109
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-vine> (amp_vine helper) for embedding a Vine. Learn more: https://www.ampproject.org/docs/reference/components/social/amp-vine -->
|
|
110
|
+
<script async custom-element="amp-vine" src="https://cdn.ampproject.org/v0/amp-vine-0.1.js"></script>
|
|
111
|
+
|
|
112
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-gfycat> (amp_gfycat helper) for embedding a Pin it button, Pin widget or follow button. Learn more: https://www.ampproject.org/docs/reference/components/social/amp-pinterest -->
|
|
113
|
+
<script async custom-element="amp-pinterest" src="https://cdn.ampproject.org/v0/amp-pinterest-0.1.js"></script>
|
|
114
|
+
|
|
115
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-gfycat> (amp_gfycat helper) for embedding a Gfycat. Learn more: https://www.ampproject.org/docs/reference/components/social/amp-gfycat -->
|
|
116
|
+
<script async custom-element="amp-gfycat" src="https://cdn.ampproject.org/v0/amp-gfycat-0.1.js"></script>
|
|
117
|
+
|
|
118
|
+
<% else %>
|
|
119
|
+
|
|
120
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-twitter> (twitter_tag || amp_twitter_tag helper) for embedding Twitter Tweets. Learn more: https://www.ampproject.org/docs/guides/author-develop/third_party_components -->
|
|
121
|
+
<!-- <script async custom-element="amp-twitter" src="https://cdn.ampproject.org/v0/amp-twitter-0.1.js"></script> -->
|
|
122
|
+
|
|
123
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-instagram> (instagram_tag || amp_instagram_tag helper) for embedding Instagrams. Learn more: https://www.ampproject.org/docs/guides/author-develop/third_party_components -->
|
|
124
|
+
<!-- <script async custom-element="amp-instagram" src="https://cdn.ampproject.org/v0/amp-instagram-0.1.js"></script> -->
|
|
125
|
+
|
|
126
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-facebook> (facebook_tag || amp_facebook_tag helper) for embedding Facebook post or video. Learn more: https://www.ampproject.org/docs/guides/author-develop/third_party_components -->
|
|
127
|
+
<!-- <script async custom-element="amp-facebook" src="https://cdn.ampproject.org/v0/amp-facebook-0.1.js"></script> -->
|
|
128
|
+
|
|
129
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-youtube> (youtube_tag || amp_youtube_tag helper) for embedding YouTube video. Learn more: https://www.ampproject.org/docs/guides/author-develop/third_party_components -->
|
|
130
|
+
<!-- <script async custom-element="amp-youtube" src="https://cdn.ampproject.org/v0/amp-youtube-0.1.js"></script> -->
|
|
131
|
+
|
|
132
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-reddit> (amp_reddit helper) for embedding a Reddit post or comment. Learn more: https://www.ampproject.org/docs/reference/components/social/amp-reddit -->
|
|
133
|
+
<!-- <script async custom-element="amp-reddit" src="https://cdn.ampproject.org/v0/amp-reddit-0.1.js"></script> -->
|
|
134
|
+
|
|
135
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-social-share> (amp_social_share helper) for displaying a social share button. Learn more: https://www.ampproject.org/docs/reference/components/social/amp-social-share -->
|
|
136
|
+
<!-- <script async custom-element="amp-social-share" src="https://cdn.ampproject.org/v0/amp-social-share-0.1.js"></script> -->
|
|
137
|
+
|
|
138
|
+
<!-- **Note:** Uncomment the following script tag to use <amp-soundcloud> (amp_soundcloud helper) for embedding a SoundCloud track. Learn more: https://www.ampproject.org/docs/reference/components/media/amp-soundcloud -->
|
|
139
|
+
<!-- <script async custom-element="amp-soundcloud" src="https://cdn.ampproject.org/v0/amp-soundcloud-0.1.js"></script> -->
|
|
140
|
+
|
|
141
|
+
<% end %>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script type="application/json">
|
|
2
|
+
{
|
|
3
|
+
"vars": {
|
|
4
|
+
"account": <%%= AmpHtml.google_analytics_account %>
|
|
5
|
+
},
|
|
6
|
+
"triggers": {
|
|
7
|
+
"trackPageview": {
|
|
8
|
+
"on": "visible",
|
|
9
|
+
"request": "pageview",
|
|
10
|
+
}<%% if triggers %>,<%% triggers.each do |name, trigger| %>
|
|
11
|
+
<%%= name %>: {
|
|
12
|
+
"on": <%%= trigger.on %>,
|
|
13
|
+
"request": <%%= trigger.request %><%% if trigger.vars %>,
|
|
14
|
+
"vars": {<%% trigger.vars.each do |variable| %><%% if variable.event_category %>
|
|
15
|
+
"eventCategory": <%%= variable.event_category %>,<%% end %><%% if variable.event_action %>
|
|
16
|
+
"eventAction": <%%= variable.event_action %><%% end %><%% if variable.title %>
|
|
17
|
+
"title": <%%= variable.title %>,<%% end %><%% if variable.document_location %>
|
|
18
|
+
"documentLocation": <%%= variable.document_location %><%% end %>
|
|
19
|
+
}<%% end %>
|
|
20
|
+
}<%% unless trigger == triggers.last %>,<%% end %><%% end %><%% end %>
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
</script>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ABCDEFG
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module ApplicationHelper
|
|
2
|
+
module Amp::FallbackTagHelper
|
|
3
|
+
|
|
4
|
+
def amp_fallback(name, options = {}, &block)
|
|
5
|
+
options = options.symbolize_keys
|
|
6
|
+
options.merge(fallback: "")
|
|
7
|
+
|
|
8
|
+
if block_given?
|
|
9
|
+
content_tag(name, capture(&block), options)
|
|
10
|
+
else
|
|
11
|
+
content_tag(name, nil, options)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module ApplicationHelper
|
|
2
|
+
module Amp::FontTagHelper
|
|
3
|
+
|
|
4
|
+
# # Requires script
|
|
5
|
+
# def amp_font(family, timeout, options = {})
|
|
6
|
+
# options = options.symbolize_keys
|
|
7
|
+
#
|
|
8
|
+
# options[:"font-family"] = family
|
|
9
|
+
# options[:timeout] = timeout
|
|
10
|
+
#
|
|
11
|
+
# content_tag("amp-font", options)
|
|
12
|
+
# end
|
|
13
|
+
|
|
14
|
+
def amp_font_link href
|
|
15
|
+
options = {}
|
|
16
|
+
|
|
17
|
+
options[:href] = href
|
|
18
|
+
options[:rel] = 'stylesheet'
|
|
19
|
+
warn 'WARNING (AMP): For including custom fonts, origins must be whitelisted - use `@font-face` instead. Learn more: https://github.com/ampproject/amphtml/blob/master/spec/amp-html-format.md#custom-fonts' unless href.include?('fonts.googleapis.com') || href.include?('fast.fonts.net') || href.include?('cloud.typography.com') || href.include?('maxcdn.bootstrapcdn.com')
|
|
20
|
+
|
|
21
|
+
content_tag 'link', options
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def amp_google_font family, types = {}
|
|
25
|
+
options = {}
|
|
26
|
+
|
|
27
|
+
href = 'https://fonts.googleapis.com/css?family=' + family.gsub ' ', '+'
|
|
28
|
+
href = href + ':' + types.map(&:to_s).join(',') if types.size > 0
|
|
29
|
+
|
|
30
|
+
options[:href] = href
|
|
31
|
+
options[:rel] = 'stylesheet'
|
|
32
|
+
|
|
33
|
+
content_tag 'link', options
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module ApplicationHelper
|
|
2
|
+
module Amp::PlaceholderTagHelper
|
|
3
|
+
|
|
4
|
+
def amp_placeholder(name, options = {}, &block)
|
|
5
|
+
options = options.symbolize_keys
|
|
6
|
+
options[:placeholder] = ""
|
|
7
|
+
|
|
8
|
+
if block_given?
|
|
9
|
+
content_tag(name, capture(&block), options)
|
|
10
|
+
else
|
|
11
|
+
content_tag(name, nil, options)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module ApplicationHelper
|
|
2
|
+
module Amp::SchemaTagHelper
|
|
3
|
+
|
|
4
|
+
def schema_tag(options = {})
|
|
5
|
+
options = options.symbolize_keys
|
|
6
|
+
|
|
7
|
+
options[:@type] = AmpHtml.application_type if AmpHtml.application_type && options[:@type] == nil
|
|
8
|
+
options[:headline] = AmpHtml.application_name if AmpHtml.application_name && options[:headline] == nil
|
|
9
|
+
options[:datePublished] = AmpHtml.application_date_published if AmpHtml.application_date_published && options[:datePublished] == nil
|
|
10
|
+
options[:image] = AmpHtml.application_image if AmpHtml.application_image && options[:image] == nil
|
|
11
|
+
|
|
12
|
+
render 'application/amp/schema', options: options
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module ApplicationHelper
|
|
2
|
+
module Amp::StylesheetsTagHelper
|
|
3
|
+
|
|
4
|
+
def amp_css &block
|
|
5
|
+
if block_given?
|
|
6
|
+
content_for :css, capture(&block)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# def amp_css_link(href)
|
|
11
|
+
# end
|
|
12
|
+
|
|
13
|
+
def amp_global_css &block
|
|
14
|
+
warn 'AMP-HTML WARNING: `amp_global_css` is deprecated and will be removed in amp-html 2.0 - use `amp_css` instead'
|
|
15
|
+
if block_given?
|
|
16
|
+
content_for :global_css, capture(&block)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
module ApplicationHelper
|
|
2
|
+
module Amp::AmpTagHelper
|
|
3
|
+
|
|
4
|
+
def amp_html_doctype &block
|
|
5
|
+
doctype = render html: '<!doctype html>'.html_safe
|
|
6
|
+
if block_given?
|
|
7
|
+
html = content_tag 'html', capture(&block), ⚡: ''
|
|
8
|
+
else
|
|
9
|
+
html = content_tag 'html', nil, ⚡: ''
|
|
10
|
+
end
|
|
11
|
+
doctype + html
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
<% if options[:split] %>
|
|
16
|
+
def amp_document_link href = request.original_url
|
|
17
|
+
options = {}
|
|
18
|
+
options[:href] = href
|
|
19
|
+
options[:rel] = 'amphtml'
|
|
20
|
+
tag "link", options
|
|
21
|
+
end
|
|
22
|
+
<% end %>
|
|
23
|
+
|
|
24
|
+
def canonical_document_link href = request.original_url
|
|
25
|
+
options = {}
|
|
26
|
+
options[:href] = href
|
|
27
|
+
options[:rel] = 'canonical'
|
|
28
|
+
tag "link", options
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def amp_head options = {}
|
|
33
|
+
options = options.symbolize_keys
|
|
34
|
+
|
|
35
|
+
head = render 'application/amp/head', options: options
|
|
36
|
+
|
|
37
|
+
resources = render 'application/amp/resources'
|
|
38
|
+
components = render 'application/amp/components'
|
|
39
|
+
|
|
40
|
+
head + resources + components
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def amp_resources
|
|
45
|
+
warn 'AMP-HTML WARNING: `amp_resources` is deprecated and will be removed in amphtml 1.0 - use `amp_head` instead'
|
|
46
|
+
resources = render 'application/amp/resources'
|
|
47
|
+
components = render 'application/amp/components'
|
|
48
|
+
resources + components
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def amp?
|
|
53
|
+
unless AmpHtml.split_view
|
|
54
|
+
true
|
|
55
|
+
else
|
|
56
|
+
if request.format = AmpHtml.default_format
|
|
57
|
+
true
|
|
58
|
+
else
|
|
59
|
+
false
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
require "active_support/core_ext/array/extract_options"
|
|
2
|
+
require "active_support/core_ext/hash/keys"
|
|
3
|
+
require "action_view/helpers/asset_url_helper"
|
|
4
|
+
require "action_view/helpers/tag_helper"
|
|
5
|
+
|
|
6
|
+
module AssetTagHelper
|
|
7
|
+
extend ActiveSupport::Concern
|
|
8
|
+
|
|
9
|
+
include ::ActionView::Helpers::AssetUrlHelper
|
|
10
|
+
include ::ActionView::Helpers::TagHelper
|
|
11
|
+
|
|
12
|
+
<% unless options[:split] %>
|
|
13
|
+
def javascript_include_tag(*sources)
|
|
14
|
+
warn "AMP-HTML WARNING: external and internal scripts are not allowed in an AMP document"
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
def stylesheet_link_tag(*sources)
|
|
18
|
+
warn "AMP-HTML WARNING: external and internal stylesheets are not allowed in an AMP document"
|
|
19
|
+
super
|
|
20
|
+
end
|
|
21
|
+
<% else %>
|
|
22
|
+
# def javascript_include_tag(*sources)
|
|
23
|
+
# warn "AMP-HTML WARNING: external and internal scripts are not allowed in an AMP document"
|
|
24
|
+
# super
|
|
25
|
+
# end
|
|
26
|
+
# def stylesheet_link_tag(*sources)
|
|
27
|
+
# warn "AMP-HTML WARNING: external and internal stylesheets are not allowed in an AMP document"
|
|
28
|
+
# super
|
|
29
|
+
# end
|
|
30
|
+
<% end %>
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def amp_image(source, options = {})
|
|
34
|
+
options = options.symbolize_keys
|
|
35
|
+
check_for_image_tag_errors(options)
|
|
36
|
+
|
|
37
|
+
src = options[:src] = path_to_image(source, skip_pipeline: options.delete(:skip_pipeline))
|
|
38
|
+
|
|
39
|
+
unless src.start_with?("cid:") || src.start_with?("data:") || src.blank?
|
|
40
|
+
options[:alt] = options.fetch(:alt) { image_alt(src) }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
options[:width], options[:height] = extract_dimensions(options.delete(:size)) if options[:size]
|
|
44
|
+
warn "WARNING (AMP): specify width and height of amp-img tags." unless options[:width] && options[:height]
|
|
45
|
+
|
|
46
|
+
options[:layout] = "responsive" unless options[:layout] != "responsive"
|
|
47
|
+
content_tag("amp-img", options) do
|
|
48
|
+
noscript_tag
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
<% unless options[:split] %>
|
|
52
|
+
def image_tag(source, options = {})
|
|
53
|
+
amp_image(source, options)
|
|
54
|
+
end
|
|
55
|
+
<% end %>
|
|
56
|
+
|
|
57
|
+
def amp_video(*sources)
|
|
58
|
+
options = sources.extract_options!.symbolize_keys
|
|
59
|
+
options[:fallback] = "Your browser doesn’t support HTML5 video" unless options[:fallback]
|
|
60
|
+
public_poster_folder = options.delete(:poster_skip_pipeline)
|
|
61
|
+
sources << options
|
|
62
|
+
multiple_sources_tag_builder("amp-video", sources, fallback) do |tag_options|
|
|
63
|
+
tag_options[:poster] = path_to_image(tag_options[:poster], skip_pipeline: public_poster_folder) if tag_options[:poster]
|
|
64
|
+
tag_options[:width], tag_options[:height] = extract_dimensions(tag_options.delete(:size)) if tag_options[:size]
|
|
65
|
+
warn "WARNING (AMP): specify width and height of amp-video tags." unless tag_options[:width] && tag_options[:height]
|
|
66
|
+
tag_options[:layout] = "responsive" unless tag_options[:layout] != "responsive"
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
<% unless options[:split] %>
|
|
70
|
+
def video_tag(*sources)
|
|
71
|
+
options[:fallback] = "Your browser doesn’t support HTML5 video" unless options[:fallback]
|
|
72
|
+
amp_video(*sources, fallback)
|
|
73
|
+
end
|
|
74
|
+
<% end %>
|
|
75
|
+
|
|
76
|
+
def amp_audio(*sources)
|
|
77
|
+
options = sources.extract_options!.symbolize_keys
|
|
78
|
+
options[:fallback] = "Your browser doesn’t support HTML5 audio" unless options[:fallback]
|
|
79
|
+
multiple_sources_tag_builder("amp-audio", sources, options)
|
|
80
|
+
end
|
|
81
|
+
<% unless options[:split] %>
|
|
82
|
+
def audio_tag(*sources)
|
|
83
|
+
options = sources.extract_options!.symbolize_keys
|
|
84
|
+
options[:fallback] = "Your browser doesn’t support HTML5 audio" unless options[:fallback]
|
|
85
|
+
amp_audio(*sources, options)
|
|
86
|
+
end
|
|
87
|
+
<% end %>
|
|
88
|
+
|
|
89
|
+
private
|
|
90
|
+
|
|
91
|
+
def multiple_sources_tag_builder(type, sources, fallback)
|
|
92
|
+
options = sources.extract_options!.symbolize_keys
|
|
93
|
+
skip_pipeline = options.delete(:skip_pipeline)
|
|
94
|
+
sources.flatten!
|
|
95
|
+
|
|
96
|
+
yield options if block_given?
|
|
97
|
+
|
|
98
|
+
if sources.size > 1
|
|
99
|
+
content_tag(type, options) do
|
|
100
|
+
safe_join sources.map { |source| tag("source", src: send("path_to_#{type}", source, skip_pipeline: skip_pipeline)) }
|
|
101
|
+
if fallback.present?
|
|
102
|
+
content_tag("div", nil, {fallback: true}) do
|
|
103
|
+
content_tag("p", fallback)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
else
|
|
108
|
+
options[:src] = send("path_to_#{type}", sources.first, skip_pipeline: skip_pipeline)
|
|
109
|
+
content_tag(type, nil, options) do
|
|
110
|
+
if fallback.present?
|
|
111
|
+
content_tag("div", nil, {fallback: true}) do
|
|
112
|
+
content_tag("p", fallback)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
end
|