king_views 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +84 -0
- data/Rakefile +31 -0
- data/VERSION +1 -0
- data/init.rb +3 -0
- data/king_form/MIT-LICENSE +20 -0
- data/king_form/README.rdoc +64 -0
- data/king_form/Rakefile +23 -0
- data/king_form/init.rb +1 -0
- data/king_form/lib/king_form.rb +19 -0
- data/king_form/lib/king_form/builder/base.rb +238 -0
- data/king_form/lib/king_form/builder/definition_list.rb +119 -0
- data/king_form/lib/king_form/builder/form_fields.rb +333 -0
- data/king_form/lib/king_form/builder/form_fields_overrides.rb +146 -0
- data/king_form/lib/king_form/builder/labeled.rb +116 -0
- data/king_form/lib/king_form/helper.rb +97 -0
- data/king_form/lib/king_form/nested_form_helper.rb +61 -0
- data/king_form/lib/king_form/overrides.rb +25 -0
- data/king_form/tasks/king_forms_tasks.rake +4 -0
- data/king_form/test/king_forms_test.rb +8 -0
- data/king_form/test/test_helper.rb +3 -0
- data/king_format/MIT-LICENSE +20 -0
- data/king_format/README.rdoc +20 -0
- data/king_format/Rakefile +23 -0
- data/king_format/init.rb +1 -0
- data/king_format/lib/helpers/date_helper.rb +25 -0
- data/king_format/lib/helpers/formatting_helper.rb +108 -0
- data/king_format/lib/helpers/money_helper.rb +63 -0
- data/king_format/lib/king_format.rb +14 -0
- data/king_format/lib/model_mixins/has_date_fields.rb +42 -0
- data/king_format/lib/model_mixins/has_money_fields.rb +42 -0
- data/king_format/lib/model_mixins/has_percent_fields.rb +34 -0
- data/king_format/tasks/king_format_tasks.rake +4 -0
- data/king_format/test/king_format_test.rb +8 -0
- data/king_format/test/test_helper.rb +3 -0
- data/king_list/MIT-LICENSE +20 -0
- data/king_list/README.rdoc +21 -0
- data/king_list/Rakefile +23 -0
- data/king_list/init.rb +1 -0
- data/king_list/lib/king_list.rb +18 -0
- data/king_list/lib/king_list/app_helper.rb +30 -0
- data/king_list/lib/king_list/builder/show.rb +71 -0
- data/king_list/lib/king_list/builder/table.rb +166 -0
- data/king_list/lib/king_list/list_helper.rb +329 -0
- data/king_list/lib/king_list/overrides.rb +6 -0
- data/king_list/tasks/king_list_tasks.rake +4 -0
- data/king_list/test/king_list_test.rb +8 -0
- data/king_list/test/test_helper.rb +3 -0
- data/king_views.gemspec +85 -0
- metadata +110 -0
@@ -0,0 +1,146 @@
|
|
1
|
+
module KingForm
|
2
|
+
module Builder
|
3
|
+
##########################################################################
|
4
|
+
# Modified core html tag methods.
|
5
|
+
module FormFieldsOverrides
|
6
|
+
# private
|
7
|
+
def text_field(method, opts = {})
|
8
|
+
opts[:class] = (opts[:class] || '') + ' text'
|
9
|
+
info_text = opts.delete(:info)
|
10
|
+
super(method, opts) + info_tag(info_text || method)
|
11
|
+
end
|
12
|
+
|
13
|
+
def text_area(method, opts = {})
|
14
|
+
opts[:size] ||= "20x3" # sized needed for valid html
|
15
|
+
info_text = opts.delete(:info)
|
16
|
+
super(method, opts) + info_tag(info_text || method)
|
17
|
+
end
|
18
|
+
|
19
|
+
def check_box(method, opts = {})
|
20
|
+
info_text = opts.delete(:info)
|
21
|
+
super(method, opts) + info_tag(info_text || method)
|
22
|
+
end
|
23
|
+
|
24
|
+
def radio_button(method, tag_value, opts = {})
|
25
|
+
info_text = opts.delete(:info)
|
26
|
+
super(method, tag_value, opts) + info_tag(info_text || method)
|
27
|
+
end
|
28
|
+
|
29
|
+
def select(method, choices, opts = {}, html_opts = {})
|
30
|
+
info_text = opts.delete(:info)
|
31
|
+
super(method, choices || [], opts, html_opts) + info_tag(info_text || method)
|
32
|
+
end
|
33
|
+
|
34
|
+
def date_select(method, opts = {}, html_opts = {})
|
35
|
+
info_text = opts.delete(:info)
|
36
|
+
super(method, opts, html_opts) + info_tag(info_text || method)
|
37
|
+
end
|
38
|
+
|
39
|
+
def password_field(method, opts = {})
|
40
|
+
info_text = opts.delete(:info)
|
41
|
+
super(method, opts) + info_tag(info_text || method)
|
42
|
+
end
|
43
|
+
|
44
|
+
def file_field(method, opts = {})
|
45
|
+
info_text = opts.delete(:info)
|
46
|
+
super(method, opts) + info_tag(info_text || method)
|
47
|
+
end
|
48
|
+
|
49
|
+
###########
|
50
|
+
|
51
|
+
def text_field_tag(name, value = nil, opts = {})
|
52
|
+
opts[:class] = (opts[:class] || '') + ' text'
|
53
|
+
name, infos, opts = build_id_name_info(name, opts)
|
54
|
+
@template.text_field_tag(name, value, opts) + infos
|
55
|
+
end
|
56
|
+
|
57
|
+
# Create a hidden field tag and construct its fieldname (object[name]) from
|
58
|
+
# the current object
|
59
|
+
# When the name is beeing passed in as string its just taken like it is
|
60
|
+
# ==== Parameter
|
61
|
+
# same as hidden_field_tag in Rails plus:
|
62
|
+
# name<String>:: The name is passed right thought to hidden_field_tag
|
63
|
+
# name<Symbol>:: The name is put together with current object => object[name]
|
64
|
+
def hidden_field_tag(name, value = nil, opts = {})
|
65
|
+
name, infos, opts = build_id_name_info(name, opts)
|
66
|
+
@template.hidden_field_tag(name, value, opts) # obviously no infos
|
67
|
+
end
|
68
|
+
|
69
|
+
def password_field_tag(name = "password", value = nil, opts = {})
|
70
|
+
opts[:class] = (opts[:class] || '') + ' text'
|
71
|
+
name, infos, opts = build_id_name_info(name, opts)
|
72
|
+
@template.password_field_tag(name, value, opts) + infos
|
73
|
+
end
|
74
|
+
|
75
|
+
# Overide the native filefield tag
|
76
|
+
# ==== Parameter
|
77
|
+
# name<(Symbol,String)>:: The name for the field. when given as symbol, the
|
78
|
+
# name is constructed for the current object oject[name] and an id is build.
|
79
|
+
# If passed as string, the name is taken right away and no auto id is created
|
80
|
+
# opts<Hash{Symbol=>String}>:: All file_field opts +
|
81
|
+
# :info which is taken for the help text
|
82
|
+
def file_field_tag(name, opts = {})
|
83
|
+
opts[:class] ||= nil
|
84
|
+
name, infos, opts = build_id_name_info(name, opts)
|
85
|
+
@template.file_field_tag(name, opts) + infos
|
86
|
+
end
|
87
|
+
|
88
|
+
def text_area_tag(name, value, opts = {})
|
89
|
+
opts[:size] ||= "20x3" # sized needed for valid html
|
90
|
+
name, infos, opts = build_id_name_info(name, opts)
|
91
|
+
@template.text_area_tag(name, value, opts) + infos
|
92
|
+
end
|
93
|
+
|
94
|
+
def check_box_tag(name, value = "1", checked = false, opts = {})
|
95
|
+
name, infos, opts = build_id_name_info(name, opts)
|
96
|
+
@template.check_box_tag(name, value, checked, opts) + infos
|
97
|
+
end
|
98
|
+
|
99
|
+
# Overriden rails select_tag
|
100
|
+
# Constructs the fieldname
|
101
|
+
# ==== Example
|
102
|
+
# - dl_fields_for @user do |u|
|
103
|
+
# = u.selection :project_id, :choices => @projects, :title => "Projects"
|
104
|
+
# = u.selection "user[custom_field]", :choices => @some_choices
|
105
|
+
#
|
106
|
+
# ==== Parameter
|
107
|
+
# name<Symbol, String>:: If symbol: the name and id is auto-constructed object[field_name]
|
108
|
+
# and the info tag is build from translation see info_tag.
|
109
|
+
# If String: The name is taken as it is, no id and info is auto-created.
|
110
|
+
# They must be passed in as opts[:id], opts[:info]
|
111
|
+
# option_tags<String>:: The opts as html for the select
|
112
|
+
# opts<Hash{Symbol=>String}>:: Rails select_tag opts + :info
|
113
|
+
def select_tag(name, option_tags = nil, opts = {})
|
114
|
+
name, infos, opts = build_id_name_info(name, opts)
|
115
|
+
@template.select_tag(name, option_tags, opts) + infos
|
116
|
+
end
|
117
|
+
|
118
|
+
# Builds name, opts, infos according to the given name type
|
119
|
+
# ==== Parameter
|
120
|
+
# name<Symbol>::
|
121
|
+
# - id for an element is build => client_name_id
|
122
|
+
# - info tag is looked up in I18n => see KingForm::Builder::Base info_tag
|
123
|
+
# - fieldname is assumed to belong to an object => client[name]
|
124
|
+
# name<String>::
|
125
|
+
# - id for an element must be present in opts[:id]
|
126
|
+
# - info tag is looked up in I18n when opts[:info] is a symbol, else string is taken #KingForm::Builder::Base info_tag
|
127
|
+
# - fieldname is assumed to belong to an object => client[name]
|
128
|
+
#
|
129
|
+
def build_id_name_info(name, opts)
|
130
|
+
if name.is_a?(Symbol)
|
131
|
+
opts[:id] ||= build_id(name)
|
132
|
+
# build info tag, cause info_tag(:symbol) is looking into I18n transl
|
133
|
+
infos = info_tag( opts.delete(:info) || name)
|
134
|
+
#now set real name as string
|
135
|
+
name = "#{@object_name}[#{name}]"
|
136
|
+
else
|
137
|
+
opts[:id] ||= nil
|
138
|
+
info_text = opts.delete(:info)
|
139
|
+
infos = info_text ? info_tag( info_text) : ''
|
140
|
+
end
|
141
|
+
[name, infos, opts ]
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
module KingForm
|
2
|
+
module Builder
|
3
|
+
# Create forms with a fieldset->div->label->input structure
|
4
|
+
# ==== Example haml
|
5
|
+
# - labeled_form_for(current_object) do |f|
|
6
|
+
# - f.section _('legend.user.details') do
|
7
|
+
# = f.text :first_name
|
8
|
+
# = f.text :last_name
|
9
|
+
#
|
10
|
+
# => #<form ..>
|
11
|
+
# <fieldset>
|
12
|
+
# <legend>User Details</legend>
|
13
|
+
# <div>
|
14
|
+
# <label>Firstname</label>
|
15
|
+
# <input type='text' value='Otto'/>
|
16
|
+
# </div>
|
17
|
+
# <div>
|
18
|
+
# <label>Lastname</label>
|
19
|
+
# <input type='text' value='Bismark'/>
|
20
|
+
# </div>
|
21
|
+
# </fieldset>
|
22
|
+
# </form>
|
23
|
+
#
|
24
|
+
class Labeled < KingForm::Builder::Base
|
25
|
+
# Create a section(fieldset) within a form
|
26
|
+
# A section is a group of related object information with name/value pairs,
|
27
|
+
# like all dates of an object or the users name fields(last/first/title/nick).
|
28
|
+
#
|
29
|
+
# A section html consists of a fieldset > legend > div > label > input
|
30
|
+
# The dt holds the title/description (DefinitionType) of the current field
|
31
|
+
# The dd holds the value.
|
32
|
+
# This wrapup is preferred over ul/li or other listing types because of
|
33
|
+
# the semantic meaning of the html
|
34
|
+
#
|
35
|
+
#===Example haml
|
36
|
+
# - f.section _('legend.user.details') do
|
37
|
+
# = f.text :first_name
|
38
|
+
# = f.text :last_name
|
39
|
+
#
|
40
|
+
# => # <fieldset>
|
41
|
+
# <legend>User Details</legend>
|
42
|
+
# <div>
|
43
|
+
# <label>Firstname</label>
|
44
|
+
# <input type='text' value='Otto'/>
|
45
|
+
# </div>
|
46
|
+
# <div>
|
47
|
+
# <label>Lastname</label>
|
48
|
+
# <input type='text' value='Bismark'/>
|
49
|
+
# </div> #
|
50
|
+
# </fieldset>
|
51
|
+
#
|
52
|
+
def section(title = nil, options = {}, &block)
|
53
|
+
raise ArgumentError if title && !title.is_a?(String)
|
54
|
+
@template.haml_tag :fieldset, options do
|
55
|
+
@template.haml_tag :legend, title unless title.blank?
|
56
|
+
@template.haml_concat( @template.capture_haml(&block) )
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Show multiple inputs in one line (div tag)
|
61
|
+
# === Example haml
|
62
|
+
# - f.bundle _('Gender and Title') do
|
63
|
+
# = f.selection :gender
|
64
|
+
# = f.text :title, :medium
|
65
|
+
# ==== Parameter
|
66
|
+
# title<String>:: The name used as label
|
67
|
+
def bundle(title = nil, options = {}, &block)
|
68
|
+
@config[:bundle] = true
|
69
|
+
@bundle_counter = 0
|
70
|
+
tags = @template.capture(&block)
|
71
|
+
@config[:bundle] = false
|
72
|
+
@template.concat( tag_wrapper(title, tags, options) )
|
73
|
+
end
|
74
|
+
|
75
|
+
# Add titles/labels to input tag and wrap in div
|
76
|
+
#
|
77
|
+
# ==== Parameter
|
78
|
+
# fieldname_or_title<String Symbol>:: The title for the field
|
79
|
+
# tags<String>:: html tags as string
|
80
|
+
# options<Hash{Symbold=>String}>:: options for the surrounding html
|
81
|
+
# ==== Options
|
82
|
+
# :label => options for label
|
83
|
+
# :div => options for surrounding div
|
84
|
+
# :align => alignment in table
|
85
|
+
def tag_wrapper(fieldname_or_title, tags, options = {})
|
86
|
+
if @config[:bundle]
|
87
|
+
@bundle_counter += 1
|
88
|
+
tags
|
89
|
+
elsif @config[:table] # called from "table" => build a table cell (td)
|
90
|
+
# Only in first row: Build column header
|
91
|
+
if @config[:row_number] == 1
|
92
|
+
@config[:column_header].push :title => build_title(fieldname_or_title),
|
93
|
+
:options => { :align => options[:align] || 'left' }
|
94
|
+
end
|
95
|
+
@template.capture_haml do
|
96
|
+
@template.haml_tag(:td, tags, options)
|
97
|
+
end
|
98
|
+
else
|
99
|
+
out = if tags.match /checkbox/ # wrap only checkbox tag into to label, so it is clickable
|
100
|
+
label_tag(fieldname_or_title + tags, options[:label])
|
101
|
+
else # other tags stay outside label tag, because they don't like to be wrapped sometimes
|
102
|
+
label_tag(fieldname_or_title, options[:label]) + tags
|
103
|
+
end
|
104
|
+
"<div> #{out}</div>"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Build a label tag
|
109
|
+
#TODO enhance with option <label for="fieldname">
|
110
|
+
def label_tag(fieldname_or_title, options = {})
|
111
|
+
fieldname_or_title.blank? ? "" : content_tag(:label, build_title(fieldname_or_title), options)
|
112
|
+
end
|
113
|
+
|
114
|
+
end # labeled class
|
115
|
+
end #module
|
116
|
+
end#module
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module KingForm
|
2
|
+
module Helper
|
3
|
+
|
4
|
+
# renders a form with the # KingForm::Builder::DefinitionList
|
5
|
+
# It allows to devide the form into sections(fieldsets) where each contains
|
6
|
+
# a definition list with dl/dd blocks for each label/field
|
7
|
+
#
|
8
|
+
# Read on to find out more about the available tags/fieldtypes
|
9
|
+
#
|
10
|
+
# === Example haml
|
11
|
+
# -dl_form_for(:client, :url => object_url, :html => { :method => :put }) do |f|
|
12
|
+
# - f.section 'Client Details' do
|
13
|
+
# = f.text :number
|
14
|
+
# - f.bundle 'Gender/Title' do
|
15
|
+
# = f.selection :gender
|
16
|
+
# = f.text :title, :class => 'medium'
|
17
|
+
# = f.text :position
|
18
|
+
# = f.text :last_name
|
19
|
+
# = f.date :birthday
|
20
|
+
# # =><form .. method..> <fieldset>
|
21
|
+
# <legend>Client Details</legend>
|
22
|
+
# <dl>
|
23
|
+
# <dt>Number</dt>
|
24
|
+
# <dd><input name=client[number] type=text></dd>
|
25
|
+
# ....
|
26
|
+
# </dl>
|
27
|
+
# </fieldset></form>
|
28
|
+
#
|
29
|
+
def dl_form_for(record_or_name_or_array, *args, &proc)
|
30
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
31
|
+
options[:builder] = KingForm::Builder::DefinitionList
|
32
|
+
form_for(record_or_name_or_array, *(args << options), &proc)
|
33
|
+
end
|
34
|
+
|
35
|
+
def dl_fields_for(record_or_name_or_array, *args, &block)
|
36
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
37
|
+
options[:builder] = KingForm::Builder::DefinitionList
|
38
|
+
fields_for(record_or_name_or_array, *(args << options), &block)
|
39
|
+
end
|
40
|
+
|
41
|
+
# renders a form with the KingForm::Builder::Labeled
|
42
|
+
# It allows to devide the form into sections(fieldsets) where each contains
|
43
|
+
# a definition list with dl/dd blocks for each label/field
|
44
|
+
#
|
45
|
+
# Read on to find out more about the avalable tags/fieldtypes
|
46
|
+
#
|
47
|
+
# === Example haml
|
48
|
+
# -labeled_form_for(:client, :url => object_url, :html => { :method => :put }) do |f|
|
49
|
+
# - f.section 'Client Details' do
|
50
|
+
# = f.text :number
|
51
|
+
# - f.bundle 'Gender/Title' do
|
52
|
+
# = f.text :gender
|
53
|
+
# = f.text :title, :class => 'medium'
|
54
|
+
# # =><form ...>
|
55
|
+
# <fieldset>
|
56
|
+
# <legend>Client Details</legend>
|
57
|
+
# <div>
|
58
|
+
# <label>Number </label>
|
59
|
+
# <input name=client[number] type=text>
|
60
|
+
# </div>
|
61
|
+
# <div>
|
62
|
+
# <label>Gender/Title</label>
|
63
|
+
# <input type='text' name='client[gender]' value='male'/>
|
64
|
+
# <input type='text' name='client[title]' value='Prof.'/>
|
65
|
+
# </div>
|
66
|
+
# </fieldset>
|
67
|
+
# </form>
|
68
|
+
#
|
69
|
+
def labeled_form_for(record_or_name_or_array, *args, &proc)
|
70
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
71
|
+
options[:builder] = KingForm::Builder::Labeled
|
72
|
+
form_for(record_or_name_or_array, *(args << options), &proc)
|
73
|
+
end
|
74
|
+
|
75
|
+
def labeled_fields_for(record_or_name_or_array, *args, &block)
|
76
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
77
|
+
options[:builder] = KingForm::Builder::Labeled
|
78
|
+
fields_for(record_or_name_or_array, *(args << options), &block)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Returns an array for a given settings which has comma-seperated values.
|
82
|
+
# In the view those are used for select boxes
|
83
|
+
# Accepts an optional block to change the array elements
|
84
|
+
def make_select(values, &block)
|
85
|
+
return nil unless values
|
86
|
+
raise ArgumentError unless values.class == String
|
87
|
+
|
88
|
+
result = []
|
89
|
+
values.split(',').each do |s|
|
90
|
+
s.strip!
|
91
|
+
s = yield(s) if block_given?
|
92
|
+
result.push(s)
|
93
|
+
end
|
94
|
+
result
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module KingForm
|
2
|
+
# was attribute_fu with changes from: http://github.com/odadata/attribute_fu/commit/a0402d12f2d380d8decc82bdfbcc5d8a0a185524
|
3
|
+
# Methods for building forms that contain fields for associated models.
|
4
|
+
module NestedFormHelper
|
5
|
+
|
6
|
+
# Renders the form for nested objects defined via activerecord accepts_nested_attributes_for
|
7
|
+
#
|
8
|
+
# The associated argument can be either an object, or a collection of objects to be rendered.
|
9
|
+
#
|
10
|
+
# An options hash can be specified to override the default behaviors.
|
11
|
+
#
|
12
|
+
# Options are:
|
13
|
+
# * <tt>:new</tt> - specify a certain number of new elements to be added to the form. Useful for displaying a
|
14
|
+
# few blank elements at the bottom.
|
15
|
+
# * <tt>:name</tt> - override the name of the association, both for the field names, and the name of the partial
|
16
|
+
# * <tt>:partial</tt> - specify the name of the partial in which the form is located.
|
17
|
+
# * <tt>:fields_for</tt> - specify additional options for the fields_for_associated call
|
18
|
+
# * <tt>:locals</tt> - specify additional variables to be passed along to the partial
|
19
|
+
# * <tt>:render</tt> - specify additional options to be passed along to the render :partial call
|
20
|
+
# * <tt>:skip</tt> - array of elements which will be skipped, usefull if you already rendered a partial in the same form with parts of the data.
|
21
|
+
# eg. obj.addresses, render the firt address on top of form, render all the other addresses at the bottom
|
22
|
+
#
|
23
|
+
def render_nested_form(associated, opts = {})
|
24
|
+
associated = associated.is_a?(Array) ? associated : [associated] # preserve association proxy if this is one
|
25
|
+
opts.symbolize_keys!
|
26
|
+
(opts[:new] - associated.select(&:new_record?).length).times { associated.build } if opts[:new]
|
27
|
+
|
28
|
+
unless associated.empty?
|
29
|
+
name = extract_option_or_class_name(opts, :name, associated.first)
|
30
|
+
partial = opts[:partial] || name
|
31
|
+
if opts[:skip] # objects to be skipped are present
|
32
|
+
skip_el = opts[:skip].is_a?(Array) ? opts[:skip] : [opts[:skip]]
|
33
|
+
assoc_el = []
|
34
|
+
associated.each { |el| assoc_el << el unless skip_el.include?(el) }
|
35
|
+
else # normal procedure
|
36
|
+
assoc_el = associated
|
37
|
+
end
|
38
|
+
|
39
|
+
output = assoc_el.map do |element|
|
40
|
+
fields_for(association_name(name), element, (opts[:fields_for] || {}).merge(:name => name)) do |f|
|
41
|
+
|
42
|
+
@template.render( {:partial => "#{partial}",
|
43
|
+
#The current objects classname is always present in partial so:
|
44
|
+
#when Object is LineItem locals has :line_item => object
|
45
|
+
:locals => {name.to_sym => f.object, :f => f}.merge( opts[:locals] || {} )
|
46
|
+
}.merge( opts[:render] || {} ) )
|
47
|
+
end
|
48
|
+
end
|
49
|
+
output.join
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
def association_name(class_name)
|
55
|
+
@object.respond_to?("#{class_name}_attributes=") ? class_name : class_name.pluralize
|
56
|
+
end
|
57
|
+
def extract_option_or_class_name(hash, option, object)
|
58
|
+
(hash.delete(option) || object.class.name.split('::').last.underscore).to_s
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# override rails extra_tags_for_form method wich creates hidden special form
|
2
|
+
# fields -> method and auth_token
|
3
|
+
# so they don't use inline styles anymore
|
4
|
+
# From:
|
5
|
+
# <div style="margin:0;padding:0"><input name="authenticity_token"
|
6
|
+
# To:
|
7
|
+
# <div><input name="authenticity_token"
|
8
|
+
module ActionView::Helpers::FormTagHelper
|
9
|
+
private
|
10
|
+
# overridden method to kill inline styles
|
11
|
+
# from actionpack-2.1.0/lib/action_view/helpers/form_tag_helper.rb
|
12
|
+
def extra_tags_for_form(html_options)
|
13
|
+
case method = html_options.delete("method").to_s
|
14
|
+
when /^get$/i # must be case-insentive, but can't use downcase as might be nil
|
15
|
+
html_options["method"] = "get"
|
16
|
+
''
|
17
|
+
when /^post$/i, "", nil
|
18
|
+
html_options["method"] = "post"
|
19
|
+
protect_against_forgery? ? content_tag(:div, token_tag) : ''
|
20
|
+
else
|
21
|
+
html_options["method"] = "post"
|
22
|
+
content_tag(:div, tag(:input, :type => "hidden", :name => "_method", :value => method) + token_tag)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|