amp-html 0.7.18 → 1.0.0

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.
Files changed (204) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +82 -77
  3. data/README.md +61 -75
  4. data/app/helpers/amp_html/asset_helper.rb +11 -0
  5. data/app/helpers/amp_html/base_helper.rb +14 -0
  6. data/app/helpers/amp_html/dynamic_content_helper.rb +14 -0
  7. data/app/helpers/amp_html/layouts_helper.rb +11 -0
  8. data/app/helpers/amp_html/media_helper.rb +15 -0
  9. data/app/views/mozaic/amp/_amp-link.html.erb +1 -0
  10. data/app/views/mozaic/amp/_audio.html.erb +11 -0
  11. data/app/views/mozaic/amp/_canonical-link.html.erb +1 -0
  12. data/app/views/mozaic/amp/_components.html.erb +6 -0
  13. data/app/views/mozaic/amp/_doctype.html.erb +4 -0
  14. data/app/views/mozaic/amp/_font.html.erb +2 -0
  15. data/app/views/mozaic/amp/_form-response.html.erb +5 -0
  16. data/app/views/mozaic/amp/_form.html.erb +3 -0
  17. data/app/views/mozaic/amp/_head.html.erb +13 -0
  18. data/app/views/mozaic/amp/_img.html.erb +1 -0
  19. data/app/views/mozaic/amp/_input.html.erb +1 -0
  20. data/app/views/mozaic/amp/_mustache.html.erb +3 -0
  21. data/app/views/mozaic/amp/_selector.html.erb +3 -0
  22. data/app/views/mozaic/amp/_video.html.erb +11 -0
  23. data/lib/amp-html.rb +4 -20
  24. data/lib/amp-html/configuration.rb +13 -158
  25. data/lib/amp-html/engine.rb +6 -0
  26. data/lib/amp-html/railtie.rb +109 -0
  27. data/lib/amp-html/version.rb +1 -9
  28. data/lib/generators/amp_html_generator.rb +27 -0
  29. data/lib/generators/templates/{assets/stylesheets/application.scss → application.css} +1 -1
  30. data/lib/generators/templates/initializer.rb +14 -0
  31. data/lib/generators/templates/layout.html.erb +15 -0
  32. metadata +53 -204
  33. data/.github/issue_template.md +0 -16
  34. data/.github/pull_request_template.md +0 -21
  35. data/.gitignore +0 -13
  36. data/.travis.yml +0 -4
  37. data/CODE_OF_CONDUCT.md +0 -46
  38. data/CONTRIBUTING.md +0 -1
  39. data/DEPRECATIONS.md +0 -9
  40. data/Gemfile +0 -12
  41. data/Gemfile.lock +0 -164
  42. data/INSTALL.md +0 -2
  43. data/OWNERS.yaml +0 -1
  44. data/Rakefile +0 -6
  45. data/amp-html.gemspec +0 -30
  46. data/bin/amp-html +0 -4
  47. data/lib/amp-html/cli.rb +0 -113
  48. data/lib/amp-html/components/docs/README.md +0 -101
  49. data/lib/amp-html/components/docs/ad.md +0 -83
  50. data/lib/amp-html/components/docs/analytics.md +0 -131
  51. data/lib/amp-html/components/docs/anim.md +0 -66
  52. data/lib/amp-html/components/docs/fonts.md +0 -63
  53. data/lib/amp-html/components/docs/forms.md +0 -79
  54. data/lib/amp-html/components/docs/iframe.md +0 -62
  55. data/lib/amp-html/components/docs/javascript.md +0 -71
  56. data/lib/amp-html/components/docs/lists.md +0 -168
  57. data/lib/amp-html/components/docs/media.md +0 -52
  58. data/lib/amp-html/components/docs/mustache.md +0 -46
  59. data/lib/amp-html/components/docs/notifications.md +0 -0
  60. data/lib/amp-html/components/docs/schema.md +0 -80
  61. data/lib/amp-html/components/docs/service_worker.md +0 -60
  62. data/lib/amp-html/components/docs/social.md +0 -130
  63. data/lib/amp-html/components/docs/stylesheets.md +0 -50
  64. data/lib/amp-html/components/help.rb +0 -19
  65. data/lib/amp-html/components/install.rb +0 -34
  66. data/lib/amp-html/components/templates/ERROR.md +0 -5
  67. data/lib/amp-html/components/templates/README.md +0 -12
  68. data/lib/amp-html/configuration/docs/README.md +0 -0
  69. data/lib/amp-html/configuration/help.rb +0 -11
  70. data/lib/amp-html/helpers/docs/README.md +0 -98
  71. data/lib/amp-html/helpers/docs/amp.md +0 -0
  72. data/lib/amp-html/helpers/docs/amp_ad.md +0 -86
  73. data/lib/amp-html/helpers/docs/amp_analytics.md +0 -76
  74. data/lib/amp-html/helpers/docs/amp_anim.md +0 -68
  75. data/lib/amp-html/helpers/docs/amp_audio.md +0 -54
  76. data/lib/amp-html/helpers/docs/amp_auto_ads.md +0 -43
  77. data/lib/amp-html/helpers/docs/amp_close_user_notification_button.md +0 -0
  78. data/lib/amp-html/helpers/docs/amp_css.md +0 -37
  79. data/lib/amp-html/helpers/docs/amp_css_link.md +0 -0
  80. data/lib/amp-html/helpers/docs/amp_custom_ad.md +0 -0
  81. data/lib/amp-html/helpers/docs/amp_document_link.md +0 -0
  82. data/lib/amp-html/helpers/docs/amp_embed.md +0 -86
  83. data/lib/amp-html/helpers/docs/amp_facebook.md +0 -70
  84. data/lib/amp-html/helpers/docs/amp_fallback.md +0 -47
  85. data/lib/amp-html/helpers/docs/amp_font.md +0 -0
  86. data/lib/amp-html/helpers/docs/amp_font_link.md +0 -0
  87. data/lib/amp-html/helpers/docs/amp_form.md +0 -0
  88. data/lib/amp-html/helpers/docs/amp_form_response.md +0 -0
  89. data/lib/amp-html/helpers/docs/amp_gfycat.md +0 -0
  90. data/lib/amp-html/helpers/docs/amp_global_css.md +0 -0
  91. data/lib/amp-html/helpers/docs/amp_google_analytics.md +0 -0
  92. data/lib/amp-html/helpers/docs/amp_google_font.md +0 -0
  93. data/lib/amp-html/helpers/docs/amp_head.md +0 -0
  94. data/lib/amp-html/helpers/docs/amp_html_doctype.md +0 -0
  95. data/lib/amp-html/helpers/docs/amp_iframe.md +0 -0
  96. data/lib/amp-html/helpers/docs/amp_image.md +0 -0
  97. data/lib/amp-html/helpers/docs/amp_input.md +0 -0
  98. data/lib/amp-html/helpers/docs/amp_instagram.md +0 -0
  99. data/lib/amp-html/helpers/docs/amp_js.md +0 -0
  100. data/lib/amp-html/helpers/docs/amp_link.md +0 -0
  101. data/lib/amp-html/helpers/docs/amp_list.md +0 -0
  102. data/lib/amp-html/helpers/docs/amp_live_list.md +0 -0
  103. data/lib/amp-html/helpers/docs/amp_live_list_items.md +0 -0
  104. data/lib/amp-html/helpers/docs/amp_live_list_pagination.md +0 -0
  105. data/lib/amp-html/helpers/docs/amp_live_list_update.md +0 -0
  106. data/lib/amp-html/helpers/docs/amp_mustache.md +0 -0
  107. data/lib/amp-html/helpers/docs/amp_pin_it.md +0 -0
  108. data/lib/amp-html/helpers/docs/amp_pin_widget.md +0 -0
  109. data/lib/amp-html/helpers/docs/amp_pinterest_follow.md +0 -0
  110. data/lib/amp-html/helpers/docs/amp_pixel.md +0 -0
  111. data/lib/amp-html/helpers/docs/amp_placeholder.md +0 -0
  112. data/lib/amp-html/helpers/docs/amp_reddit.md +0 -0
  113. data/lib/amp-html/helpers/docs/amp_resources.md +0 -0
  114. data/lib/amp-html/helpers/docs/amp_selector.md +0 -0
  115. data/lib/amp-html/helpers/docs/amp_serviceworker.md +0 -0
  116. data/lib/amp-html/helpers/docs/amp_social_share.md +0 -0
  117. data/lib/amp-html/helpers/docs/amp_soundcloud.md +0 -0
  118. data/lib/amp-html/helpers/docs/amp_twitter.md +0 -0
  119. data/lib/amp-html/helpers/docs/amp_user_notification.md +0 -0
  120. data/lib/amp-html/helpers/docs/amp_video.md +0 -0
  121. data/lib/amp-html/helpers/docs/amp_video_ad.md +0 -0
  122. data/lib/amp-html/helpers/docs/amp_vine.md +0 -0
  123. data/lib/amp-html/helpers/docs/amp_youtube.md +0 -0
  124. data/lib/amp-html/helpers/docs/audio_tag.md +0 -0
  125. data/lib/amp-html/helpers/docs/canonical_document_link.md +0 -0
  126. data/lib/amp-html/helpers/docs/form_tag.md +0 -0
  127. data/lib/amp-html/helpers/docs/image_tag.md +0 -0
  128. data/lib/amp-html/helpers/docs/input_tag.md +0 -0
  129. data/lib/amp-html/helpers/docs/javascript_include_tag.md +0 -0
  130. data/lib/amp-html/helpers/docs/noscript_tag.md +0 -0
  131. data/lib/amp-html/helpers/docs/schema_tag.md +0 -0
  132. data/lib/amp-html/helpers/docs/stylesheet_link_tag.md +0 -0
  133. data/lib/amp-html/helpers/docs/video_tag.md +0 -0
  134. data/lib/amp-html/helpers/help.rb +0 -23
  135. data/lib/amp-html/root.rb +0 -7
  136. data/lib/amp-html/test.rb +0 -169
  137. data/lib/amp-html/test/help.rb +0 -11
  138. data/lib/amp-html/test/templates/README.md +0 -43
  139. data/lib/amp-html/test/templates/css/!important.md +0 -1
  140. data/lib/amp-html/test/templates/css/-amp-.md +0 -1
  141. data/lib/amp-html/test/templates/css/-moz-binding.md +0 -1
  142. data/lib/amp-html/test/templates/css/@import.md +0 -1
  143. data/lib/amp-html/test/templates/css/behavior.md +0 -1
  144. data/lib/amp-html/test/templates/css/filter.md +0 -1
  145. data/lib/amp-html/test/templates/css/i-amp-.md +0 -1
  146. data/lib/amp-html/test/templates/css/overflow.md +0 -1
  147. data/lib/amp-html/test/templates/html/applet.md +0 -1
  148. data/lib/amp-html/test/templates/html/audio.md +0 -1
  149. data/lib/amp-html/test/templates/html/base.md +0 -1
  150. data/lib/amp-html/test/templates/html/embed.md +0 -1
  151. data/lib/amp-html/test/templates/html/frame.md +0 -1
  152. data/lib/amp-html/test/templates/html/frameset.md +0 -1
  153. data/lib/amp-html/test/templates/html/http-equiv.md +0 -1
  154. data/lib/amp-html/test/templates/html/iframe.md +0 -1
  155. data/lib/amp-html/test/templates/html/img.md +0 -1
  156. data/lib/amp-html/test/templates/html/javascript_include_tag.md +0 -1
  157. data/lib/amp-html/test/templates/html/object.md +0 -1
  158. data/lib/amp-html/test/templates/html/onclick.md +0 -1
  159. data/lib/amp-html/test/templates/html/onmousehover.md +0 -1
  160. data/lib/amp-html/test/templates/html/param.md +0 -1
  161. data/lib/amp-html/test/templates/html/stylesheet_link_tag.md +0 -1
  162. data/lib/amp-html/test/templates/html/video.md +0 -1
  163. data/lib/amp-html/test/templates/markup/!doctype.md +0 -1
  164. data/lib/amp-html/test/templates/markup/amp_document_link.md +0 -1
  165. data/lib/amp-html/test/templates/markup/amp_head.md +0 -1
  166. data/lib/amp-html/test/templates/markup/amp_html_doctype.md +0 -1
  167. data/lib/amp-html/test/templates/markup/canonical_document_link.md +0 -1
  168. data/lib/amp-html/test/templates/markup/head_body.md +0 -1
  169. data/lib/amp-html/test/templates/markup/html.md +0 -1
  170. data/lib/amp-html/test/templates/markup/meta_viewport.md +0 -1
  171. data/lib/amp-html/validate.rb +0 -46
  172. data/lib/amp-html/validate/help.rb +0 -11
  173. data/lib/amp-html/validate/templates/README.md +0 -32
  174. data/lib/generators/amp_html/assets_generator.rb +0 -31
  175. data/lib/generators/amp_html/bundle_generator.rb +0 -50
  176. data/lib/generators/amp_html/components_generator.rb +0 -84
  177. data/lib/generators/amp_html/helpers_generator.rb +0 -32
  178. data/lib/generators/amp_html/install_generator.rb +0 -53
  179. data/lib/generators/amp_html/views_generator.rb +0 -62
  180. data/lib/generators/templates/assets/README.md +0 -0
  181. data/lib/generators/templates/components/README.md +0 -0
  182. data/lib/generators/templates/components/views/_components.html.erb +0 -141
  183. data/lib/generators/templates/components/views/_google_analytics.html.erb +0 -23
  184. data/lib/generators/templates/helpers/README.md +0 -0
  185. data/lib/generators/templates/helpers/amp/fallback_tag_helper.rb +0 -16
  186. data/lib/generators/templates/helpers/amp/font_tag_helper.rb +0 -37
  187. data/lib/generators/templates/helpers/amp/link_tag_helper.rb +0 -11
  188. data/lib/generators/templates/helpers/amp/mustache_tag_helper.rb +0 -13
  189. data/lib/generators/templates/helpers/amp/noscript_tag_helper.rb +0 -13
  190. data/lib/generators/templates/helpers/amp/placeholder_tag_helper.rb +0 -16
  191. data/lib/generators/templates/helpers/amp/schema_tag_helper.rb +0 -16
  192. data/lib/generators/templates/helpers/amp/stylesheets_tag_helper.rb +0 -21
  193. data/lib/generators/templates/helpers/amp_tag_helper.rb.erb +0 -65
  194. data/lib/generators/templates/helpers/asset_tag_helper.rb.erb +0 -119
  195. data/lib/generators/templates/helpers/form_tag_helper.rb.erb +0 -79
  196. data/lib/generators/templates/install/README.md +0 -0
  197. data/lib/generators/templates/install/amp-html.rb.erb +0 -19
  198. data/lib/generators/templates/install/amp-html.yml.erb +0 -189
  199. data/lib/generators/templates/views/README.md +0 -0
  200. data/lib/generators/templates/views/application.html.erb +0 -71
  201. data/lib/generators/templates/views/application/_head.html.erb +0 -47
  202. data/lib/generators/templates/views/application/_resources.html.erb +0 -16
  203. data/lib/generators/templates/views/application/_schema.html.erb +0 -6
  204. data/lib/generators/templates/views/config/mime_types.rb +0 -8
