Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Break out" of a frame from the server #367

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Commits on May 14, 2023

  1. "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()][], and marking
    it with [data-turbo-cache="false"][]
    
    [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
    [data-turbo-cache="false"]: https://turbo.hotwired.dev/reference/attributes#data-attributes
    seanpdoyle committed May 14, 2023
    Configuration menu
    Copy the full SHA
    0cf26aa View commit details
    Browse the repository at this point in the history