about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBen Harris <ben@tilde.team>2021-09-14 23:34:39 -0400
committerBen Harris <ben@tilde.team>2021-09-14 23:34:39 -0400
commitf9ea5e999a298f658ef7fb2abc7c13ba3ca412cb (patch)
tree091233c6f148f976433e0193868d3a1f1fa2f06e
parentd32e71077cb5a874c69edfc8db77b272a1388623 (diff)
fix turbo redirects
-rw-r--r--app/controllers/application_controller.rb1
-rw-r--r--app/controllers/concerns/turbo/redirection.rb32
-rw-r--r--app/views/layouts/application.html.erb4
-rw-r--r--app/views/machines/_form.html.erb2
-rw-r--r--app/views/players/_form.html.erb2
5 files changed, 37 insertions, 4 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 09705d1..c8be53e 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -1,2 +1,3 @@
 class ApplicationController < ActionController::Base
+  include Turbo::Redirection
 end
diff --git a/app/controllers/concerns/turbo/redirection.rb b/app/controllers/concerns/turbo/redirection.rb
new file mode 100644
index 0000000..cf7cc55
--- /dev/null
+++ b/app/controllers/concerns/turbo/redirection.rb
@@ -0,0 +1,32 @@
+module Turbo
+  module Redirection
+    extend ActiveSupport::Concern
+
+    def redirect_to(url = {}, options = {})
+      turbo = options.delete(:turbo)
+
+      super.tap do
+        if turbo != false && request.xhr? && !request.get?
+          visit_location_with_turbo(location, turbo)
+        end
+      end
+    end
+
+    private
+      def visit_location_with_turbo(location, action)
+        visit_options = {
+          action: action.to_s == "advance" ? action : "replace"
+        }
+
+        script = []
+        script << "Turbo.clearCache()"
+        script << "Turbo.visit(#{location.to_json}, #{visit_options.to_json})"
+
+        self.status = 200
+        self.response_body = script.join("\n")
+        response.content_type = "text/javascript"
+        response.headers["X-Xhr-Redirect"] = location
+      end
+  end
+end
+
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index 97b4aed..efe387a 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -6,8 +6,8 @@
     <%= csp_meta_tag %>
 
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
-    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
+    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbo-track': 'reload' %>
+    <%= javascript_pack_tag 'application', 'data-turbo-track': 'reload' %>
   </head>
 
   <body>
diff --git a/app/views/machines/_form.html.erb b/app/views/machines/_form.html.erb
index ae1a515..1f693aa 100644
--- a/app/views/machines/_form.html.erb
+++ b/app/views/machines/_form.html.erb
@@ -1,4 +1,4 @@
-<%= form_with model: @machine, local: true do |form| %>
+<%= form_with model: @machine do |form| %>
   <br>
   <div>
     <%= form.label :name %><br>
diff --git a/app/views/players/_form.html.erb b/app/views/players/_form.html.erb
index ca98df8..170b6d3 100644
--- a/app/views/players/_form.html.erb
+++ b/app/views/players/_form.html.erb
@@ -1,4 +1,4 @@
-<%= form_with model: @player, local: true do |form| %>
+<%= form_with model: @player do |form| %>
   <br>
   <div>
     <%= form.label :name %><br>