Skip to content

Commit 8d8b3f2

Browse files
committed
"Break out" of a frame from the server
Closes hotwired/turbo#257 Closes hotwired/turbo#397 Follow-up to: * hotwired/turbo#257 (comment) * hotwired/turbo#257 (comment) Depends on hotwired/turbo#660 Introduces the `Turbo::Stream::Redirect` concern to override the [redirect_to][] routing helper. When called with a `turbo_frame:` option, the `redirect_to` helper with check whether the request was made with the Turbo Stream `Accept:` header. When it's absent, the response will redirect with a typical HTTP status code and location. When present, the controller will respond with a `<turbo-stream>` element that invokes [Turbo.visit($URL, { frame: $TURBO_FRAME })][hotwired/turbo#649] where `$URL` is set to the redirect's path or URL, and `$TURBO_FRAME` is set to the `turbo_frame:` argument. This enables server-side actions to navigate the entire page with a `turbo_frame: "_top"` option. Incidentally, it also enables a frame request to navigate _a different_ frame. Typically, an HTTP that would result in a redirect nets two requests: the first submission, then the subsequent GET request to follow the redirect. In the case of a "break out", the same number of requests are made: the first submission, then the subsequent GET made by the `Turbo.visit` call. Once the `Turbo.visit` call is made, the script removes its ancestor `<script>` by calling [document.currentScript.remove()][]. [redirect_to]: https://edgeapi.rubyonrails.org/classes/ActionController/Redirecting.html#method-i-redirect_to [hotwired/turbo#649]: hotwired/turbo#649 [document.currentScript.remove()]: https://developer.mozilla.org/en-US/docs/Web/API/Document/currentScript
1 parent 0225c09 commit 8d8b3f2

File tree

13 files changed

+286
-89
lines changed

13 files changed

+286
-89
lines changed

Gemfile

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ end
1313
gem "rails", rails_constraint
1414
gem "sprockets-rails"
1515

16+
gem 'net-smtp'
1617
gem 'rake'
1718
gem 'byebug'
1819
gem 'puma'
@@ -23,6 +24,7 @@ end
2324

2425
group :test do
2526
gem 'capybara'
27+
gem 'capybara_accessible_selectors', github: 'citizensadvice/capybara_accessible_selectors', branch: 'main'
2628
gem 'rexml'
2729
gem 'selenium-webdriver'
2830
gem 'webdrivers'

0 commit comments

Comments
 (0)