amp-html 0.7.18 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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