Gem for Rails 4.1.x applications that use the excellent Zurb Foundation framework.
So far it includes:
-
A custom FormBuilder that generates a form using the Foundation framework. It replaces the current
form_for
so you don't have to change your Rails code. Error messages are properly displayed. -
A
display_flash_messages
helper method that uses Zurb Foundation Alerts UI.
- Only Rails 4.1 and Foundation 4 and 5 are fully supported
- Some features may work with Foundation 3 and older, but results may vary, and markup which exists only for those versions will be gradually removed
- Legacy branches exist for Rails 3 and 4.0 (see the rails3 and rails4.0 branches). These are not actively supported, and fixes are not retroactively applied, but pull requests are welcomed.
A classic devise sign up view will look like this:
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= f.email_field :email %>
<%= f.password_field :password %>
<%= f.password_field :password_confirmation %>
<%= f.submit %>
<% end %>
Form | Form with errors |
---|---|
Add this line to your application's Gemfile:
gem 'zurb-foundation'
gem 'foundation_rails_helper'
And then execute:
$ bundle
To get access to display_flash_messages
in your views, add
include FoundationRailsHelper::FlashHelper
to app/helpers/application_helper.rb
Form_for wraps the standard rails form_for helper and adds a 'nice' and 'custom' class by default.
<%= form_for @user do |f| %>
...
<% end %>
generates:
<form accept-charset="UTF-8" action="/users" class="nice custom" id="new_user" method="post">
...
Override the default class like so:
<%= form_for(@user, html: {class: 'mean'}) do |f| %>
...
Field helpers add a label element and an input of the proper type.
f.text_field :name
generates:
<label for="user_email">Name</label>
<input class="medium input-text" id="user_name" name="user[name]" type="text">
The 'input-text' class will always be added to the input element, but the 'medium' class can be replaced.
f.text_field :name, class: 'large'
generates:
<input class="large input-text" ... >
Prevent the generation of a label:
f.text_field :name, label: false
Change the label text and add a class on the label:
f.text_field :name, label: 'Nombre', label_options: { class: 'large' }
If the hint option is specified
f.text_field :name, hint: "I'm a text field"
an additional span element will be added after the input element:
<span class="hint">I'm a text field</span>
The 'submit' helper wraps the rails helper and sets the class attribute to "small radius button" by default.
f.submit
generates:
<input class="small radius button" name="commit" type="submit" value="Create User">
Specify the class option to override the default classes.
On error,
f.email_field :email
generates:
<label class=" error" for="user_email">Email</label>
<input class="medium input-text error" id="user_email" name="user[email]" type="email" value="">
<small class="error medium input-text error">can't be blank</small>
The class attribute of the 'small' element will mirror the class attribute of the 'input' element.
If the html_safe_errors: true
option is specified on a field, then any HTML you may have embedded in a custom error string will be displayed with the html_safe option.
- Handle more UI components
- Make something for ajax forms
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
Sébastien Gruhier (http://xilinus.com, http://v2.maptimize.com) - MIT LICENSE - 2012