@@ -0,0 +1,11 @@
1
+ module AmpHtml
2
+ module AssetHelper
3
+
4
+ def amp_css &block
5
+ if block_given?
6
+ append :css, capture(&block)
7
+ end
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ module AmpHtml
2
+ module BaseHelper
3
+
4
+ def amp?
5
+ if AmpHtml.configuration.split_view
6
+ return params[:amp] if params.has_key?(:amp)
7
+ AmpHtml.configuration.split_view_default == 'amp'
8
+ else
9
+ true
10
+ end
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module AmpHtml
2
+ module DynamicContentHelper
3
+
4
+ def form_tag url_for_options = {}, options = {}, &block
5
+ if amp?
6
+ options[:action] = url_for_options
7
+ component 'amp/form', options
8
+ else
9
+ super
10
+ end
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ module AmpHtml
2
+ module LayoutsHelper
3
+
4
+ def amp_mozaic &block
5
+ mozaic ( amp? ? :amp : :mozaic ) do
6
+ capture(&block)
7
+ end
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module AmpHtml
2
+ module MediaHelper
3
+
4
+ def image_tag source, options = {}
5
+ amp? ? component('amp/img', options.merge(src: source)) : super
6
+ end
7
+ def video_tag *sources
8
+ amp? ? component('amp/video', options.merge(sources: sources)) : super
9
+ end
10
+ def audio_tag *sources
11
+ amp? ? component('amp/audio', options.merge(sources: sources)) : super
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ <%= tag 'link', options %>
@@ -0,0 +1,11 @@
1
+ <% sources = options.delete(:sources) %>
2
+ <% fallback = options.delete(:fallback) %>
3
+
4
+ <%= content_tag 'amp-audio', options do %>
5
+ <% if sources %>
6
+ <% sources.each do |source| %>
7
+ <source src="<%= source[:src] %>" type="<%= source[:type] %>" />
8
+ <% end %>
9
+ <% end %>
10
+ <% if fallback %><div fallback><p><%= fallback %></p></div><% end %>
11
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= tag 'link', options %>
@@ -0,0 +1,6 @@
1
+ <% if options[:components]&.include? :form %><script async custom-element="amp-form" src="https://cdn.ampproject.org/v0/amp-form-0.1.js"></script>
2
+ <% elsif options[:components]&.include? :mustache %><script async custom-template="amp-mustache" src="https://cdn.ampproject.org/v0/amp-mustache-0.1.js"></script>
3
+ <% elsif options[:components]&.include? :selector %><script async custom-element="amp-selector" src="https://cdn.ampproject.org/v0/amp-selector-0.1.js"></script>
4
+ <% elsif options[:components]&.include? :audio %><script async custom-element="amp-audio" src="https://cdn.ampproject.org/v0/amp-audio-0.1.js"></script>
5
+ <% elsif options[:components]&.include? :video %><script async custom-element="amp-video" src="https://cdn.ampproject.org/v0/amp-video-0.1.js"></script>
6
+ <% elsif options[:components]&.include? :font %><script async custom-element="amp-font" src="https://cdn.ampproject.org/v0/amp-font-0.1.js"></script><% end %>
@@ -0,0 +1,4 @@
1
+ <!doctype html>
2
+ <html ⚡>
3
+ <%= block %>
4
+ </html>
@@ -0,0 +1,2 @@
1
+ <%= content_tag 'amp-font', options do %>
2
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <%= content_tag 'div', options do %>
2
+ <%= component 'amp/mustache' do %>
3
+ <%= block %>
4
+ <% end %>
5
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <%= form_tag options do %>
2
+ <%= block %>
3
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <meta charset="utf-8">
2
+ <script async src="https://cdn.ampproject.org/v0.js"></script>
3
+
4
+ <%= area :components do %>
5
+ <%= component 'amp/components', components: options[:components] %>
6
+ <% end %>
7
+
8
+ <style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
9
+ <style amp-custom>
10
+ <%= Rails.application.assets['application.css'] if AmpHtml.configuration.inherit_stylesheets %>
11
+ <%= Rails.application.assets['amp/application.css'] %>
12
+ <%= area :css %>
13
+ </style>
@@ -0,0 +1 @@
1
+ <%= tag 'amp-img', options %>
@@ -0,0 +1 @@
1
+ <%= tag 'input', options %>
@@ -0,0 +1,3 @@
1
+ <%= content_tag 'template', options do %>
2
+ <%= block %>
3
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <%= content_tag 'amp-selector', options do %>
2
+ <%= block %>
3
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <% sources = options.delete(:sources) %>
2
+ <% fallback = options.delete(:fallback) %>
3
+
4
+ <%= content_tag 'amp-video', options do %>
5
+ <% if sources %>
6
+ <% sources.each do |source| %>
7
+ <source src="<%= source[:src] %>" type="<%= source[:type] %>" />
8
+ <% end %>
9
+ <% end %>
10
+ <% if fallback %><div fallback><p><%= fallback %></p></div><% end %>
11
+ <% end %>
@@ -1,27 +1,11 @@
1
- begin
2
- require 'rails'
3
- rescue Exception => e
4
- warn 'Ensure you are in a Ruby on Rails environment'
5
- end
1
+ require 'mozaic'
2
+ require 'amp-html/version'
6
3
 
