1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
Commit graph

16 commits

Author SHA1 Message Date
Łukasz Strzałkowski
a288cc1e01 Add any/all support for variants
Like `format.any`, you can do the same with variants.

It works for both inline:

    respond_to do |format|
      format.html.any   { render text: "any"   }
      format.html.phone { render text: "phone" }
    end

and block syntax:

    respond_to do |format|
      format.html do |variant|
        variant.any(:tablet, :phablet){ render text: "any" }
        variant.phone { render text: "phone" }
      end
    end
2013-12-26 20:36:17 +01:00
Łukasz Strzałkowski
edacdbfaf9 Inline variants syntax
In most cases, when setting variant specific code, you're not sharing any code
within format.

Inline syntax can vastly simplify defining variants in those situations:

  respond_to do |format|
    format.js { render "trash" }
    format.html do |variant|
      variant.phone { redirect_to progress_path }
      variant.none  { render "trash" }
    end
  end

Becomes:

  respond_to do |format|
    format.js         { render "trash" }
    format.html.phone { redirect_to progress_path }
    format.html.none  { render "trash" }
  end
2013-12-10 11:55:43 +01:00
David Heinemeier Hansson
99975e742e Variants can be declared without a block to signify their presence in the controller 2013-12-07 16:32:38 -08:00
Łukasz Strzałkowski
2d3a6a0cb8 Action Pack Variants
By default, variants in the templates will be picked up if a variant is set
and there's a match. The format will be:

  app/views/projects/show.html.erb
  app/views/projects/show.html+tablet.erb
  app/views/projects/show.html+phone.erb

If request.variant = :tablet is set, we'll automatically be rendering the
html+tablet template.

In the controller, we can also tailer to the variants with this syntax:

  class ProjectsController < ActionController::Base
    def show
      respond_to do |format|
        format.html do |html|
          @stars = @project.stars

          html.tablet { @notifications = @project.notifications }
          html.phone  { @chat_heads    = @project.chat_heads }
        end

        format.js
        format.atom
      end
    end
  end

The variant itself is nil by default, but can be set in before filters, like
so:

  class ApplicationController < ActionController::Base
    before_action do
      if request.user_agent =~ /iPad/
        request.variant = :tablet
      end
    end
  end

This is modeled loosely on custom mime types, but it's specifically not
intended to be used together. If you're going to make a custom mime type,
you don't need a variant. Variants are for variations on a single mime
types.
2013-12-04 00:13:16 +01:00
grosser
149e3cd376 fix respond_to without blocks not working if one of the blocks is all 2013-02-24 11:47:20 -05:00
Xavier Noria
5850f16935 removes the RJS template handler 2011-04-13 13:23:18 +02:00
David Heinemeier Hansson
42d35472b2 Please do remember
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7633 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
2007-09-25 16:40:56 +00:00
David Heinemeier Hansson
2a6f8c99da Doh, forgot this file
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7631 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
2007-09-25 16:30:38 +00:00
David Heinemeier Hansson
06dd4b3166 Better failing tests
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7630 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
2007-09-25 15:09:21 +00:00
David Heinemeier Hansson
55a9c86e62 Added failing tests for iphone
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7629 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
2007-09-25 14:57:15 +00:00
David Heinemeier Hansson
0d99423727 Fixed that default layouts did not take the format into account #9564 [lifofifo]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7514 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
2007-09-18 23:10:34 +00:00
Jeremy Kemper
40860e9852 Missed svn add from [6856]. References #8174.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6857 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
2007-05-26 03:18:57 +00:00
Rick Olson
e0f8342676 Change default respond_to templates for xml and rjs formats. [Rick]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6507 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
2007-04-08 17:16:36 +00:00
David Heinemeier Hansson
cc6e8ae57a Removed XML argument style for respond_to, so type.xml(object.to_xml) no longer works -- it wasnt worth the exception
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3944 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
2006-03-18 21:17:14 +00:00
Jamis Buck
b2122159b1 fix broken respond_to test
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3934 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
2006-03-18 17:15:22 +00:00
David Heinemeier Hansson
de660957a5 Added defaults to respond_to [DHH]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3842 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
2006-03-12 03:39:58 +00:00