king_views 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|