7
4
  module AmpHtml
8
5
 
9
- require 'amp-html/root'
10
- require 'amp-html/version'
11
-
12
- require 'amp-html/cli'
13
-
14
6
  require 'amp-html/configuration'
15
- require 'amp-html/configuration/help'
16
-
17
- require 'amp-html/test'
18
- require 'amp-html/validate'
19
-
20
- require 'amp-html/components/install'
21
7
 
22
- require 'amp-html/helpers/help'
23
- require 'amp-html/components/help'
24
- require 'amp-html/test/help'
25
- require 'amp-html/validate/help'
8
+ require 'amp-html/railtie'
9
+ require 'amp-html/engine'
26
10
 
27
11
  end
@@ -1,170 +1,25 @@
1
1
  module AmpHtml
2
2
 
3
- def self.default_format
4
- config = get_config
5
- if config.key(:default_format)
6
- config[:default_format]
7
- else
8
- 'amp'
9
- end
10
- end
11
- def self.raw_format
12
- config = get_config
13
- config[:default_format]
14
- end
15
-
16
- def self.fallback_format
17
- config = get_config
18
- config[:fallback_format]
19
- end
20
-
21
-
22
- def self.components
23
- config = get_config
24
- if config.key(:components)
25
- config[:components]
26
- else
27
- nil
28
- end
29
- end
30
-
31
-
32
- def self.split_view
33
- config = get_config
34
- if config.key(:split_view)
35
- config[:split_view]
36
- else
37
- false
38
- end
39
- end
40
-
41
-
42
- def self.assets_only_amp
43
- config = get_config
44
- if config.key(:assets) && config[:assets].key(:only_amp)
45
- config[:assets][:only_amp]
46
- else
47
- if AmpHtml.split_view
48
- false
49
- else
50
- true
51
- end
52
- end
53
- end
54
-
55
-
56
- def self.application_name
57
- config = get_config
58
- if config.key(:application) && config[:application].key(:name)
59
- config[:application][:name]
60
- else
61
- Rails.application.class.parent
62
- end
63
- end
64
- def self.application_type
65
- config = get_config
66
- if config.key(:application) && config[:application].key(:type)
67
- config[:application][:type]
68
- else
69
- nil
70
- end
71
- end
72
- def self.application_date_published
73
- config = get_config
74
- if config.key(:application) && config[:application].key(:date_published)
75
- config[:application][:date_published]
76
- else
77
- DateTime.now
78
- end
79
- end
80
- def self.application_image
81
- config = get_config
82
- if config.key(:application) && config[:application].key(:image)
83
- config[:application][:image]
84
- else
85
- nil
86
- end
3
+ class << self
4
+ attr_accessor :configuration
87
5
  end
