duodealer_app 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 (212) hide show
  1. checksums.yaml +7 -0
  2. data/.!66854!duodealer_app.gemspec +0 -0
  3. data/.babelrc +5 -0
  4. data/.gitignore +16 -0
  5. data/.nvmrc +1 -0
  6. data/.rubocop.yml +263 -0
  7. data/.ruby-version +1 -0
  8. data/.travis.yml +27 -0
  9. data/Gemfile +8 -0
  10. data/LICENSE +19 -0
  11. data/README.md +553 -0
  12. data/Rakefile +6 -0
  13. data/app/assets/images/storage_access.svg +2 -0
  14. data/app/assets/javascripts/duodealer_app/enable_cookies.js +3 -0
  15. data/app/assets/javascripts/duodealer_app/itp_helper.js +40 -0
  16. data/app/assets/javascripts/duodealer_app/partition_cookies.js +8 -0
  17. data/app/assets/javascripts/duodealer_app/redirect.js +33 -0
  18. data/app/assets/javascripts/duodealer_app/request_storage_access.js +3 -0
  19. data/app/assets/javascripts/duodealer_app/storage_access.js +153 -0
  20. data/app/assets/javascripts/duodealer_app/storage_access_redirect.js +17 -0
  21. data/app/assets/javascripts/duodealer_app/top_level.js +2 -0
  22. data/app/assets/javascripts/duodealer_app/top_level_interaction.js +11 -0
  23. data/app/controllers/concerns/duodealer_app/authenticated.rb +15 -0
  24. data/app/controllers/concerns/duodealer_app/authenticated.rb-e +15 -0
  25. data/app/controllers/duodealer_app/authenticated_controller.rb +9 -0
  26. data/app/controllers/duodealer_app/authenticated_controller.rb-e +9 -0
  27. data/app/controllers/duodealer_app/callback_controller.rb +104 -0
  28. data/app/controllers/duodealer_app/callback_controller.rb-e +104 -0
  29. data/app/controllers/duodealer_app/extension_verification_controller.rb +19 -0
  30. data/app/controllers/duodealer_app/extension_verification_controller.rb-e +19 -0
  31. data/app/controllers/duodealer_app/sessions_controller.rb +159 -0
  32. data/app/controllers/duodealer_app/sessions_controller.rb-e +159 -0
  33. data/app/controllers/duodealer_app/webhooks_controller.rb +37 -0
  34. data/app/controllers/duodealer_app/webhooks_controller.rb-e +37 -0
  35. data/app/views/duodealer_app/partials/_button_styles.html.erb +104 -0
  36. data/app/views/duodealer_app/partials/_button_styles.html.erb-e +104 -0
  37. data/app/views/duodealer_app/partials/_card_styles.html.erb +33 -0
  38. data/app/views/duodealer_app/partials/_card_styles.html.erb-e +33 -0
  39. data/app/views/duodealer_app/partials/_empty_state_styles.html.erb +129 -0
  40. data/app/views/duodealer_app/partials/_empty_state_styles.html.erb-e +129 -0
  41. data/app/views/duodealer_app/partials/_layout_styles.html.erb +167 -0
  42. data/app/views/duodealer_app/partials/_layout_styles.html.erb-e +167 -0
  43. data/app/views/duodealer_app/partials/_typography_styles.html.erb +35 -0
  44. data/app/views/duodealer_app/partials/_typography_styles.html.erb-e +35 -0
  45. data/app/views/duodealer_app/sessions/enable_cookies.html.erb +75 -0
  46. data/app/views/duodealer_app/sessions/enable_cookies.html.erb-e +75 -0
  47. data/app/views/duodealer_app/sessions/new.html.erb +123 -0
  48. data/app/views/duodealer_app/sessions/new.html.erb-e +123 -0
  49. data/app/views/duodealer_app/sessions/request_storage_access.html.erb +68 -0
  50. data/app/views/duodealer_app/sessions/request_storage_access.html.erb-e +68 -0
  51. data/app/views/duodealer_app/sessions/top_level_interaction.html.erb +64 -0
  52. data/app/views/duodealer_app/sessions/top_level_interaction.html.erb-e +64 -0
  53. data/app/views/duodealer_app/shared/redirect.html.erb +23 -0
  54. data/app/views/duodealer_app/shared/redirect.html.erb-e +23 -0
  55. data/config/locales/cs.yml +23 -0
  56. data/config/locales/da.yml +20 -0
  57. data/config/locales/de.yml +22 -0
  58. data/config/locales/en.yml +15 -0
  59. data/config/locales/es.yml +22 -0
  60. data/config/locales/fi.yml +20 -0
  61. data/config/locales/fr.yml +23 -0
  62. data/config/locales/hi.yml +23 -0
  63. data/config/locales/it.yml +21 -0
  64. data/config/locales/ja.yml +17 -0
  65. data/config/locales/ko.yml +19 -0
  66. data/config/locales/ms.yml +22 -0
  67. data/config/locales/nb.yml +21 -0
  68. data/config/locales/nl.yml +21 -0
  69. data/config/locales/pl.yml +21 -0
  70. data/config/locales/pt-BR.yml +21 -0
  71. data/config/locales/pt-PT.yml +22 -0
  72. data/config/locales/sv.yml +21 -0
  73. data/config/locales/th.yml +20 -0
  74. data/config/locales/tr.yml +22 -0
  75. data/config/locales/zh-CN.yml +16 -0
  76. data/config/locales/zh-TW.yml +16 -0
  77. data/config/routes.rb +22 -0
  78. data/docs/.!20385!test-your-app.png +0 -0
  79. data/docs/.!20388!install-on-dev-shop.png +0 -0
  80. data/docs/.!62511!test-your-app.png +0 -0
  81. data/docs/.!62512!install-on-dev-shop.png +0 -0
  82. data/docs/.!62763!test-your-app.png +0 -0
  83. data/docs/.!62765!install-on-dev-shop.png +0 -0
  84. data/docs/.!63018!test-your-app.png +0 -0
  85. data/docs/.!63020!install-on-dev-shop.png +0 -0
  86. data/docs/.!63289!test-your-app.png +0 -0
  87. data/docs/.!63291!install-on-dev-shop.png +0 -0
  88. data/docs/.!63562!test-your-app.png +0 -0
  89. data/docs/.!63564!install-on-dev-shop.png +0 -0
  90. data/docs/.!63872!test-your-app.png +0 -0
  91. data/docs/.!63874!install-on-dev-shop.png +0 -0
  92. data/docs/.!64151!test-your-app.png +0 -0
  93. data/docs/.!64153!install-on-dev-shop.png +0 -0
  94. data/docs/.!64428!test-your-app.png +0 -0
  95. data/docs/.!64431!install-on-dev-shop.png +0 -0
  96. data/docs/.!64737!test-your-app.png +0 -0
  97. data/docs/.!64740!install-on-dev-shop.png +0 -0
  98. data/docs/.!65025!test-your-app.png +0 -0
  99. data/docs/.!65028!install-on-dev-shop.png +0 -0
  100. data/docs/.!65324!test-your-app.png +0 -0
  101. data/docs/.!65327!install-on-dev-shop.png +0 -0
  102. data/docs/.!65626!test-your-app.png +0 -0
  103. data/docs/.!65629!install-on-dev-shop.png +0 -0
  104. data/docs/.!65942!test-your-app.png +0 -0
  105. data/docs/.!65945!install-on-dev-shop.png +0 -0
  106. data/docs/.!66760!test-your-app.png +0 -0
  107. data/docs/.!66763!install-on-dev-shop.png +0 -0
  108. data/docs/.!67028!test-your-app.png +0 -0
  109. data/docs/.!67031!install-on-dev-shop.png +0 -0
  110. data/docs/.!67657!test-your-app.png +0 -0
  111. data/docs/.!67660!install-on-dev-shop.png +0 -0
  112. data/docs/.!68031!test-your-app.png +0 -0
  113. data/docs/.!68034!install-on-dev-shop.png +0 -0
  114. data/docs/.!68363!test-your-app.png +0 -0
  115. data/docs/.!68366!install-on-dev-shop.png +0 -0
  116. data/docs/Quickstart.md +103 -0
  117. data/docs/Releasing.md +17 -0
  118. data/docs/Troubleshooting.md +16 -0
  119. data/docs/install-on-dev-shop.png +0 -0
  120. data/docs/test-your-app.png +0 -0
  121. data/duodealer_app.gemspec +34 -0
  122. data/images/.!20334!app-proxy-screenshot.png +0 -0
  123. data/images/.!62504!app-proxy-screenshot.png +0 -0
  124. data/images/.!62754!app-proxy-screenshot.png +0 -0
  125. data/images/.!63008!app-proxy-screenshot.png +0 -0
  126. data/images/.!63277!app-proxy-screenshot.png +0 -0
  127. data/images/.!63548!app-proxy-screenshot.png +0 -0
  128. data/images/.!63855!app-proxy-screenshot.png +0 -0
  129. data/images/.!64132!app-proxy-screenshot.png +0 -0
  130. data/images/.!64407!app-proxy-screenshot.png +0 -0
  131. data/images/.!64714!app-proxy-screenshot.png +0 -0
  132. data/images/.!65000!app-proxy-screenshot.png +0 -0
  133. data/images/.!65296!app-proxy-screenshot.png +0 -0
  134. data/images/.!65594!app-proxy-screenshot.png +0 -0
  135. data/images/.!65908!app-proxy-screenshot.png +0 -0
  136. data/images/.!66724!app-proxy-screenshot.png +0 -0
  137. data/images/.!66989!app-proxy-screenshot.png +0 -0
  138. data/images/.!67614!app-proxy-screenshot.png +0 -0
  139. data/images/.!67986!app-proxy-screenshot.png +0 -0
  140. data/images/.!68314!app-proxy-screenshot.png +0 -0
  141. data/images/app-proxy-screenshot.png +0 -0
  142. data/karma.conf.js +44 -0
  143. data/lib/duodealer_app.rb +54 -0
  144. data/lib/duodealer_app/configuration.rb +85 -0
  145. data/lib/duodealer_app/controller_concerns/app_proxy_verification.rb +39 -0
  146. data/lib/duodealer_app/controller_concerns/embedded_app.rb +20 -0
  147. data/lib/duodealer_app/controller_concerns/itp.rb +44 -0
  148. data/lib/duodealer_app/controller_concerns/localization.rb +23 -0
  149. data/lib/duodealer_app/controller_concerns/login_protection.rb +180 -0
  150. data/lib/duodealer_app/controller_concerns/webhook_verification.rb +39 -0
  151. data/lib/duodealer_app/engine.rb +22 -0
  152. data/lib/duodealer_app/jobs/scripttags_manager_job.rb +17 -0
  153. data/lib/duodealer_app/jobs/webhooks_manager_job.rb +17 -0
  154. data/lib/duodealer_app/managers/scripttags_manager.rb +78 -0
  155. data/lib/duodealer_app/managers/webhooks_manager.rb +62 -0
  156. data/lib/duodealer_app/middleware/same_site_cookie_middleware.rb +69 -0
  157. data/lib/duodealer_app/session/in_memory_session_store.rb +29 -0
  158. data/lib/duodealer_app/session/session_repository.rb +33 -0
  159. data/lib/duodealer_app/session/session_storage.rb +31 -0
  160. data/lib/duodealer_app/session/storage_strategies/shop_storage_strategy.rb +25 -0
  161. data/lib/duodealer_app/session/storage_strategies/user_storage_strategy.rb +26 -0
  162. data/lib/duodealer_app/utils.rb +24 -0
  163. data/lib/duodealer_app/version.rb +5 -0
  164. data/lib/generators/duodealer_app/add_after_authenticate_job/add_after_authenticate_job_generator.rb +46 -0
  165. data/lib/generators/duodealer_app/add_after_authenticate_job/templates/after_authenticate_job.rb +10 -0
  166. data/lib/generators/duodealer_app/add_marketing_activity_extension/add_marketing_activity_extension_generator.rb +40 -0
  167. data/lib/generators/duodealer_app/add_marketing_activity_extension/templates/marketing_activities_controller.rb +62 -0
  168. data/lib/generators/duodealer_app/add_webhook/add_webhook_generator.rb +69 -0
  169. data/lib/generators/duodealer_app/add_webhook/templates/webhook_job.rb +8 -0
  170. data/lib/generators/duodealer_app/app_proxy_controller/app_proxy_controller_generator.rb +27 -0
  171. data/lib/generators/duodealer_app/app_proxy_controller/templates/app_proxy_controller.rb +9 -0
  172. data/lib/generators/duodealer_app/app_proxy_controller/templates/app_proxy_route.rb +10 -0
  173. data/lib/generators/duodealer_app/app_proxy_controller/templates/index.html.erb +19 -0
  174. data/lib/generators/duodealer_app/authenticated_controller/authenticated_controller_generator.rb +15 -0
  175. data/lib/generators/duodealer_app/authenticated_controller/templates/authenticated_controller.rb +5 -0
  176. data/lib/generators/duodealer_app/controllers/controllers_generator.rb +30 -0
  177. data/lib/generators/duodealer_app/duodealer_app_generator.rb +19 -0
  178. data/lib/generators/duodealer_app/home_controller/home_controller_generator.rb +27 -0
  179. data/lib/generators/duodealer_app/home_controller/templates/home_controller.rb +8 -0
  180. data/lib/generators/duodealer_app/home_controller/templates/index.html.erb +21 -0
  181. data/lib/generators/duodealer_app/install/install_generator.rb +83 -0
  182. data/lib/generators/duodealer_app/install/templates/_flash_messages.html.erb +3 -0
  183. data/lib/generators/duodealer_app/install/templates/duodealer_app.js +15 -0
  184. data/lib/generators/duodealer_app/install/templates/duodealer_app.rb +15 -0
  185. data/lib/generators/duodealer_app/install/templates/duodealer_app_index.js +2 -0
  186. data/lib/generators/duodealer_app/install/templates/duodealer_provider.rb +20 -0
  187. data/lib/generators/duodealer_app/install/templates/embedded_app.html.erb +41 -0
  188. data/lib/generators/duodealer_app/install/templates/flash_messages.js +26 -0
  189. data/lib/generators/duodealer_app/install/templates/omniauth.rb +2 -0
  190. data/lib/generators/duodealer_app/install/templates/session_store.rb +4 -0
  191. data/lib/generators/duodealer_app/install/templates/user_agent.rb +5 -0
  192. data/lib/generators/duodealer_app/rotate_duodealer_token_job/rotate_duodealer_token_job_generator.rb +16 -0
  193. data/lib/generators/duodealer_app/rotate_duodealer_token_job/templates/rotate_duodealer_token.rake +17 -0
  194. data/lib/generators/duodealer_app/rotate_duodealer_token_job/templates/rotate_duodealer_token_job.rb +42 -0
  195. data/lib/generators/duodealer_app/routes/routes_generator.rb +32 -0
  196. data/lib/generators/duodealer_app/routes/templates/routes.rb +11 -0
  197. data/lib/generators/duodealer_app/shop_model/shop_model_generator.rb +39 -0
  198. data/lib/generators/duodealer_app/shop_model/templates/db/migrate/create_shops.erb +15 -0
  199. data/lib/generators/duodealer_app/shop_model/templates/shop.rb +7 -0
  200. data/lib/generators/duodealer_app/shop_model/templates/shops.yml +3 -0
  201. data/lib/generators/duodealer_app/user_model/templates/db/migrate/create_users.erb +16 -0
  202. data/lib/generators/duodealer_app/user_model/templates/user.rb +7 -0
  203. data/lib/generators/duodealer_app/user_model/templates/users.yml +4 -0
  204. data/lib/generators/duodealer_app/user_model/user_model_generator.rb +39 -0
  205. data/lib/generators/duodealer_app/views/views_generator.rb +30 -0
  206. data/package-lock.json +7224 -0
  207. data/package.json +28 -0
  208. data/shipit.rubygems.yml +4 -0
  209. data/translation.yml +7 -0
  210. data/webpack.config.js +24 -0
  211. data/yarn.lock +5263 -0
  212. metadata +447 -0
