Commit d9cfd63a4e55813770d3360b62a63a3f8c4b6e0a
1 parent
55c936a8
Exists in
master
and in
28 other branches
ActionItem182: mandatory fields in forms must be highlighted
highlight all required fields in noosfero forms
Showing
16 changed files
with
52 additions
and
26 deletions
Show diff stats
app/helpers/forms_helper.rb
... | ... | @@ -96,6 +96,10 @@ module FormsHelper |
96 | 96 | observe_field( state_id, :update => city_id, :function => "new Ajax.Updater(#{city_id.inspect}, #{url_for(:controller => 'search', :action => 'cities').inspect}, {asynchronous:true, evalScripts:true, parameters:'state_id=' + value}); $(#{city_id.inspect}).innerHTML = '<option>#{_('Loading...')}</option>'", :with => 'state_id') |
97 | 97 | end |
98 | 98 | |
99 | + def required(content) | |
100 | + content_tag('span', content, :class => 'required-field') | |
101 | + end | |
102 | + | |
99 | 103 | protected |
100 | 104 | def self.next_id_number |
101 | 105 | if defined? @@id_num | ... | ... |
app/views/account/_signup_form.rhtml
... | ... | @@ -3,20 +3,20 @@ |
3 | 3 | :html => { :help=>_('Fill all this fields to join in this environment. <p/> If you forgot your password, do not create a new account, click on the "<b>I forgot my password!</b>" link. ;-)'), :id => 'profile-data' |
4 | 4 | } do |f| -%> |
5 | 5 | |
6 | -<%= f.text_field :login, | |
7 | - :onchange => 'this.value = convToValidLogin( this.value )' %> | |
6 | +<%= required f.text_field(:login, | |
7 | + :onchange => 'this.value = convToValidLogin( this.value )') %> | |
8 | 8 | <small><%= help %></small> |
9 | 9 | |
10 | -<%= f.text_field :email, | |
11 | - :help => help=_('We\'ll send you an e-mail to validate your registration.') %> | |
10 | +<%= required f.text_field(:email, | |
11 | + :help => help=_('We\'ll send you an e-mail to validate your registration.')) %> | |
12 | 12 | <small><%= help %></small> |
13 | 13 | |
14 | -<%= f.password_field :password, | |
15 | - :help => help=_('Choose a password that you can remember easily.') %> | |
14 | +<%= required f.password_field(:password, | |
15 | + :help => help=_('Choose a password that you can remember easily.')) %> | |
16 | 16 | <small><%= help %></small> |
17 | 17 | |
18 | -<%= f.password_field :password_confirmation, | |
19 | - :help => help=_('To confirm, repeat your password.') %> | |
18 | +<%= required f.password_field(:password_confirmation, | |
19 | + :help => help=_('To confirm, repeat your password.')) %> | |
20 | 20 | <small><%= help %></small> |
21 | 21 | |
22 | 22 | <%= icaptcha_field() %> | ... | ... |
app/views/categories/_form.rhtml
app/views/cms/_event.rhtml
app/views/cms/_folder.rhtml
... | ... | @@ -2,6 +2,6 @@ |
2 | 2 | <%# TODO add Textile help here %> |
3 | 3 | <%= render :file => 'shared/tiny_mce' %> |
4 | 4 | |
5 | -<%= f.text_field('name', :size => '64') %> | |
5 | +<%= required f.text_field('name', :size => '64') %> | |
6 | 6 | |
7 | 7 | <%= labelled_form_field(_('Description:'), text_area(:article, :body, :cols => 64)) %> | ... | ... |
app/views/cms/_rss_feed.rhtml
1 | -<%= f.text_field :name %> | |
1 | +<%= required f.text_field(:name) %> | |
2 | 2 | |
3 | -<%= labelled_form_field(_('Limit of articles'), text_field(:article, :limit)) %> | |
3 | +<%= required labelled_form_field(_('Limit of articles'), text_field(:article, :limit)) %> | |
4 | 4 | |
5 | 5 | <%= labelled_form_field(_('Use as item description:'), select(:article, :feed_item_description, [ [ _('Article abstract'), 'abstract'], [ _('Article body'), 'body']])) %> |
6 | 6 | ... | ... |
app/views/cms/_textile_article.rhtml
app/views/cms/_tiny_mce_article.rhtml
app/views/cms/_uploaded_file.rhtml
1 | -<%= labelled_form_field(_("Select the file you want to upload (max size %s).") % UploadedFile.max_size.to_humanreadable, file_field(:article, :uploaded_data)) %> | |
1 | +<%= required labelled_form_field(_("Select the file you want to upload (max size %s).") % UploadedFile.max_size.to_humanreadable, file_field(:article, :uploaded_data)) %> | |
2 | 2 | |
3 | 3 | <%= labelled_form_field(_('Describe this file:'), text_area(:article, :abstract)) %> | ... | ... |
app/views/contact/new.rhtml
... | ... | @@ -6,11 +6,11 @@ |
6 | 6 | |
7 | 7 | <%= hidden_field_tag 'contact[target_id]', profile.id %> |
8 | 8 | <%= hidden_field_tag 'contact[requestor_id]', (logged_in? ? current_user.person.id : nil) %> |
9 | - <%= f.text_field :subject %> | |
10 | - <%= f.text_field :email %> | |
9 | + <%= required f.text_field(:subject) %> | |
10 | + <%= required f.text_field(:email) %> | |
11 | 11 | <%= f.text_field :city_and_state %> |
12 | 12 | <%= f.text_field :phone %> |
13 | - <%= f.text_area :message, :rows => 5 %> | |
13 | + <%= required f.text_area(:message, :rows => 5) %> | |
14 | 14 | |
15 | 15 | <%= submit_button(:send, _('Send')) %> |
16 | 16 | ... | ... |
app/views/content_viewer/_comment_form.rhtml
... | ... | @@ -21,8 +21,8 @@ |
21 | 21 | |
22 | 22 | <% unless logged_in? %> |
23 | 23 | |
24 | - <%= labelled_form_field(_('Name'), text_field(:comment, :name)) %> | |
25 | - <%= labelled_form_field(_('e-mail'), text_field(:comment, :email)) %> | |
24 | + <%= required labelled_form_field(_('Name'), text_field(:comment, :name)) %> | |
25 | + <%= required labelled_form_field(_('e-mail'), text_field(:comment, :email)) %> | |
26 | 26 | <%= icaptcha_field() %> |
27 | 27 | |
28 | 28 | <p> |
... | ... | @@ -31,8 +31,8 @@ |
31 | 31 | |
32 | 32 | <% end %> |
33 | 33 | |
34 | - <%= labelled_form_field(_('Title'), text_field(:comment, :title)) %> | |
35 | - <%= labelled_form_field(_('Enter your comment'), text_area(:comment, :body, :rows => 5)) %> | |
34 | + <%= required labelled_form_field(_('Title'), text_field(:comment, :title)) %> | |
35 | + <%= required labelled_form_field(_('Enter your comment'), text_area(:comment, :body, :rows => 5)) %> | |
36 | 36 | <% button_bar do %> |
37 | 37 | <%= submit_button('add', _('Post comment')) %> |
38 | 38 | <% end %> | ... | ... |
app/views/manage_products/_form.rhtml
1 | 1 | <%= error_messages_for :product %> <br/> |
2 | 2 | |
3 | 3 | <% form_for :product, @product, :html => {:multipart => true }, :url => {:action => mode} do |f| %> |
4 | - <%= display_form_field( _('Name:'), f.text_field(:name) ) %> | |
4 | + <%= required display_form_field( _('Name:'), f.text_field(:name) ) %> | |
5 | 5 | <%= display_form_field( _('Price:'), f.text_field(:price) ) %> |
6 | 6 | <%= display_form_field( _('Description:'), f.text_area(:description, :rows => 10) ) %> |
7 | 7 | <% f.fields_for :image_builder, @product.image do |i| %> | ... | ... |
app/views/memberships/new_community.rhtml
... | ... | @@ -6,7 +6,7 @@ |
6 | 6 | |
7 | 7 | <% labelled_form_for :community, @community do |f| %> |
8 | 8 | |
9 | - <%= f.text_field :name, :style => 'width: 100%' %> | |
9 | + <%= required f.text_field(:name, :style => 'width: 100%') %> | |
10 | 10 | |
11 | 11 | <%= f.text_area :description, :style => 'width: 100%; height: 150px;' %> |
12 | 12 | ... | ... |
app/views/role/_form.rhtml
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | |
3 | 3 | <% labelled_form_for :role, role, :url => (mode == :edit) ? {:action => 'update', :id => role} : {:action => 'create'} do |f| %> |
4 | 4 | |
5 | - <%= f.text_field :name %> | |
5 | + <%= required f.text_field(:name) %> | |
6 | 6 | |
7 | 7 | <%= _('Permissions:') %> <br> |
8 | 8 | <% permissions.keys.each do |p| %> | ... | ... |
public/stylesheets/forms.css
... | ... | @@ -0,0 +1,13 @@ |
1 | +require File.dirname(__FILE__) + '/../test_helper' | |
2 | + | |
3 | +class FormsHelperTest < Test::Unit::TestCase | |
4 | + | |
5 | + include FormsHelper | |
6 | + include ActionView::Helpers::TagHelper | |
7 | + | |
8 | + should 'wrapper required fields in <span class=required-field>' do | |
9 | + content = required('<input type=text name=test>') | |
10 | + assert_tag_in_string content, :tag => 'span', :attributes => {:class => 'required-field'} | |
11 | + end | |
12 | + | |
13 | +end | ... | ... |