88
6
 
89
-
90
- def self.forms_selector
91
- config = get_config
92
- if config.key(:forms) && config[:forms].key(:amp_selector)
93
- config[:forms][:amp_selector]
94
- else
95
- false
96
- end
7
+ def self.configure
8
+ self.configuration ||= Configuration.new
9
+ yield configuration
97
10
  end
98
11
 
12
+ class Configuration
99
13
 
100
- def self.analytics_default_vendor
101
- config = get_config
102
- if config.key(:analytics) && config[:analytics].key(:default_vendor)
103
- config[:analytics][:default_vendor]
104
- else
105
- nil
106
- end
107
- end
14
+ attr_accessor :inherit_stylesheets
15
+ attr_accessor :split_view
16
+ attr_accessor :split_view_default
108
17
 
109
- def self.google_analytics_account
110
- config = get_config
111
- if config.key(:analytics) && config[:analytics].key(:google_analytics) && config[:analytics][:google_analytics].key(:account)
112
- config[:analytics][:google_analytics][:account]
113
- else
114
- nil
18
+ def initialize
19
+ @inherit_stylesheets = false
20
+ @split_view = false
21
+ @split_view_default = 'amp'
115
22
  end
116
- end
117
-
118
23
 
119
- def self.ad_default_network
120
- config = get_config
121
- if config.key(:ad) && config[:ad].key(:default_network)
122
- config[:ad][:default_network]
123
- else
124
- nil
125
- end
126
- end
127
-
128
- def self.auto_ads_default_network
129
- config = get_config
130
- if config.key(:ad) && config[:ad].key(:auto_ads) && config[:ad][:auto_ads].key(:default_network)
131
- config[:ad][:auto_ads][:default_network]
132
- else
133
- nil
134
- end
135
24
  end
