form_helper_css 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in form_helper_css.gemspec
4
+ gemspec
data/MIT-LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2006 Markus Koller
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
data/README ADDED
@@ -0,0 +1,43 @@
1
+ = form_helper_css
2
+
3
+ == Description
4
+
5
+ This plugin enhances the default tag helpers to automatically add CSS classes
6
+ to form elements. It's similar to the <tt>enhanced_form_tag_helper</tt> plugin,
7
+ but takes a different approach by directly intercepting the <tt>tag</tt> and
8
+ <tt>content_tag</tt> methods, and should therefore work in all situations where
9
+ form elements are created, especially the <tt>FormHelper</tt> and more exotic
10
+ ones like <tt>button_to</tt>.
11
+
12
+ The following elements are enhanced:
13
+
14
+ * <tt><input></tt> tags get their type as class name
15
+ * submit and reset buttons additionally get the class name _button_
16
+ * password fields additionally get the class name _text_
17
+ * <tt><textarea></tt> tags get the class name _text_
18
+ * <tt><select></tt> and <tt><button></tt> tags are not enhanced
19
+
20
+ If any helper options already specify a class, nothing will be changed. If you
21
+ don't want a class to be added, pass <tt>:class => nil</tt>.
22
+
23
+ There is a single option which can be set in the following manner:
24
+
25
+ ActionView::Helpers::TagHelper::FORM_HELPER_CSS_OPTIONS.merge!(:append => true)
26
+
27
+ If set to true, then even if a class is specified, the magical classes will be appended to the output.
28
+
29
+ == License
30
+
31
+ The <tt>form_helper_css</tt> plugin is released under the MIT license.
32
+
33
+ == Author
34
+
35
+ Philip Hallstrom <philip at pjkh dot com>
36
+
37
+ == Original Author
38
+
39
+ Markus Koller <toupeira at gmx dot ch>
40
+
41
+ http://snafu.diarrhea.ch
42
+
43
+ 24 December 2006
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+ require 'rdoc/task'
5
+
6
+ desc 'Default: run unit tests.'
7
+ task :default => :test
8
+
9
+ desc 'Test the form_helper_css plugin.'
10
+ Rake::TestTask.new(:test) do |t|
11
+ t.libs << 'lib'
12
+ t.pattern = 'test/**/*_test.rb'
13
+ t.verbose = true
14
+ end
15
+
16
+ desc 'Generate documentation for the form_helper_css plugin.'
17
+ Rake::RDocTask.new(:rdoc) do |rdoc|
18
+ rdoc.rdoc_dir = 'rdoc'
19
+ rdoc.title = 'FormHelperCss'
20
+ rdoc.options << '--line-numbers' << '--inline-source'
21
+ rdoc.rdoc_files.include('README')
22
+ rdoc.rdoc_files.include('lib/**/*.rb')
23
+ end
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "form_helper_css/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "form_helper_css"
7
+ s.version = FormHelperCss::VERSION
8
+ s.authors = ["Philip Hallstrom"]
9
+ s.email = ["philip at pjkh dot com"]
10
+ s.homepage = "https://github.com/phallstrom/form_helper_css"
11
+ s.summary = "enhances the default tag helpers to automatically add CSS classes to form elements"
12
+ s.description = "This plugin enhances the default tag helpers to automatically add CSS classes
13
+ to form elements. It's similar to the enhanced_form_tag_helper plugin,
14
+ but takes a different approach by directly intercepting the tag and
15
+ content_tag methods, and should therefore work in all situations where
16
+ form elements are created, especially the <tt>FormHelper</tt> and more exotic
17
+ ones like button_to."
18
+
19
+ s.rubyforge_project = "form_helper_css"
20
+
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ["lib"]
25
+
26
+ # specify any dependencies here; for example:
27
+ s.add_development_dependency "rake"
28
+ # s.add_runtime_dependency "rest-client"
29
+ end
@@ -0,0 +1,51 @@
1
+ # $Id$
2
+
3
+ module ActionView
4
+ module Helpers
5
+ module TagHelper
6
+
7
+ FORM_HELPER_CSS_OPTIONS = {:append => false}
8
+
9
+ def css_options_for_tag(name, options={})
10
+ name = name.to_sym
11
+ options = options.stringify_keys
12
+ if FORM_HELPER_CSS_OPTIONS[:append] == false && options.has_key?('class')
13
+ return options
14
+ elsif name == :input and options['type']
15
+ return options if (options['type'] == 'hidden')
16
+ if FORM_HELPER_CSS_OPTIONS[:append] && options['class']
17
+ options['class'] << ' ' + options['type'].to_s.dup
18
+ else
19
+ options['class'] = options['type'].to_s.dup
20
+ end
21
+ options['class'] << ' button' if ['submit', 'reset'].include? options['type']
22
+ options['class'] << ' text' if options['type'] == 'password'
23
+ elsif name == :textarea
24
+ if FORM_HELPER_CSS_OPTIONS[:append] && options['class']
25
+ options['class'] << ' text'
26
+ else
27
+ options['class'] = 'text'
28
+ end
29
+ end
30
+ if options['class']
31
+ options['class'] = options['class'].to_s.strip.split(/\s+/).uniq.join(' ') # de-dup the class list
32
+ end
33
+ options
34
+ end
35
+
36
+ def tag_with_css(name, options=nil, open=false, escape=true)
37
+ tag_without_css(name, css_options_for_tag(name, options || {}), open, escape)
38
+ end
39
+ alias_method_chain :tag, :css
40
+
41
+ def content_tag_string_with_css(name, content, options, escape=true)
42
+ content_tag_string_without_css(name, content, css_options_for_tag(name, options || {}), escape)
43
+ end
44
+ alias_method_chain :content_tag_string, :css
45
+ end
46
+
47
+ class InstanceTag
48
+ alias_method :tag_without_error_wrapping, :tag_with_css
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,3 @@
1
+ module FormHelperCss
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,2 @@
1
+ require "form_helper_css/version"
2
+ require "form_helper_css/form_helper_css"
@@ -0,0 +1,117 @@
1
+ # $Id$
2
+
3
+ require 'rubygems'
4
+ require 'test/unit'
5
+ require 'action_controller'
6
+ require 'form_helper_css'
7
+
8
+ class FormHelperCssTest < Test::Unit::TestCase
9
+ include ActionView::Helpers::TagHelper
10
+ include ActionView::Helpers::UrlHelper
11
+ include ActionView::Helpers::FormTagHelper
12
+ include ActionView::Helpers::FormHelper
13
+
14
+ def setup
15
+ ActionView::Helpers::TagHelper::FORM_HELPER_CSS_OPTIONS.merge!(:append => false)
16
+ end
17
+
18
+ def test_tag_helper
19
+ assert_equal '<br />', tag(:br)
20
+ assert_equal '<p></p>', content_tag(:p, '')
21
+ assert_equal '<input type="text" />', tag(:input, :type => 'text', :class => nil)
22
+ assert_equal '<textarea></textarea>', content_tag(:textarea, '', :class => nil)
23
+ end
24
+
25
+ def test_url_helper
26
+ assert_match 'class="submit button"', button_to('button', '/')
27
+ end
28
+
29
+ def test_form_tag_helper
30
+ assert_match 'class="checkbox"', check_box_tag('checkbox')
31
+ assert_match 'class="file"', file_field_tag('file')
32
+ assert_no_match /class=".+"/, hidden_field_tag('hidden')
33
+ assert_match 'class="password text"', password_field_tag('password')
34
+ assert_match 'class="radio"', radio_button_tag('radio', 'value')
35
+ assert_match 'class="submit button"', submit_tag('submit')
36
+ assert_match 'class="reset button"', submit_tag('reset', :type => 'reset')
37
+ assert_match 'class="button"', submit_tag('submit', :type => 'button')
38
+ assert_match 'class="text"', text_area_tag('text')
39
+ assert_match 'class="text"', text_field_tag('text')
40
+ end
41
+
42
+ def test_form_tag_helper_with_class
43
+ assert_match 'class="foo"', check_box_tag('checkbox', 'value', false, :class => 'foo')
44
+ assert_match 'class="foo"', file_field_tag('file', :class => 'foo')
45
+ assert_match 'class="foo"', hidden_field_tag('hidden', 1, :class => 'foo')
46
+ assert_match 'class="foo"', password_field_tag('password', nil, :class => 'foo')
47
+ assert_match 'class="foo"', radio_button_tag('radio', 'value', false, :class => 'foo')
48
+ assert_match 'class="foo"', submit_tag('submit', :class => 'foo')
49
+ assert_match 'class="foo"', submit_tag('reset', :type => 'reset', :class => 'foo')
50
+ assert_match 'class="foo"', submit_tag('submit', :type => 'button', :class => 'foo')
51
+ assert_match 'class="foo"', text_area_tag('text', nil, :class => 'foo')
52
+ assert_match 'class="foo"', text_field_tag('text', nil, :class => 'foo')
53
+ end
54
+
55
+ def test_form_tag_helper_with_class_and_append
56
+ ActionView::Helpers::TagHelper::FORM_HELPER_CSS_OPTIONS.merge!(:append => true)
57
+ assert_match 'class="foo checkbox"', check_box_tag('checkbox', 'value', false, :class => 'foo')
58
+ assert_match 'class="foo file"', file_field_tag('file', :class => 'foo')
59
+ assert_match 'class="foo"', hidden_field_tag('hidden', 1, :class => 'foo')
60
+ assert_match 'class="foo password text"', password_field_tag('password', nil, :class => 'foo')
61
+ assert_match 'class="foo radio"', radio_button_tag('radio', 'value', false, :class => 'foo')
62
+ assert_match 'class="foo submit button"', submit_tag('submit', :class => 'foo')
63
+ assert_match 'class="foo reset button"', submit_tag('reset', :type => 'reset', :class => 'foo')
64
+ assert_match 'class="foo button"', submit_tag('submit', :type => 'button', :class => 'foo')
65
+ assert_match 'class="foo text"', text_area_tag('text', nil, :class => 'foo')
66
+ assert_match 'class="foo text"', text_field_tag('text', nil, :class => 'foo')
67
+ end
68
+
69
+
70
+ def test_form_helper
71
+ assert_match 'class="checkbox"', check_box(:object, :field)
72
+ assert_match 'class="file"', file_field(:object, :field)
73
+ assert_no_match /class=".+"/, hidden_field(:object, :field)
74
+ assert_match 'class="password text"', password_field(:object, :field)
75
+ assert_match '', radio_button(:object, :field, 'value')
76
+ assert_match 'class="text"', text_area(:object, :field)
77
+ assert_match 'class="text"', text_field(:object, :field)
78
+ end
79
+
80
+ def test_form_helper_with_class
81
+ assert_match 'class="foo"', check_box(:object, :field, :class => 'foo')
82
+ assert_match 'class="foo"', file_field(:object, :field, :class => 'foo')
83
+ assert_match 'class="foo"', hidden_field(:object, :field, :class => 'foo')
84
+ assert_match 'class="foo"', password_field(:object, :field, :class => 'foo')
85
+ assert_match 'class="foo"', radio_button(:object, :field, 'value', :class => 'foo')
86
+ assert_match 'class="foo"', text_area(:object, :field, :class => 'foo')
87
+ assert_match 'class="foo"', text_field(:object, :field, :class => 'foo')
88
+ end
89
+
90
+ def test_form_helper_with_class_and_append
91
+ ActionView::Helpers::TagHelper::FORM_HELPER_CSS_OPTIONS.merge!(:append => true)
92
+ assert_match 'class="foo checkbox"', check_box(:object, :field, :class => 'foo')
93
+ assert_match 'class="foo file"', file_field(:object, :field, :class => 'foo')
94
+ assert_match 'class="foo"', hidden_field(:object, :field, :class => 'foo')
95
+ assert_match 'class="foo password text"', password_field(:object, :field, :class => 'foo')
96
+ assert_match 'class="foo radio"', radio_button(:object, :field, 'value', :class => 'foo')
97
+ assert_match 'class="foo text"', text_area(:object, :field, :class => 'foo')
98
+ assert_match 'class="foo text"', text_field(:object, :field, :class => 'foo')
99
+ end
100
+
101
+ def test_form_helper_with_duplicate_classes_and_append
102
+ ActionView::Helpers::TagHelper::FORM_HELPER_CSS_OPTIONS.merge!(:append => true)
103
+ assert_match 'class="foo bar checkbox"', check_box(:object, :field, :class => 'foo bar foo')
104
+ assert_match 'class="foo bar file"', file_field(:object, :field, :class => 'foo bar foo')
105
+ assert_match 'class="foo bar foo"', hidden_field(:object, :field, :class => 'foo bar foo')
106
+ assert_match 'class="foo bar password text"', password_field(:object, :field, :class => 'foo bar foo')
107
+ assert_match 'class="foo bar radio"', radio_button(:object, :field, 'value', :class => 'foo bar foo')
108
+ assert_match 'class="foo bar text"', text_area(:object, :field, :class => 'foo bar foo')
109
+ assert_match 'class="foo bar text"', text_field(:object, :field, :class => 'foo bar foo')
110
+ end
111
+
112
+
113
+ protected
114
+ def protect_against_forgery?
115
+ false
116
+ end
117
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: form_helper_css
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Philip Hallstrom
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &70261521563800 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70261521563800
25
+ description: ! 'This plugin enhances the default tag helpers to automatically add
26
+ CSS classes
27
+
28
+ to form elements. It''s similar to the enhanced_form_tag_helper plugin,
29
+
30
+ but takes a different approach by directly intercepting the tag and
31
+
32
+ content_tag methods, and should therefore work in all situations where
33
+
34
+ form elements are created, especially the <tt>FormHelper</tt> and more exotic
35
+
36
+ ones like button_to.'
37
+ email:
38
+ - philip at pjkh dot com
39
+ executables: []
40
+ extensions: []
41
+ extra_rdoc_files: []
42
+ files:
43
+ - .gitignore
44
+ - Gemfile
45
+ - MIT-LICENSE
46
+ - README
47
+ - Rakefile
48
+ - form_helper_css.gemspec
49
+ - lib/form_helper_css.rb
50
+ - lib/form_helper_css/form_helper_css.rb
51
+ - lib/form_helper_css/version.rb
52
+ - test/form_helper_css_test.rb
53
+ homepage: https://github.com/phallstrom/form_helper_css
54
+ licenses: []
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubyforge_project: form_helper_css
73
+ rubygems_version: 1.8.10
74
+ signing_key:
75
+ specification_version: 3
76
+ summary: enhances the default tag helpers to automatically add CSS classes to form
77
+ elements
78
+ test_files:
79
+ - test/form_helper_css_test.rb