@@ -0,0 +1,68 @@
1
+ <!DOCTYPE html>
2
+ <html lang="<%= I18n.locale %>">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <base target="_top">
7
+ <title>Redirecting…</title>
8
+ <%= render 'duodealer_app/partials/layout_styles' %>
9
+ <%= render 'duodealer_app/partials/typography_styles' %>
10
+ <%= render 'duodealer_app/partials/card_styles' %>
11
+ <%= render 'duodealer_app/partials/button_styles' %>
12
+ <style>
13
+ #RequestStorageAccess {
14
+ display: none;
15
+ }
16
+ </style>
17
+ </head>
18
+ <body>
19
+ <%=
20
+ content_tag(:div, nil,
21
+ id: 'redirection-target',
22
+ data: {
23
+ target: {
24
+ duodealerUrl: "https://#{current_duodealer_domain}",
25
+ hasStorageAccessUrl: "#{has_storage_access_url}",
26
+ doesNotHaveStorageAccessUrl: "#{does_not_have_storage_access_url}",
27
+ appTargetUrl: "#{app_target_url}"
28
+ },
29
+ },
30
+ )
31
+ %>
32
+ <main id="RequestStorageAccess">
33
+ <div class="Polaris-Page">
34
+ <div class="Polaris-Page__Content">
35
+ <div class="Polaris-Layout">
36
+ <div class="Polaris-Layout__Section">
37
+ <div class="Polaris-Stack Polaris-Stack--vertical">
38
+ <div class="Polaris-Stack__Item">
39
+ <div class="Polaris-Card">
40
+ <div class="Polaris-Card__Header">
41
+ <h1 class="Polaris-Heading"><%= I18n.t('request_storage_access_heading', app: DuodealerApp.configuration.application_name) %></h1>
42
+ </div>
43
+ <div class="Polaris-Card__Section">
44
+ <p><%= I18n.t('request_storage_access_body', app: DuodealerApp.configuration.application_name) %></p>
45
+ </div>
46
+ <div class="Polaris-Card__Section Polaris-Card__Section--subdued">
47
+ <p><%= I18n.t('request_storage_access_footer') %></p>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ <div class="Polaris-Stack__Item">
52
+ <div class="Polaris-Stack Polaris-Stack--distributionTrailing">
53
+ <div class="Polaris-Stack__Item">
54
+ <button type="button" class="Polaris-Button Polaris-Button--primary" id="TriggerAllowCookiesPrompt">
55
+ <span class="Polaris-Button__Content"><span><%= I18n.t('request_storage_access_action') %></span></span>
56
+ </button>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ </main>
66
+ <%= javascript_include_tag('duodealer_app/request_storage_access', crossorigin: 'anonymous', integrity: true) %>
67
+ </body>
68
+ </html>
@@ -0,0 +1,68 @@
1
+ <!DOCTYPE html>
2
+ <html lang="<%= I18n.locale %>">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <base target="_top">
7
+ <title>Redirecting…</title>
8
+ <%= render 'duodealer_app/partials/layout_styles' %>
9
+ <%= render 'duodealer_app/partials/typography_styles' %>
10
+ <%= render 'duodealer_app/partials/card_styles' %>
11
+ <%= render 'duodealer_app/partials/button_styles' %>
12
+ <style>
13
+ #RequestStorageAccess {
14
+ display: none;
15
+ }
16
+ </style>
17
+ </head>
18
+ <body>
19
+ <%=
20
+ content_tag(:div, nil,
21
+ id: 'redirection-target',
22
+ data: {
23
+ target: {
24
+ duodealerUrl: "https://#{current_duodealer_domain}",
25
+ hasStorageAccessUrl: "#{has_storage_access_url}",
26
+ doesNotHaveStorageAccessUrl: "#{does_not_have_storage_access_url}",
27
+ appTargetUrl: "#{app_target_url}"
28
+ },
29
+ },
30
+ )
31
+ %>
32
+ <main id="RequestStorageAccess">
33
+ <div class="Polaris-Page">
34
+ <div class="Polaris-Page__Content">
35
+ <div class="Polaris-Layout">
36
+ <div class="Polaris-Layout__Section">
37
+ <div class="Polaris-Stack Polaris-Stack--vertical">
38
+ <div class="Polaris-Stack__Item">
39
+ <div class="Polaris-Card">
40
+ <div class="Polaris-Card__Header">
41
+ <h1 class="Polaris-Heading"><%= I18n.t('request_storage_access_heading', app: DuodealerApp.configuration.application_name) %></h1>
42
+ </div>
43
+ <div class="Polaris-Card__Section">
44
+ <p><%= I18n.t('request_storage_access_body', app: DuodealerApp.configuration.application_name) %></p>
45
+ </div>
46
+ <div class="Polaris-Card__Section Polaris-Card__Section--subdued">
47
+ <p><%= I18n.t('request_storage_access_footer') %></p>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ <div class="Polaris-Stack__Item">
52
+ <div class="Polaris-Stack Polaris-Stack--distributionTrailing">
53
+ <div class="Polaris-Stack__Item">
54
+ <button type="button" class="Polaris-Button Polaris-Button--primary" id="TriggerAllowCookiesPrompt">
55
+ <span class="Polaris-Button__Content"><span><%= I18n.t('request_storage_access_action') %></span></span>
56
+ </button>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ </main>
66
+ <%= javascript_include_tag('duodealer_app/request_storage_access', crossorigin: 'anonymous', integrity: true) %>
67
+ </body>
68
+ </html>
@@ -0,0 +1,64 @@
1
+ <!DOCTYPE html>
2
+ <html lang="<%= I18n.locale %>">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <base target="_top">
7
+ <title>Redirecting…</title>
8
+ <%= render 'duodealer_app/partials/layout_styles' %>
9
+ <%= render 'duodealer_app/partials/typography_styles' %>
10
+ <%= render 'duodealer_app/partials/button_styles' %>
11
+ <%= render 'duodealer_app/partials/empty_state_styles' %>
12
+ <style>
13
+ #TopLevelInteractionContent {
14
+ display: none;
15
+ }
16
+ </style>
17
+
18
+ <script>
19
+ window.apiKey = "<%= DuodealerApp.configuration.api_key %>";
20
+ window.shopOrigin = "https://<%= @shop %>";
21
+ window.redirectUrl = "<%= @url %>";
22
+ </script>
23
+
24
+ <%= javascript_include_tag('duodealer_app/top_level', crossorigin: 'anonymous', integrity: true) %>
25
+ </head>
26
+ <body>
27
+ <main id="TopLevelInteractionContent">
28
+ <div class="Polaris-Page">
29
+ <div class="Polaris-Page__Content">
30
+ <div class="Polaris-Layout">
31
+ <div class="Polaris-Layout__Section">
32
+ <div class="Polaris-Stack Polaris-Stack--vertical">
33
+ <div class="Polaris-Stack__Item">
34
+ <div class="Polaris-EmptyState">
35
+ <div class="Polaris-EmptyState__Section">
36
+ <div class="Polaris-EmptyState__DetailsContainer">
37
+ <div class="Polaris-EmptyState__Details">
38
+ <div class="Polaris-TextContainer">
39
+ <h1 class="Polaris-DisplayText Polaris-DisplayText--sizeMedium"><%= I18n.t('top_level_interaction_heading', app: DuodealerApp.configuration.application_name) %></h1>
40
+ <div class="Polaris-EmptyState__Content">
41
+ <p><%= I18n.t('top_level_interaction_body', app: DuodealerApp.configuration.application_name) %></p>
42
+ </div>
43
+ </div>
44
+ <div class="Polaris-EmptyState__Actions">
45
+ <div class="Polaris-Stack Polaris-Stack--alignmentCenter">
46
+ <div class="Polaris-Stack__Item"><button type="button" id="TopLevelInteractionButton" class="Polaris-Button Polaris-Button--primary Polaris-Button--sizeLarge"><span class="Polaris-Button__Content"><span class="Polaris-Button__Icon"></span><span><%= I18n.t('top_level_interaction_action') %></span></span></button></div>
47
+ </div>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ <div class="Polaris-EmptyState__ImageContainer">
52
+ <%= image_tag 'storage_access.svg', role: "presentation", alt: "", class: "Polaris-EmptyState__Image" %>
53
+ </div>
54
+ </div>
55
+ </div>
56
+ </div>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </main>
63
+ </body>
64
+ </html>
@@ -0,0 +1,64 @@
1
+ <!DOCTYPE html>
2
+ <html lang="<%= I18n.locale %>">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <base target="_top">
7
+ <title>Redirecting…</title>
8
+ <%= render 'duodealer_app/partials/layout_styles' %>
9
+ <%= render 'duodealer_app/partials/typography_styles' %>
10
+ <%= render 'duodealer_app/partials/button_styles' %>
11
+ <%= render 'duodealer_app/partials/empty_state_styles' %>
12
+ <style>
13
+ #TopLevelInteractionContent {
14
+ display: none;
15
+ }
16
+ </style>
17
+
18
+ <script>
19
+ window.apiKey = "<%= DuodealerApp.configuration.api_key %>";
20
+ window.shopOrigin = "https://<%= @shop %>";
21
+ window.redirectUrl = "<%= @url %>";
22
+ </script>
23
+
24
+ <%= javascript_include_tag('duodealer_app/top_level', crossorigin: 'anonymous', integrity: true) %>
25
+ </head>
26
+ <body>
27
+ <main id="TopLevelInteractionContent">
28
+ <div class="Polaris-Page">
29
+ <div class="Polaris-Page__Content">
30
+ <div class="Polaris-Layout">
31
+ <div class="Polaris-Layout__Section">
32
+ <div class="Polaris-Stack Polaris-Stack--vertical">
33
+ <div class="Polaris-Stack__Item">
34
+ <div class="Polaris-EmptyState">
35
+ <div class="Polaris-EmptyState__Section">
36
+ <div class="Polaris-EmptyState__DetailsContainer">
37
+ <div class="Polaris-EmptyState__Details">
38
+ <div class="Polaris-TextContainer">
39
+ <h1 class="Polaris-DisplayText Polaris-DisplayText--sizeMedium"><%= I18n.t('top_level_interaction_heading', app: DuodealerApp.configuration.application_name) %></h1>
40
+ <div class="Polaris-EmptyState__Content">
41
+ <p><%= I18n.t('top_level_interaction_body', app: DuodealerApp.configuration.application_name) %></p>
42
+ </div>
43
+ </div>
44
+ <div class="Polaris-EmptyState__Actions">
45
+ <div class="Polaris-Stack Polaris-Stack--alignmentCenter">
46
+ <div class="Polaris-Stack__Item"><button type="button" id="TopLevelInteractionButton" class="Polaris-Button Polaris-Button--primary Polaris-Button--sizeLarge"><span class="Polaris-Button__Content"><span class="Polaris-Button__Icon"></span><span><%= I18n.t('top_level_interaction_action') %></span></span></button></div>
47
+ </div>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ <div class="Polaris-EmptyState__ImageContainer">
52
+ <%= image_tag 'storage_access.svg', role: "presentation", alt: "", class: "Polaris-EmptyState__Image" %>
53
+ </div>
54
+ </div>
55
+ </div>
56
+ </div>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </div>
62
+ </main>
63
+ </body>
64
+ </html>
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <base target="_top">
7
+ <title>Redirecting…</title>
8
+ <%= javascript_include_tag('duodealer_app/redirect', crossorigin: 'anonymous', integrity: true) %>
9
+ </head>
10
+ <body>
11
+ <%=
12
+ content_tag(:div, nil,
13
+ id: 'redirection-target',
14
+ data: {
15
+ target: {
16
+ duodealerUrl: "https://#{current_duodealer_domain}",
17
+ url: url,
18
+ },
19
+ },
20
+ )
21
+ %>
22
+ </body>
23
+ </html>
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <base target="_top">
7
+ <title>Redirecting…</title>
8
+ <%= javascript_include_tag('duodealer_app/redirect', crossorigin: 'anonymous', integrity: true) %>
9
+ </head>
10
+ <body>
11
+ <%=
12
+ content_tag(:div, nil,
13
+ id: 'redirection-target',
14
+ data: {
15
+ target: {
16
+ duodealerUrl: "https://#{current_duodealer_domain}",
17
+ url: url,
18
+ },
19
+ },
20
+ )
21
+ %>
22
+ </body>
23
+ </html>
@@ -0,0 +1,23 @@
1
+ ---
2
+ cs:
3
+ logged_out: Odhlášení proběhlo úspěšně
4
+ could_not_log_in: Nelze se přihlásit do obchodu Duo Dealer
5
+ invalid_shop_url: Neplatná doména obchodu
6
+ enable_cookies_heading: Zapnout soubory cookie z aplikace %{app}
7
+ enable_cookies_body: Pokud chcete v Duo Dealer používat aplikaci %{app}, musíte soubory
8
+ cookie v tomto prohlížeči povolit ručně.
9
+ enable_cookies_footer: Soubory cookie umožňují, aby vás aplikace ověřila pomocí
10
+ dočasného uchování preferencí a osobních údajů. Jejich platnost vyprší po 30 dnech.
11
+ enable_cookies_action: Povolit soubory cookie
12
+ top_level_interaction_heading: Váš prohlížeč potřebuje ověřit aplikaci %{app}
13
+ top_level_interaction_body: Váš prohlížeč vyžaduje, aby si od vás aplikace, jako
14
+ je %{app}, nejdřív vyžádaly přístup k souborům cookie, než je pro vás Duo Dealer
15
+ otevře.
16
+ top_level_interaction_action: Pokračovat
17
+ request_storage_access_heading: Aplikace %{app} potřebuje získat přístup k souborům
18
+ cookie
19
+ request_storage_access_body: Tato aplikace vám umožní ověření prostřednictvím dočasného
20
+ uchování vašich osobních údajů. Pokud chcete používat tuto aplikaci, klikněte
21
+ na tlačítko Pokračovat a povolte soubory cookie.
22
+ request_storage_access_footer: Platnost souborů cookie vyprší po 30 dnech.
23
+ request_storage_access_action: Pokračovat
@@ -0,0 +1,20 @@
1
+ ---
2
+ da:
3
+ logged_out: Logget ud
4
+ could_not_log_in: Kunne ikke logge ind på Duo Dealer-butik
5
+ invalid_shop_url: Ugyldig butiksdomæne
6
+ enable_cookies_heading: Aktivér cookies fra %{app}
7
+ enable_cookies_body: Du skal manuelt aktivere cookies i denne browser for at kunne
8
+ bruge %{app} i Duo Dealer.
9
+ enable_cookies_footer: Cookies lader appen godkende dig ved at gemme dine præferencer
10
+ og personlige oplysninger midlertidigt. De udløber efter 30 dage.
11
+ enable_cookies_action: Aktivér cookies
12
+ top_level_interaction_heading: Din browser skal godkende %{app}
13
+ top_level_interaction_body: Din browser kræver, at apps som f.eks. %{app} spørger
14
+ dig om adgang til cookies, inden Duo Dealer kan åbne den for dig.
15
+ top_level_interaction_action: Fortsæt
16
+ request_storage_access_heading: "%{app} skal have adgang til cookies"
17
+ request_storage_access_body: Det lader appen godkende dig ved at gemme dine personlige
18
+ oplysninger midlertidigt. Klik på forsæt, og tillad cookies for at bruge appen.
19
+ request_storage_access_footer: Cookies udløber efter 30 dage.
20
+ request_storage_access_action: Fortsæt
@@ -0,0 +1,22 @@
1
+ ---
2
+ de:
3
+ logged_out: Erfolgreich ausgelogt
4
+ could_not_log_in: Duo Dealer Store Login fehlgeschlagen
5
+ invalid_shop_url: Ungültige Shop-Domain
6
+ enable_cookies_heading: Cookies von %{app} aktivieren
7
+ enable_cookies_body: Sie müssen Cookies in diesem Browser manuell aktivieren, um
8
+ %{app} in Duo Dealer verwenden zu können.
9
+ enable_cookies_footer: Mithilfe von Cookies kann die App Sie authentifizieren, indem
10
+ Ihre Einstellungen und personenbezogenen Daten vorübergehend gespeichert werden.
11
+ Sie laufen nach 30 Tagen ab.
12
+ enable_cookies_action: Cookies aktivieren
13
+ top_level_interaction_heading: Ihr Browser muss %{app} authentifizieren
14
+ top_level_interaction_body: Ihr Browser verlangt, dass Apps wie %{app} Sie um Zugriff
15
+ auf Cookies bitten, bevor Duo Dealer sie für Sie öffnen kann.
16
+ top_level_interaction_action: Weiter
17
+ request_storage_access_heading: "%{app} braucht Zugriff auf Cookies"
18
+ request_storage_access_body: Damit kann die App Sie authentifizieren, indem Ihre
19
+ Einstellungen und personenbezogenen Daten vorübergehend gespeichert werden. Klicken
20
+ Sie auf "Weiter" und erlauben Sie den Cookies, die App zu verwenden.
21
+ request_storage_access_footer: Cookies laufen nach 30 Tagen ab.
22
+ request_storage_access_action: Weiter
@@ -0,0 +1,15 @@
1
+ en:
2
+ logged_out: 'Successfully logged out'
3
+ could_not_log_in: 'Could not log in to Duo Dealer store'
4
+ invalid_shop_url: 'Invalid shop domain'
5
+ enable_cookies_heading: "Enable cookies from %{app}"
6
+ enable_cookies_body: "You must manually enable cookies in this browser in order to use %{app} within Duo Dealer."
7
+ enable_cookies_footer: 'Cookies let the app authenticate you by temporarily storing your preferences and personal information. They expire after 30 days.'
8
+ enable_cookies_action: 'Enable cookies'
9
+ top_level_interaction_heading: "Your browser needs to authenticate %{app}"
10
+ top_level_interaction_body: "Your browser requires apps like %{app} to ask you for access to cookies before Duo Dealer can open it for you."
11
+ top_level_interaction_action: 'Continue'
12
+ request_storage_access_heading: "%{app} needs access to cookies"
13
+ request_storage_access_body: "This lets the app authenticate you by temporarily storing your personal information. Click continue and allow cookies to use the app."
14
+ request_storage_access_footer: 'Cookies expire after 30 days.'
15
+ request_storage_access_action: 'Continue'
@@ -0,0 +1,22 @@
1
+ ---
2
+ es:
3
+ logged_out: Cerrar sesión
4
+ could_not_log_in: No se pudo iniciar sesión en tu tienda Duo Dealer
5
+ invalid_shop_url: Dominio de tienda inválido
6
+ enable_cookies_heading: Habilitar cookies de %{app}
7
+ enable_cookies_body: Debes habilitar manualmente las cookies en este navegador para
8
+ usar %{app} en Duo Dealer.
9
+ enable_cookies_footer: Las cookies permiten que la aplicación te autentique almacenando
10
+ temporalmente tus preferencias y datos personales. Las cookies expiran al cabo
11
+ de 30 días.
12
+ enable_cookies_action: Habilitar cookies
13
+ top_level_interaction_heading: Tu navegador necesita autenticar %{app}
14
+ top_level_interaction_body: Tu navegador requiere aplicaciones como %{app} para
15
+ solicitarte acceso a cookies antes de que Duo Dealer pueda abrirlo por ti.
16
+ top_level_interaction_action: Continuar
17
+ request_storage_access_heading: "%{app} necesita acceso a las cookies"
18
+ request_storage_access_body: Esto permite que la aplicación te autentique almacenando
19
+ temporalmente tus datos personales. Haz clic en continuar y permite que las cookies
20
+ utilicen la aplicación.
21
+ request_storage_access_footer: Las cookies expiran a los 30 días.
22
+ request_storage_access_action: Continuar
@@ -0,0 +1,20 @@
1
+ ---
2
+ fi:
3
+ logged_out: Olet kirjautunut ulos
4
+ could_not_log_in: Kirjautuminen Duo Dealer-kauppaan ei onnistunut
5
+ invalid_shop_url: Virheellinen kaupan verkkotunnus
6
+ enable_cookies_heading: Ota käyttöön sovelluksen %{app} evästeet
7
+ enable_cookies_body: Sinun on otettava evästeet käyttöön manuaalisesti tässä selaimessa,
8
+ jotta voit käyttää sovellusta %{app} Duo Dealerssa.
9
+ enable_cookies_footer: Evästeiden avulla sovellus voi todentaa sinut tallentamalla
10
+ asetuksesi ja henkilötietosi tilapäisesti. Ne vanhenevat 30 päivän kuluttua.
11
+ enable_cookies_action: Ota evästeet käyttöön
12
+ top_level_interaction_heading: Selaimesi täytyy todentaa %{app}
13
+ top_level_interaction_body: Selaimesi vaatii sovelluksia, kuten %{app}, pyytämään
14
+ sinulta luvan evästeiden käyttöön, ennen kuin Duo Dealer voi avata sovelluksen.
15
+ top_level_interaction_action: Jatka
16
+ request_storage_access_heading: "%{app} edellyttää evästeiden käyttöä"
17
+ request_storage_access_body: Näin sovellus voi todentaa sinut tallentamalla henkilötietosi
18
+ tilapäisesti. Napsauta Jatka ja salli evästeet sovelluksen käyttämiseksi.
19
+ request_storage_access_footer: Evästeet vanhenevat 30 päivän kuluttua.
20
+ request_storage_access_action: Jatka