136
-
137
-
138
- def self.social_share_default_provider
139
- config = get_config
140
- if config.key(:social) && config[:social].key(:share) && config[:social][:share].key(:default_provider)
141
- config[:social][:share][:default_provider]
142
- else
143
- nil
144
- end
145
- end
146
- def self.social_share_default_data_share_endpoint
147
- config = get_config
148
- if config.key(:social) && config[:social].key(:share) && config[:social][:share].key(:default_data_share_endpoint)
149
- config[:social][:share][:default_data_share_endpoint]
150
- else
151
- nil
152
- end
153
- end
154
-
155
-
156
- private
157
-
158
-
159
- def self.get_config
160
- require 'yaml'
161
-
162
- begin
163
- YAML.load_file 'config/amp-html.yml'
164
- rescue Exception => e
165
- warn 'WARNING (AMP): You need to run `rails g amp_html:bundle` first.'
166
- exit
167
- end
168
- end
169
-
170
25
  end
@@ -0,0 +1,6 @@
1
+ require 'rails/railtie'
2
+
3
+ module AmpHtml
4
+ class Engine < ::Rails::Engine
5
+ end
6
+ end
@@ -0,0 +1,109 @@
1
+ require 'rails/railtie'
2
+
3
+ module AmpHtml
4
+ class Railtie < ::Rails::Railtie
5
+
6
+ initializer 'amp-html.mozaic' do
7
+ Mozaic.configure do |config|
8
+
9
+
10
+ ### Base
11
+
12
+ config.define_component 'amp/doctype'
13
+ config.define_component 'amp/amp-link', rel: 'amphtml' do |options|
14
+ return false unless AmpHtml.configuration.split_view
15
+ options[:href] = options[:href].split('?').first
16
+ unless AmpHtml.configuration.split_view_default == 'amp'
17
+ options[:href] = "#{options[:href]}?#{{ amp: true }.to_query}"
18
+ end
19
+ end
20
+ config.define_component 'amp/canonical-link', rel: 'canonical' do |options|
21
+ return false unless AmpHtml.configuration.split_view
22
+ options[:href] = options[:href].split('?').first
23
+ if AmpHtml.configuration.split_view_default == 'amp'
24
+ options[:href] = "#{options[:href]}?#{{ amp: false }.to_query}"
25
+ end
26
+ end
27
+ config.define_component 'amp/head'
28
+ config.define_component 'amp/components'
29
+
30
+
31
+
32
+ ### Media
33
+
34
+ config.define_component 'amp/img', layout: 'responsive' do |options|
35
+ options[:src] = image_url options[:src]
36
+ end
37
+ config.define_component 'amp/video', layout: 'responsive' do |options|
38
+ options[:poster] = image_url(options[:poster]) if options.has_key?(:poster)
39
+ options[:src] = asset_url(options[:src]) if options.has_key?(:src)
40
+ if options.has_key?(:sources)
41
+ options[:sources].each do |source|
42
+ source[:src] = asset_url options[:src]
43
+ end
44
+ end
45
+ end
46
+ config.define_component 'amp/audio' do |options|
47
+ options[:src] = asset_url(options[:src]) if options.has_key?(:src)
48
+ if options.has_key?(:sources)
49
+ options[:sources].each do |source|
50
+ source[:src] = asset_url options[:src]
51
+ end
52
+ end
53
+ end
54
+
55
+
56
+
57
+ ### Presentation
58
+
59
+ config.define_component 'amp/font', layout: 'nodisplay'
60
+
61
+
62
+
63
+ ### Dynamic content
64
+
65
+ config.define_component 'amp/form', method: :post, target: '_top' do |options|
66
+ unless options[:method].to_sym == :get
67
+ options[:"action-xhr"] = options[:action]
68
+ end
69
+ options[:on] = "#{options[:on] + ';' if options[:on]}
70
+ #{'submit:' + options[:submit] + ';' if options[:submit]}
71
+ #{'submit-success:' + options[:success] + ';' if options[:success]}
72
+ #{'submit-error:' + options[:error] + ';' if options[:error]}
73
+ #{'valid:' + options[:valid] + ';' if options[:valid]}
74
+ #{'invalid:' + options[:invalid] + ';' if options[:invalid]}"
75
+ options = options.except(:submit, :success, :error, :valid, :invalid)
76
+ end
77
+ config.define_component 'amp/form-response', type: :success do |options|
78
+ options[:"submit-#{options.delete(:type)}"] = true
79
+ end
80
+ config.define_component 'amp/input' do |options|
81
+ options[:on] = "#{options[:on] + ';' if options[:on]}
82
+ #{'onchange:' + options[:onchange] + ';' if options[:onchange]}"
83
+ options = options.except(:onchange)
84
+ end
85
+ config.define_component 'amp/selector', layout: 'container' do |options|
86
+ options[:on] = "#{options[:on] + ';' if options[:on]}
87
+ #{'onchange:' + options[:onchange] + ';' if options[:onchange]}"
88
+ options = options.except(:onchange)
89
+ end
90
+ config.define_component 'amp/mustache' do |options|
91
+ options[:type] = 'amp-mustache'
92
+ end
93
+
94
+
95
+ end
96
+ end
97
+
98
+ initializer 'amp-html.assets' do
99
+ Rails.application.config.assets.precompile += ['amp/application.css']
100
+ end
101
+
102
+ initializer 'amp-html.action_controller' do
103
+ ActiveSupport.on_load :action_controller do
104
+ include AmpHtml::BaseHelper
105
+ end
106
+ end
107
+
108
+ end
109
+ end