From 79efa50a34ea17909cd66b8f6aaa01ab507dac02 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 14 Aug 2021 18:21:43 +0100 Subject: [PATCH 01/20] Add Turbo and MRUJS --- app/assets/javascripts/darkswarm/all.js.coffee | 4 ++++ app/webpacker/packs/application.js | 6 ++++++ package.json | 2 ++ yarn.lock | 17 +++++++++++++++++ 4 files changed, 29 insertions(+) diff --git a/app/assets/javascripts/darkswarm/all.js.coffee b/app/assets/javascripts/darkswarm/all.js.coffee index 9b0944cbd5..c318cf573b 100644 --- a/app/assets/javascripts/darkswarm/all.js.coffee +++ b/app/assets/javascripts/darkswarm/all.js.coffee @@ -54,3 +54,7 @@ #= require_tree ./mixins #= require_tree ./directives #= require_tree . + +document.addEventListener "turbo:load", -> + angular.bootstrap document.body, ["Darkswarm"] + true diff --git a/app/webpacker/packs/application.js b/app/webpacker/packs/application.js index fdd6b29cb2..dc90949b19 100644 --- a/app/webpacker/packs/application.js +++ b/app/webpacker/packs/application.js @@ -7,3 +7,9 @@ import { definitionsFromContext } from "stimulus/webpack-helpers" const application = Application.start() const context = require.context("controllers", true, /.js$/) application.load(definitionsFromContext(context)) + +import mrujs from "mrujs" +import * as Turbo from "@hotwired/turbo" + +window.Turbo = Turbo +mrujs.start() diff --git a/package.json b/package.json index 6fb8a6323a..278484c9b4 100644 --- a/package.json +++ b/package.json @@ -27,9 +27,11 @@ }, "license": "AGPL-3.0", "dependencies": { + "@hotwired/turbo": "^7.0.0-rc.1", "@rails/webpacker": "5.4.2", "flatpickr": "^4.6.9", "moment": "^2.29.1", + "mrujs": "^0.3.7-beta.6", "shortcut-buttons-flatpickr": "^0.3.1", "stimulus": "^2.0.0", "webpack": "^4.46.0", diff --git a/yarn.lock b/yarn.lock index 779c809e24..925aafe029 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1599,6 +1599,11 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@hotwired/turbo@^7.0.0-rc.1": + version "7.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-7.0.0-rc.1.tgz#a5c1be86def1cc39b3011c935c5734b8632af5c3" + integrity sha512-niNA68ku4TZYbV3biwTPf1L5CidP50S2xfeb5rGQfodvPB9UAtkqKFFRIA0LL8y0DG4MGIZ/QFlbvlmFea5p4w== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -8787,6 +8792,11 @@ moment@^2.29.1: resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== +"morphdom@>=2.6.0 <3.0.0": + version "2.6.1" + resolved "https://registry.yarnpkg.com/morphdom/-/morphdom-2.6.1.tgz#e868e24f989fa3183004b159aed643e628b4306e" + integrity sha512-Y8YRbAEP3eKykroIBWrjcfMw7mmwJfjhqdpSvoqinu8Y702nAwikpXcNFDiIkyvfCLxLM9Wu95RZqo4a9jFBaA== + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -8799,6 +8809,13 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" +mrujs@^0.3.7-beta.6: + version "0.3.7-beta.6" + resolved "https://registry.yarnpkg.com/mrujs/-/mrujs-0.3.7-beta.6.tgz#ee06a3d60804b9b3c29c94b171031d4a909e48be" + integrity sha512-BP26BPrBOVRRxxuNBRSmT/yTqoy5/PeUafz21LVNVy8wBQTnfAMrU/FDt5arLkLhOkA4+YVXnAXM8xQC65jdkQ== + dependencies: + morphdom ">=2.6.0 <3.0.0" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" From b29d88be25d4edafbbcdb7318012c980d83f5475 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Thu, 8 Jul 2021 00:43:24 +0100 Subject: [PATCH 02/20] Add progress bar styling --- app/assets/stylesheets/darkswarm/animations.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/assets/stylesheets/darkswarm/animations.scss b/app/assets/stylesheets/darkswarm/animations.scss index d7fb952907..e1374a29ba 100644 --- a/app/assets/stylesheets/darkswarm/animations.scss +++ b/app/assets/stylesheets/darkswarm/animations.scss @@ -1,5 +1,9 @@ @import "mixins"; +.turbo-progress-bar { + background-color: $teal-400; +} + // ANIMATION FUNCTIONS // From 658f0eccbbc30fafd964fd27f618c8a715f6d866 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 14 Aug 2021 19:25:53 +0100 Subject: [PATCH 03/20] Replace ng-app with explicit Angular bootstrapping and move scripts to head --- app/views/layouts/darkswarm.html.haml | 28 ++++++++++++------------ app/views/layouts/registration.html.haml | 8 +++---- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/views/layouts/darkswarm.html.haml b/app/views/layouts/darkswarm.html.haml index de1f90b8fa..67b1359a34 100644 --- a/app/views/layouts/darkswarm.html.haml +++ b/app/views/layouts/darkswarm.html.haml @@ -15,17 +15,26 @@ %link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"} %link{href: font_path("OFN-v2.woff"), rel: "preload", as: "font", crossorigin: "anonymous"} - = stylesheet_link_tag "darkswarm/all" - = javascript_pack_tag "application" + = stylesheet_link_tag "darkswarm/all", "data-turbo-track": "reload" + = javascript_pack_tag "application", "data-turbo-track": "reload" + + = render "layouts/shopfront_script" if @shopfront_layout + = render "layouts/bugsnag_js" + + - if Spree::Config.stripe_connect_enabled + = render "shared/stripe_js" + + = javascript_include_tag "darkswarm/all", "data-turbo-track": "reload" + = javascript_include_tag "web/all", "data-turbo-track": "reload" + = render "layouts/i18n_script" + = csrf_meta_tags - %body{ class: body_classes, "body-scroll" => true , ng: { app: 'Darkswarm' }} + %body{ class: body_classes, "body-scroll": "true" } / [if lte IE 8] = render partial: "shared/ie_warning" = javascript_include_tag "iehack" - = render "layouts/shopfront_script" if @shopfront_layout - .off-canvas-wrap{ offcanvas: true } .fixed.off-canvas-fixed = render "shared/menu/menu" unless @hide_menu @@ -38,16 +47,7 @@ #footer %loading - = render "layouts/bugsnag_js" - - - if Spree::Config.stripe_connect_enabled - = render "shared/stripe_js" - = javascript_include_tag "darkswarm/all" - = javascript_include_tag "web/all" - = render "layouts/i18n_script" - = yield :scripts - = inject_current_hub = inject_current_user = inject_rails_flash diff --git a/app/views/layouts/registration.html.haml b/app/views/layouts/registration.html.haml index 815bff62c2..c5ef544a13 100644 --- a/app/views/layouts/registration.html.haml +++ b/app/views/layouts/registration.html.haml @@ -11,9 +11,12 @@ %link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"} = stylesheet_link_tag "darkswarm/all" + = javascript_include_tag "darkswarm/all" + = javascript_pack_tag "application" + = csrf_meta_tags - %body.off-canvas{"ng-app" => "Darkswarm", style: "background-image: url(#{image_path('tile-wide.png')})" } + %body.off-canvas{ style: "background-image: url(#{image_path('tile-wide.png')})" } / [if lte IE 8] = render partial: "shared/ie_warning" = javascript_include_tag "iehack" @@ -27,10 +30,7 @@ #footer %loading - %script{src: "//maps.googleapis.com/maps/api/js?libraries=places#{ ENV['GOOGLE_MAPS_API_KEY'] ? '&key=' + ENV['GOOGLE_MAPS_API_KEY'] : ''}"} - = javascript_include_tag "darkswarm/all" = yield :scripts - = inject_current_user = yield :injection_data From a23171ea512d55f278e014b1c68c1c871d11a2fb Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 14 Jun 2021 20:22:17 +0100 Subject: [PATCH 04/20] Compile Webpacker assets only once in test environment --- config/webpacker.yml | 16 +++++++--------- spec/spec_helper.rb | 6 ++++++ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/config/webpacker.yml b/config/webpacker.yml index f966a6ac93..dccab3e4ab 100644 --- a/config/webpacker.yml +++ b/config/webpacker.yml @@ -71,15 +71,7 @@ development: watch_options: ignored: '**/node_modules/**' - -test: - <<: *default - compile: true - - # Compile test packs to a separate directory - public_output_path: packs-test - -production: +production: &production <<: *default # Production depends on precompilation of packs prior to booting for performance. @@ -90,3 +82,9 @@ production: # Cache manifest.json for performance cache_manifest: true + +test: + <<: *production + + # Compile test packs to a separate directory + public_output_path: packs-test diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b975f5aff7..c912bb80d1 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -55,6 +55,12 @@ RSpec.configure do |config| Capybara.reset_sessions! end + # Precompile Webpacker assets (once) when starting the suite. The default setup can result + # in the assets getting compiled many times throughout the build, slowing it down. + config.before :suite do + Webpacker.compile + end + # Fix encoding issue in Rails 5.0; allows passing empty arrays or hashes as params. config.before(:each, type: :controller) { @request.env["CONTENT_TYPE"] = 'application/json' } From 10f636852422d5e311e7fa19e2a42091fe54e274 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 14 Aug 2021 19:31:31 +0100 Subject: [PATCH 05/20] Add Angular teardown --- app/assets/javascripts/darkswarm/all.js.coffee | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/darkswarm/all.js.coffee b/app/assets/javascripts/darkswarm/all.js.coffee index c318cf573b..5336e86880 100644 --- a/app/assets/javascripts/darkswarm/all.js.coffee +++ b/app/assets/javascripts/darkswarm/all.js.coffee @@ -56,5 +56,13 @@ #= require_tree . document.addEventListener "turbo:load", -> - angular.bootstrap document.body, ["Darkswarm"] + window.injector = angular.bootstrap document.body, ["Darkswarm"] true + +document.addEventListener "turbo:before-render", -> + if window.injector + rootscope = window.injector.get("$rootScope") + rootscope?.$destroy() + rootscope = null + window.injector = null + true \ No newline at end of file From 9be73a8ff11f62ed032d1bfbee0a2ef438ddb2ac Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 14 Aug 2021 20:18:55 +0100 Subject: [PATCH 06/20] Respond with HTTP error code on update failure --- app/controllers/split_checkout_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/split_checkout_controller.rb b/app/controllers/split_checkout_controller.rb index 9849f10b19..8edc1a82d6 100644 --- a/app/controllers/split_checkout_controller.rb +++ b/app/controllers/split_checkout_controller.rb @@ -25,7 +25,7 @@ class SplitCheckoutController < ::BaseController redirect_to_step else flash.now[:error] = I18n.t('split_checkout.errors.global') - render :edit + render :edit, status: :unprocessable_entity end end From 20ff5940147be9e4b9bd48db11dd0efcb2e32e0c Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 14 Aug 2021 20:21:10 +0100 Subject: [PATCH 07/20] Set data-remote on checkout form --- app/views/split_checkout/_form.html.haml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/views/split_checkout/_form.html.haml b/app/views/split_checkout/_form.html.haml index ebe564b3b5..49469f4e7d 100644 --- a/app/views/split_checkout/_form.html.haml +++ b/app/views/split_checkout/_form.html.haml @@ -2,5 +2,7 @@ = inject_saved_credit_cards %div.checkout-step - = form_with url: checkout_update_path(checkout_step), model: @order, method: :put do |f| - = render "split_checkout/#{checkout_step}", f: f + = form_with url: checkout_update_path(checkout_step), model: @order, method: :put, + data: { remote: "true" } do |form| + + = render "split_checkout/#{checkout_step}", f: form From 23779fd5e4da877c0822d3bb62423554ec10cc5f Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 14 Aug 2021 23:01:49 +0100 Subject: [PATCH 08/20] Include progressbar for mrujs form submissions --- app/assets/javascripts/darkswarm/all.js.coffee | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/darkswarm/all.js.coffee b/app/assets/javascripts/darkswarm/all.js.coffee index 5336e86880..b425d57848 100644 --- a/app/assets/javascripts/darkswarm/all.js.coffee +++ b/app/assets/javascripts/darkswarm/all.js.coffee @@ -65,4 +65,12 @@ document.addEventListener "turbo:before-render", -> rootscope?.$destroy() rootscope = null window.injector = null - true \ No newline at end of file + true + +document.addEventListener "ajax:beforeSend", (event) => + window.Turbo.navigator.adapter.progressBar.setValue(0) + window.Turbo.navigator.adapter.progressBar.show() + +document.addEventListener "ajax:complete", (event) => + window.Turbo.navigator.adapter.progressBar.setValue(100) + window.Turbo.navigator.adapter.progressBar.hide() From 6b028ba849281527ffa457aca43c39d40f6cca09 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 16 Aug 2021 16:13:02 +0100 Subject: [PATCH 09/20] Disable Turbo site-wide --- app/views/layouts/darkswarm.html.haml | 2 +- app/views/layouts/registration.html.haml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/layouts/darkswarm.html.haml b/app/views/layouts/darkswarm.html.haml index 67b1359a34..ce68076fa9 100644 --- a/app/views/layouts/darkswarm.html.haml +++ b/app/views/layouts/darkswarm.html.haml @@ -30,7 +30,7 @@ = csrf_meta_tags - %body{ class: body_classes, "body-scroll": "true" } + %body{ class: body_classes, "body-scroll": "true", "data-turbo": "false" } / [if lte IE 8] = render partial: "shared/ie_warning" = javascript_include_tag "iehack" diff --git a/app/views/layouts/registration.html.haml b/app/views/layouts/registration.html.haml index c5ef544a13..b8bb3d392e 100644 --- a/app/views/layouts/registration.html.haml +++ b/app/views/layouts/registration.html.haml @@ -16,7 +16,7 @@ = csrf_meta_tags - %body.off-canvas{ style: "background-image: url(#{image_path('tile-wide.png')})" } + %body.off-canvas{ style: "background-image: url(#{image_path('tile-wide.png')})", "data-turbo": "false" } / [if lte IE 8] = render partial: "shared/ie_warning" = javascript_include_tag "iehack" From 062a3abc2d35c923829261ecfd3cf3330d6af44e Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 14 Aug 2021 23:42:31 +0100 Subject: [PATCH 10/20] Enable Turbo in the new checkout --- app/views/split_checkout/edit.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/split_checkout/edit.html.haml b/app/views/split_checkout/edit.html.haml index 17afe2a845..337e515871 100644 --- a/app/views/split_checkout/edit.html.haml +++ b/app/views/split_checkout/edit.html.haml @@ -1,7 +1,7 @@ - content_for(:title) do = t :checkout_title -.darkswarm.footer-pad +.darkswarm.footer-pad{"data-turbo": "true"} - content_for :order_cycle_form do %closing = t :checkout_now From edb599b426a04ab65c6aa224bf3342a2ce6af103 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sat, 14 Aug 2021 23:42:00 +0100 Subject: [PATCH 11/20] Disable Turbo page caching --- app/views/layouts/darkswarm.html.haml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/layouts/darkswarm.html.haml b/app/views/layouts/darkswarm.html.haml index ce68076fa9..c02ebb6ee0 100644 --- a/app/views/layouts/darkswarm.html.haml +++ b/app/views/layouts/darkswarm.html.haml @@ -29,6 +29,7 @@ = render "layouts/i18n_script" = csrf_meta_tags + %meta{name: "turbo-cache-control", content: "no-cache"} %body{ class: body_classes, "body-scroll": "true", "data-turbo": "false" } / [if lte IE 8] From 7fa9457550755e9ddf5710036aefe5a74f3bd6df Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 15 Aug 2021 13:13:09 +0100 Subject: [PATCH 12/20] Add cable_ready --- Gemfile | 2 ++ Gemfile.lock | 5 +++++ app/webpacker/packs/application.js | 9 +++++++-- package.json | 1 + yarn.lock | 9 ++++++++- 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index b1963c5583..469a8ea0e5 100644 --- a/Gemfile +++ b/Gemfile @@ -89,6 +89,8 @@ gem 'redis', '>= 4.0', require: ['redis', 'redis/connection/hiredis'] gem 'sidekiq' gem 'sidekiq-scheduler' +gem "cable_ready", "5.0.0.pre2" + gem 'combine_pdf' gem 'wicked_pdf' gem 'wkhtmltopdf-binary' diff --git a/Gemfile.lock b/Gemfile.lock index 8b5606b615..c169d82325 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -172,6 +172,9 @@ GEM activesupport (>= 3.0.0) uniform_notifier (~> 1.11) byebug (11.1.3) + cable_ready (5.0.0.pre2) + rails (>= 5.2) + thread-local (>= 1.1.0) cancancan (1.15.0) capybara (3.35.3) addressable @@ -621,6 +624,7 @@ GEM test-unit (3.4.5) power_assert thor (1.1.0) + thread-local (1.1.0) thwait (0.2.0) e2mmap tilt (2.0.10) @@ -698,6 +702,7 @@ DEPENDENCIES bugsnag bullet byebug + cable_ready (= 5.0.0.pre2) cancancan (~> 1.15.0) capybara catalog! diff --git a/app/webpacker/packs/application.js b/app/webpacker/packs/application.js index dc90949b19..de78b146be 100644 --- a/app/webpacker/packs/application.js +++ b/app/webpacker/packs/application.js @@ -8,8 +8,13 @@ const application = Application.start() const context = require.context("controllers", true, /.js$/) application.load(definitionsFromContext(context)) -import mrujs from "mrujs" +import CableReady from "cable_ready" +import mrujs, { CableCar } from "mrujs" import * as Turbo from "@hotwired/turbo" window.Turbo = Turbo -mrujs.start() +mrujs.start({ + plugins: [ + new CableCar(CableReady) + ] +}) diff --git a/package.json b/package.json index 278484c9b4..c6c38d58b9 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "dependencies": { "@hotwired/turbo": "^7.0.0-rc.1", "@rails/webpacker": "5.4.2", + "cable_ready": "^5.0.0-pre2", "flatpickr": "^4.6.9", "moment": "^2.29.1", "mrujs": "^0.3.7-beta.6", diff --git a/yarn.lock b/yarn.lock index 925aafe029..28f27f2f18 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3969,6 +3969,13 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +cable_ready@^5.0.0-pre2: + version "5.0.0-pre2" + resolved "https://registry.yarnpkg.com/cable_ready/-/cable_ready-5.0.0-pre2.tgz#c3589ebfe28a10db3998ae3711d31a072be53bfb" + integrity sha512-/Ql2e/Hz0kRRKzzz06sMXFm3+/qacYqSHfWkdt1CcsI7I6OOOhHzPAgY8VS+zqa/6+ggjWoPqHyi8Hr6j/0O6w== + dependencies: + morphdom "^2.6.1" + cacache@^12.0.2: version "12.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" @@ -8792,7 +8799,7 @@ moment@^2.29.1: resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== -"morphdom@>=2.6.0 <3.0.0": +"morphdom@>=2.6.0 <3.0.0", morphdom@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/morphdom/-/morphdom-2.6.1.tgz#e868e24f989fa3183004b159aed643e628b4306e" integrity sha512-Y8YRbAEP3eKykroIBWrjcfMw7mmwJfjhqdpSvoqinu8Y702nAwikpXcNFDiIkyvfCLxLM9Wu95RZqo4a9jFBaA== From 03abc395f27bcff675793546d87bbb87a41226ae Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 16 Aug 2021 16:21:18 +0100 Subject: [PATCH 13/20] Update responses to use cable_ready --- app/controllers/split_checkout_controller.rb | 6 +++++- app/views/split_checkout/_checkout.html.haml | 4 ++++ app/views/split_checkout/edit.html.haml | 6 +----- 3 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 app/views/split_checkout/_checkout.html.haml diff --git a/app/controllers/split_checkout_controller.rb b/app/controllers/split_checkout_controller.rb index 8edc1a82d6..995f6f528c 100644 --- a/app/controllers/split_checkout_controller.rb +++ b/app/controllers/split_checkout_controller.rb @@ -8,6 +8,7 @@ class SplitCheckoutController < ::BaseController include OrderStockCheck include Spree::BaseHelper include CheckoutCallbacks + include CableReady::Broadcaster helper 'terms_and_conditions' helper 'checkout' @@ -25,7 +26,10 @@ class SplitCheckoutController < ::BaseController redirect_to_step else flash.now[:error] = I18n.t('split_checkout.errors.global') - render :edit, status: :unprocessable_entity + + render operations: cable_car.replace( + selector: "#checkout", html: render_to_string(partial: "split_checkout/checkout", formats: [:html]) + ), status: :unprocessable_entity end end diff --git a/app/views/split_checkout/_checkout.html.haml b/app/views/split_checkout/_checkout.html.haml new file mode 100644 index 0000000000..f56be8a301 --- /dev/null +++ b/app/views/split_checkout/_checkout.html.haml @@ -0,0 +1,4 @@ +%checkout.row#checkout + .small-12.medium-12.columns + = render partial: "split_checkout/tabs" + = render partial: "split_checkout/form" diff --git a/app/views/split_checkout/edit.html.haml b/app/views/split_checkout/edit.html.haml index 337e515871..282da26f2c 100644 --- a/app/views/split_checkout/edit.html.haml +++ b/app/views/split_checkout/edit.html.haml @@ -19,10 +19,6 @@ .sub-header.show-for-medium-down = render partial: "shopping_shared/order_cycles" - %checkout.row - .small-12.medium-12.columns - = render partial: "split_checkout/tabs" - = render partial: "split_checkout/form" - + = render partial: "checkout" = render partial: "shared/footer" From e48b9d84e5e9f7f3e86c338db7e16b5aef3abb36 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 16 Aug 2021 16:25:17 +0100 Subject: [PATCH 14/20] Extract boilerplate code --- app/controllers/split_checkout_controller.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/controllers/split_checkout_controller.rb b/app/controllers/split_checkout_controller.rb index 995f6f528c..f4603d34d5 100644 --- a/app/controllers/split_checkout_controller.rb +++ b/app/controllers/split_checkout_controller.rb @@ -28,13 +28,17 @@ class SplitCheckoutController < ::BaseController flash.now[:error] = I18n.t('split_checkout.errors.global') render operations: cable_car.replace( - selector: "#checkout", html: render_to_string(partial: "split_checkout/checkout", formats: [:html]) + "#checkout", partial("split_checkout/checkout") ), status: :unprocessable_entity end end private + def partial(path, options = {}) + { html: render_to_string(partial: path, **options) } + end + def clear_invalid_payments @order.payments.with_state(:invalid).delete_all end From 5ef34347a39a05c1dd2495109142b53246e135b4 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 16 Aug 2021 16:25:51 +0100 Subject: [PATCH 15/20] Implement optional non-Angular flash messages --- .../stylesheets/darkswarm/animations.scss | 10 ++++++++++ app/controllers/split_checkout_controller.rb | 7 ++++--- app/views/shared/_flashes.html.haml | 7 +++++++ app/views/shared/menu/_menu.html.haml | 3 +++ app/webpacker/controllers/flash_controller.js | 20 +++++++++++++++++++ 5 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 app/views/shared/_flashes.html.haml create mode 100644 app/webpacker/controllers/flash_controller.js diff --git a/app/assets/stylesheets/darkswarm/animations.scss b/app/assets/stylesheets/darkswarm/animations.scss index e1374a29ba..cd5f3a5f89 100644 --- a/app/assets/stylesheets/darkswarm/animations.scss +++ b/app/assets/stylesheets/darkswarm/animations.scss @@ -6,6 +6,16 @@ // ANIMATION FUNCTIONS +@keyframes fade-out-hide { + 0% {opacity: 1; visibility: visible;} + 99% {opacity: 0; visibility: visible;} + 100% {opacity: 0; visibility: hidden;} +} + +.animate-hide-500 { + animation: fade-out-hide 0.5s; +} + // @-webkit-keyframes slideInDown { 0% { diff --git a/app/controllers/split_checkout_controller.rb b/app/controllers/split_checkout_controller.rb index f4603d34d5..c8c91dcf5a 100644 --- a/app/controllers/split_checkout_controller.rb +++ b/app/controllers/split_checkout_controller.rb @@ -27,9 +27,10 @@ class SplitCheckoutController < ::BaseController else flash.now[:error] = I18n.t('split_checkout.errors.global') - render operations: cable_car.replace( - "#checkout", partial("split_checkout/checkout") - ), status: :unprocessable_entity + render operations: cable_car. + replace("#checkout", partial("split_checkout/checkout")). + replace("#flashes", partial("shared/flashes", locals: { flashes: flash })), + status: :unprocessable_entity end end diff --git a/app/views/shared/_flashes.html.haml b/app/views/shared/_flashes.html.haml new file mode 100644 index 0000000000..1cd0bd5615 --- /dev/null +++ b/app/views/shared/_flashes.html.haml @@ -0,0 +1,7 @@ +#flashes + - if defined? flashes + - flashes.each do |type, msg| + %alert.animate-show{"data-controller": "flash"} + %div{type: "#{type}", class: "alert-box #{type == 'error' ? 'alert' : type}"} + %span= msg + %a.small.close{"data-action": "click->flash#close"} × diff --git a/app/views/shared/menu/_menu.html.haml b/app/views/shared/menu/_menu.html.haml index 4559434a8f..cf622767e8 100644 --- a/app/views/shared/menu/_menu.html.haml +++ b/app/views/shared/menu/_menu.html.haml @@ -1,6 +1,9 @@ %div{'ng-controller' => 'CartDropdownCtrl'} = render "shared/menu/large_menu" + %ofn-flash + = render partial: "shared/flashes" + = render "shared/menu/mobile_menu" = render "shared/menu/offcanvas_menu" = render "shared/menu/cart_sidebar" diff --git a/app/webpacker/controllers/flash_controller.js b/app/webpacker/controllers/flash_controller.js new file mode 100644 index 0000000000..12e499ae69 --- /dev/null +++ b/app/webpacker/controllers/flash_controller.js @@ -0,0 +1,20 @@ +import { Controller } from "stimulus" + +document.addEventListener('turbolinks:before-cache', () => + document.getElementById('flash').remove() +) + +export default class extends Controller { + connect() { + setTimeout(this.fadeout.bind(this), 3000) + } + + fadeout() { + this.element.classList.add("animate-hide-500") + setTimeout(this.close.bind(this), 500) + } + + close() { + this.element.remove() + } +} From 8bf3f72ad33f3e0fd2b073733ec85cfd6df942d5 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 16 Aug 2021 11:11:05 +0100 Subject: [PATCH 16/20] Extract CableCar responses code to a concern --- app/controllers/concerns/cablecar_responses.rb | 15 +++++++++++++++ app/controllers/split_checkout_controller.rb | 6 +----- 2 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 app/controllers/concerns/cablecar_responses.rb diff --git a/app/controllers/concerns/cablecar_responses.rb b/app/controllers/concerns/cablecar_responses.rb new file mode 100644 index 0000000000..b98d158dae --- /dev/null +++ b/app/controllers/concerns/cablecar_responses.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module CablecarResponses + extend ActiveSupport::Concern + + included do + include CableReady::Broadcaster + end + + private + + def partial(path, options = {}) + { html: render_to_string(partial: path, **options) } + end +end diff --git a/app/controllers/split_checkout_controller.rb b/app/controllers/split_checkout_controller.rb index c8c91dcf5a..63b2405aa4 100644 --- a/app/controllers/split_checkout_controller.rb +++ b/app/controllers/split_checkout_controller.rb @@ -8,7 +8,7 @@ class SplitCheckoutController < ::BaseController include OrderStockCheck include Spree::BaseHelper include CheckoutCallbacks - include CableReady::Broadcaster + include CablecarResponses helper 'terms_and_conditions' helper 'checkout' @@ -36,10 +36,6 @@ class SplitCheckoutController < ::BaseController private - def partial(path, options = {}) - { html: render_to_string(partial: path, **options) } - end - def clear_invalid_payments @order.payments.with_state(:invalid).delete_all end From 086c5ab2647bc54f96140428e120b53e98d72f3f Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 17 Aug 2021 12:32:02 +0100 Subject: [PATCH 17/20] Replace directive with data-confirm --- .../darkswarm/directives/confirm_link_click.js.coffee | 9 --------- app/views/spree/orders/form/_update_buttons.html.haml | 2 +- app/views/spree/users/_open_orders.html.haml | 2 +- 3 files changed, 2 insertions(+), 11 deletions(-) delete mode 100644 app/assets/javascripts/darkswarm/directives/confirm_link_click.js.coffee diff --git a/app/assets/javascripts/darkswarm/directives/confirm_link_click.js.coffee b/app/assets/javascripts/darkswarm/directives/confirm_link_click.js.coffee deleted file mode 100644 index c4a861fda6..0000000000 --- a/app/assets/javascripts/darkswarm/directives/confirm_link_click.js.coffee +++ /dev/null @@ -1,9 +0,0 @@ -angular.module('Darkswarm').directive "confirmLinkClick", ($window) -> - restrict: 'A' - scope: - confirmMsg: '@confirmLinkClick' - link: (scope, elem, attr) -> - elem.bind 'click', (event) -> - unless confirm(scope.confirmMsg) - event.preventDefault() - event.stopPropagation() diff --git a/app/views/spree/orders/form/_update_buttons.html.haml b/app/views/spree/orders/form/_update_buttons.html.haml index 884cea6746..65e3e9cbf1 100644 --- a/app/views/spree/orders/form/_update_buttons.html.haml +++ b/app/views/spree/orders/form/_update_buttons.html.haml @@ -12,7 +12,7 @@ - if order.changes_allowed? .columns.show-for-medium-up.medium-3   .columns.small-12.medium-3 - = link_to main_app.cancel_order_path(@order), method: :put, :class => "button secondary expand", "confirm-link-click" => t('orders_confirm_cancel') do + = link_to main_app.cancel_order_path(@order), method: :put, class: "button secondary expand", "data-confirm": t('orders_confirm_cancel') do %i.ofn-i_009-close = t(:cancel_order) .columns.small-12.medium-3 diff --git a/app/views/spree/users/_open_orders.html.haml b/app/views/spree/users/_open_orders.html.haml index 73be12b346..45f1426cb3 100644 --- a/app/views/spree/users/_open_orders.html.haml +++ b/app/views/spree/users/_open_orders.html.haml @@ -21,4 +21,4 @@ %td.order6.text-right.brick %a{"ng-href" => "{{::order.path}}" }= t('.edit') %td.order7.show-for-large-up.text-right - = link_to t('.cancel'), "", method: :put, "ng-href" => "{{::order.cancel_path}}", "confirm-link-click" => t('orders_confirm_cancel') + = link_to t('.cancel'), "", method: :put, "ng-href": "{{::order.cancel_path}}", "data-confirm": t('orders_confirm_cancel') From 44b870d2487e69a0bcecc4689d1966febe7db231 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 8 Sep 2021 19:39:52 +0100 Subject: [PATCH 18/20] Bump MRUJS and update syntax for new plugin architecture --- app/webpacker/packs/application.js | 3 ++- package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/webpacker/packs/application.js b/app/webpacker/packs/application.js index de78b146be..969633e0d5 100644 --- a/app/webpacker/packs/application.js +++ b/app/webpacker/packs/application.js @@ -9,7 +9,8 @@ const context = require.context("controllers", true, /.js$/) application.load(definitionsFromContext(context)) import CableReady from "cable_ready" -import mrujs, { CableCar } from "mrujs" +import mrujs from "mrujs" +import { CableCar } from "mrujs/plugins" import * as Turbo from "@hotwired/turbo" window.Turbo = Turbo diff --git a/package.json b/package.json index c6c38d58b9..65a7b2e791 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "cable_ready": "^5.0.0-pre2", "flatpickr": "^4.6.9", "moment": "^2.29.1", - "mrujs": "^0.3.7-beta.6", + "mrujs": "^0.4.13", "shortcut-buttons-flatpickr": "^0.3.1", "stimulus": "^2.0.0", "webpack": "^4.46.0", diff --git a/yarn.lock b/yarn.lock index 28f27f2f18..5f9df3aedb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8816,10 +8816,10 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" -mrujs@^0.3.7-beta.6: - version "0.3.7-beta.6" - resolved "https://registry.yarnpkg.com/mrujs/-/mrujs-0.3.7-beta.6.tgz#ee06a3d60804b9b3c29c94b171031d4a909e48be" - integrity sha512-BP26BPrBOVRRxxuNBRSmT/yTqoy5/PeUafz21LVNVy8wBQTnfAMrU/FDt5arLkLhOkA4+YVXnAXM8xQC65jdkQ== +mrujs@^0.4.13: + version "0.4.13" + resolved "https://registry.yarnpkg.com/mrujs/-/mrujs-0.4.13.tgz#0216d80beeda0711aebb60cf5272265fad34d9a4" + integrity sha512-/MgWDZt13LV515tsblbV8G/2AOR3tPX/CVUI9ppnwjDFU53xlVv/HRKlKDe9EcQZbSYiALyb0b0SZlp2iPXWTw== dependencies: morphdom ">=2.6.0 <3.0.0" From 47346e9f2caafa63c7279f76d31c87c4dfdf7b80 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 15 Sep 2021 18:52:24 +0100 Subject: [PATCH 19/20] Uncomment ActionCable in application.rb We're not directly utilising it yet, but CableReady expects it to be loaded. --- config/application.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/application.rb b/config/application.rb index 8d7efdcdc1..bbc6975b5c 100644 --- a/config/application.rb +++ b/config/application.rb @@ -8,7 +8,7 @@ require "rails" "action_view/railtie", "action_mailer/railtie", "active_job/railtie", - #"action_cable/engine", # Enable this when installing StimulusReflex + "action_cable/engine", #"action_mailbox/engine", #"action_text/engine", "rails/test_unit/railtie", From d55a3f3340c73f616abca8ea7d22ad2c81cedbb9 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Thu, 16 Sep 2021 14:12:31 +0100 Subject: [PATCH 20/20] Bump Turbo --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 65a7b2e791..36b02ad8df 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ }, "license": "AGPL-3.0", "dependencies": { - "@hotwired/turbo": "^7.0.0-rc.1", + "@hotwired/turbo": "^7.0.0-rc.4", "@rails/webpacker": "5.4.2", "cable_ready": "^5.0.0-pre2", "flatpickr": "^4.6.9", diff --git a/yarn.lock b/yarn.lock index 5f9df3aedb..7b9084798f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1599,10 +1599,10 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@hotwired/turbo@^7.0.0-rc.1": - version "7.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-7.0.0-rc.1.tgz#a5c1be86def1cc39b3011c935c5734b8632af5c3" - integrity sha512-niNA68ku4TZYbV3biwTPf1L5CidP50S2xfeb5rGQfodvPB9UAtkqKFFRIA0LL8y0DG4MGIZ/QFlbvlmFea5p4w== +"@hotwired/turbo@^7.0.0-rc.4": + version "7.0.0-rc.4" + resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-7.0.0-rc.4.tgz#d3ab9555544534f5ec649613553e72ff6c7d7122" + integrity sha512-4qx+6O6mUN+cSN+ZLGCOGc+2MxNrs7cFbmnWD6LIfiHAQyuNiIuB87Y5IAtOo8xj16fOBd2CdU1WRJya4Wkw0A== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0"