storefront 0.2.1 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +2 -2
- data/lib/storefront.rb +21 -3
- data/lib/storefront/configuration.rb +154 -0
- data/lib/storefront/dashboard.rb +8 -7
- data/lib/storefront/form.rb +70 -53
- data/lib/storefront/form/base.rb +50 -0
- data/lib/storefront/form/builder.rb +124 -0
- data/lib/storefront/form/errors.rb +20 -46
- data/lib/storefront/form/field.rb +102 -0
- data/lib/storefront/form/fieldset.rb +44 -0
- data/lib/storefront/form/hint.rb +34 -0
- data/lib/storefront/form/input.rb +191 -0
- data/lib/storefront/form/inputs/checkbox.rb +12 -0
- data/lib/storefront/form/inputs/date.rb +16 -0
- data/lib/storefront/form/inputs/file.rb +12 -0
- data/lib/storefront/form/inputs/hidden.rb +11 -0
- data/lib/storefront/form/inputs/radio.rb +11 -0
- data/lib/storefront/form/inputs/range.rb +15 -0
- data/lib/storefront/form/inputs/select.rb +68 -0
- data/lib/storefront/form/inputs/string.rb +89 -0
- data/lib/storefront/form/inputs/submit.rb +24 -0
- data/lib/storefront/form/inputs/textarea.rb +19 -0
- data/lib/storefront/form/inputs/value.rb +16 -0
- data/lib/storefront/form/label.rb +35 -0
- data/lib/storefront/helpers/attribute_helper.rb +29 -8
- data/lib/storefront/helpers/body_helper.rb +1 -1
- data/lib/storefront/helpers/cache_helper.rb +2 -2
- data/lib/storefront/helpers/component_helper.rb +34 -19
- data/lib/storefront/helpers/dashboard_helper.rb +9 -17
- data/lib/storefront/helpers/definition_list_helper.rb +82 -14
- data/lib/storefront/helpers/form_helper.rb +7 -2
- data/lib/storefront/helpers/head_helper.rb +2 -2
- data/lib/storefront/helpers/image_helper.rb +1 -25
- data/lib/storefront/helpers/list_helper.rb +120 -32
- data/lib/storefront/helpers/locale_helper.rb +98 -28
- data/lib/storefront/helpers/page_helper.rb +78 -60
- data/lib/storefront/helpers/request_helper.rb +3 -0
- data/lib/storefront/helpers/table_helper.rb +1 -1
- data/lib/storefront/helpers/template_helper.rb +11 -0
- data/lib/storefront/helpers/time_helper.rb +2 -2
- data/lib/storefront/helpers/widget_helper.rb +153 -2
- data/lib/storefront/model_helper.rb +17 -0
- data/lib/storefront/proxies/attribute_proxy.rb +150 -0
- data/lib/storefront/proxies/model_proxy.rb +249 -0
- data/lib/storefront/railtie.rb +4 -2
- data/lib/storefront/table.rb +7 -0
- data/test/form_helper_test.rb +1 -1
- metadata +25 -27
- data/init.rb +0 -1
- data/lib/storefront/form/elements.rb +0 -101
- data/lib/storefront/form/fields.rb +0 -420
- data/lib/storefront/form/hints.rb +0 -18
- data/lib/storefront/form/inputs.rb +0 -258
- data/lib/storefront/form/labels.rb +0 -81
- data/lib/storefront/form/model.rb +0 -84
- data/lib/storefront/microdata/address.rb +0 -7
- data/lib/storefront/microdata/event.rb +0 -13
- data/lib/storefront/microdata/geo.rb +0 -7
- data/lib/storefront/microdata/organization.rb +0 -7
- data/lib/storefront/microdata/person.rb +0 -7
- data/lib/storefront/microformat/event.rb +0 -7
- data/lib/storefront/microformat/person.rb +0 -7
- data/lib/storefront/models/container.rb +0 -0
- data/lib/storefront/models/element.rb +0 -15
- data/lib/storefront/models/form.rb +0 -0
- data/lib/storefront/models/form_element.rb +0 -0
- data/lib/storefront/models/link.rb +0 -0
- data/lib/storefront/models/list.rb +0 -0
- data/lib/storefront/models/list_element.rb +0 -0
- data/lib/storefront/models/table.rb +0 -0
- data/lib/storefront/models/term.rb +0 -0
- data/lib/storefront/models/term_list.rb +0 -0
- data/lib/storefront/models/validation.rb +0 -0
@@ -0,0 +1,249 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module Storefront
|
4
|
+
class ModelProxy
|
5
|
+
class << self
|
6
|
+
def model_names(array)
|
7
|
+
Array(array).flatten.map do |object|
|
8
|
+
case object
|
9
|
+
when ::Class
|
10
|
+
object.ancestor_classes.map { |i| i.name.underscore }
|
11
|
+
when ::String, ::Symbol
|
12
|
+
object
|
13
|
+
else
|
14
|
+
object.class.ancestor_classes.map { |i| i.name.underscore }
|
15
|
+
end
|
16
|
+
end.flatten.compact.uniq
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
attr_reader :object, :parent, :errors, :keys
|
21
|
+
|
22
|
+
def initialize(options = {}, &block)
|
23
|
+
@object = options[:object]
|
24
|
+
@parent = options[:parent]
|
25
|
+
if options[:keys].present?
|
26
|
+
@keys = options[:keys]
|
27
|
+
elsif @object.is_a?(::OpenStruct) && @object.klass.present?
|
28
|
+
@keys = [@object.klass.to_s.underscore]
|
29
|
+
else
|
30
|
+
@keys = [@object.class.name.underscore]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def new_record?
|
35
|
+
@object.respond_to?(:new_record?) && !@object.new_record?
|
36
|
+
end
|
37
|
+
|
38
|
+
def config
|
39
|
+
Storefront.configuration
|
40
|
+
end
|
41
|
+
|
42
|
+
def self_and_ancestor_names
|
43
|
+
@self_and_ancestor_names ||= self.class.model_names(@object)
|
44
|
+
end
|
45
|
+
|
46
|
+
def get(attribute)
|
47
|
+
@object.send(attribute)
|
48
|
+
end
|
49
|
+
|
50
|
+
def validators?
|
51
|
+
@object.class.respond_to?(:validators_on)
|
52
|
+
end
|
53
|
+
|
54
|
+
def validators_on(attribute)
|
55
|
+
@object.class.validators_on(attribute)
|
56
|
+
end
|
57
|
+
|
58
|
+
def validation_message(attribute, key, options = {})
|
59
|
+
@object.errors.generate_message(attribute, key, options)
|
60
|
+
end
|
61
|
+
|
62
|
+
def errors_on?(attribute, options = {})
|
63
|
+
@object.respond_to?(:errors) ? @object.errors[attribute].present? : false
|
64
|
+
end
|
65
|
+
|
66
|
+
def default_input_type(method, options = {}) #:nodoc:
|
67
|
+
if column = column_for(method)
|
68
|
+
# Special cases where the column type doesn't map to an input method.
|
69
|
+
case column.type
|
70
|
+
when :string
|
71
|
+
return :password if method.to_s =~ /password/
|
72
|
+
return :country if method.to_s =~ /country$/
|
73
|
+
return :time_zone if method.to_s =~ /time_zone/
|
74
|
+
return :email if method.to_s =~ /email/
|
75
|
+
return :url if method.to_s =~ /^url$|^website$|_url$/
|
76
|
+
return :phone if method.to_s =~ /(phone|fax)/
|
77
|
+
return :search if method.to_s =~ /^search$/
|
78
|
+
when :integer
|
79
|
+
return :select if reflection_for(method)
|
80
|
+
return :numeric
|
81
|
+
when :float, :decimal
|
82
|
+
return :numeric
|
83
|
+
when :timestamp
|
84
|
+
return :datetime
|
85
|
+
end
|
86
|
+
|
87
|
+
# Try look for hints in options hash. Quite common senario: Enum keys stored as string in the database.
|
88
|
+
return :select if column.type == :string && options.key?(:collection)
|
89
|
+
# Try 3: Assume the input name will be the same as the column type (e.g. string_input).
|
90
|
+
return column.type
|
91
|
+
else
|
92
|
+
if @object
|
93
|
+
return :select if reflection_for(method)
|
94
|
+
|
95
|
+
return :file if is_file?(method, options)
|
96
|
+
end
|
97
|
+
|
98
|
+
return :select if options.key?(:collection)
|
99
|
+
return :password if method.to_s =~ /password/
|
100
|
+
return :string
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def is_file?(method, options = {})
|
105
|
+
@files ||= {}
|
106
|
+
@files[method] ||= (options[:as].present? && options[:as] == :file) || begin
|
107
|
+
file = @object.send(method) if @object && @object.respond_to?(method)
|
108
|
+
file && file_methods.any?{|m| file.respond_to?(m)}
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def file_methods
|
113
|
+
[:file?, :public_filename, :filename]
|
114
|
+
end
|
115
|
+
|
116
|
+
def errors_for(name)
|
117
|
+
return @object.errors[name] if errors_on?(name)
|
118
|
+
end
|
119
|
+
|
120
|
+
def humanized_attribute_name(method) #:nodoc:
|
121
|
+
if @object && @object.class.respond_to?(:human_attribute_name)
|
122
|
+
@object.class.human_attribute_name(method.to_s)
|
123
|
+
else
|
124
|
+
method.to_s.send(config.label_method)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def default(attribute)
|
129
|
+
if @object.respond_to?(attribute)
|
130
|
+
result = case macro_for(attribute)
|
131
|
+
when :belongs_to, :has_one
|
132
|
+
@object.send(attribute) || @object.send("build_#{attribute}")
|
133
|
+
when :has_many
|
134
|
+
@object.send(attribute.to_s.pluralize).build
|
135
|
+
else
|
136
|
+
@object.send(attribute)
|
137
|
+
end
|
138
|
+
result
|
139
|
+
elsif @object.is_a?(::OpenStruct)
|
140
|
+
result = ::OpenStruct.new
|
141
|
+
result.klass = attribute.to_s.camelize
|
142
|
+
@object.send("#{attribute}=", result)
|
143
|
+
result
|
144
|
+
else
|
145
|
+
nil
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
# If an association method is passed in (f.input :author) try to find the
|
150
|
+
# reflection object.
|
151
|
+
#
|
152
|
+
def reflection_for(method) #:nodoc:
|
153
|
+
@object.class.reflect_on_association(method) if @object.class.respond_to?(:reflect_on_association)
|
154
|
+
end
|
155
|
+
|
156
|
+
def macro_for(method)
|
157
|
+
reflection = reflection_for(method)
|
158
|
+
reflection ? reflection.macro : nil
|
159
|
+
end
|
160
|
+
|
161
|
+
# Get a column object for a specified attribute method - if possible.
|
162
|
+
#
|
163
|
+
def column_for(method) #:nodoc:
|
164
|
+
@object.column_for_attribute(method) if @object.respond_to?(:column_for_attribute)
|
165
|
+
end
|
166
|
+
|
167
|
+
def validations_for(method, mode = :active)
|
168
|
+
# ActiveModel?
|
169
|
+
validations = if @object && @object.class.respond_to?(:validators_on)
|
170
|
+
@object.class.validators_on(method)
|
171
|
+
else
|
172
|
+
# ValidationReflection plugin?
|
173
|
+
if @object && @object.class.respond_to?(:reflect_on_validations_for)
|
174
|
+
@object.class.reflect_on_validations_for(method)
|
175
|
+
else
|
176
|
+
[]
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
validations = validations.select do |validation|
|
181
|
+
(validation.options.present? ? options_require_validation?(validation.options) : true)
|
182
|
+
end unless mode == :all
|
183
|
+
|
184
|
+
return validations
|
185
|
+
end
|
186
|
+
|
187
|
+
def get_maxlength_for(method)
|
188
|
+
validation = validations_for(method).find do |validation|
|
189
|
+
(validation.respond_to?(:macro) && validation.macro == :validates_length_of) || # Rails 2 validation
|
190
|
+
(validation.respond_to?(:kind) && validation.kind == :length) # Rails 3 validator
|
191
|
+
end
|
192
|
+
|
193
|
+
if validation
|
194
|
+
validation.options[:maximum] || (validation.options[:within].present? ? validation.options[:within].max : nil)
|
195
|
+
else
|
196
|
+
nil
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
# remove this, it's for old rails
|
201
|
+
def required?(attribute)
|
202
|
+
attribute_sym = attribute.to_s.sub(/_id$/, '').to_sym
|
203
|
+
|
204
|
+
if @object && @object.class.respond_to?(:reflect_on_validations_for)
|
205
|
+
@object.class.reflect_on_validations_for(attribute_sym).any? do |validation|
|
206
|
+
(validation.macro == :validates_presence_of || validation.macro == :validates_inclusion_of) &&
|
207
|
+
validation.name == attribute_sym &&
|
208
|
+
(validation.options.present? ? options_require_validation?(validation.options) : true)
|
209
|
+
end
|
210
|
+
else
|
211
|
+
if @object && @object.class.respond_to?(:validators_on)
|
212
|
+
!@object.class.validators_on(attribute_sym).find{|validator| (validator.kind == :presence || validator.kind == :inclusion) && (validator.options.present? ? options_require_validation?(validator.options) : true)}.nil?
|
213
|
+
else
|
214
|
+
true
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def options_require_validation?(options)
|
220
|
+
allow_blank = options[:allow_blank]
|
221
|
+
return !allow_blank unless allow_blank.nil?
|
222
|
+
if_condition = !options[:if].nil?
|
223
|
+
condition = if_condition ? options[:if] : options[:unless]
|
224
|
+
|
225
|
+
condition = if condition.respond_to?(:call)
|
226
|
+
condition.call(@object)
|
227
|
+
elsif condition.is_a?(::Symbol) && @object.respond_to?(condition)
|
228
|
+
@object.send(condition)
|
229
|
+
else
|
230
|
+
condition
|
231
|
+
end
|
232
|
+
|
233
|
+
if_condition ? !!condition : !condition
|
234
|
+
end
|
235
|
+
|
236
|
+
def default_string_options(method, type)
|
237
|
+
validation_max_limit = get_maxlength_for(method)
|
238
|
+
column = column_for(method)
|
239
|
+
|
240
|
+
if type == :text
|
241
|
+
{:rows => default_text_area_height, :cols => config.default_text_area_width}
|
242
|
+
elsif type == :numeric || column.nil? || !column.respond_to?(:limit) || column.limit.nil?
|
243
|
+
{:maxlength => validation_max_limit, :size => config.default_text_field_size}
|
244
|
+
else
|
245
|
+
{:maxlength => validation_max_limit || column.limit, :size => config.default_text_field_size}
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
data/lib/storefront/railtie.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# https://gist.github.com/af7e572c2dc973add221
|
2
1
|
module Storefront
|
3
2
|
class Railtie < Rails::Railtie
|
4
3
|
initializer "storefront.insert_into_action_view" do
|
@@ -12,16 +11,19 @@ module Storefront
|
|
12
11
|
end
|
13
12
|
|
14
13
|
ActiveSupport.on_load :active_record do
|
15
|
-
|
14
|
+
Object.send :include, Storefront::ModelHelper
|
16
15
|
end
|
17
16
|
|
18
17
|
ActiveSupport.on_load :action_controller do
|
19
18
|
base = "#{File.expand_path(File.dirname(__FILE__))}/helpers"
|
20
19
|
Dir["#{base}/*"].each do |path|
|
21
20
|
next if File.directory?(path) || File.basename(path) =~ /(form|table|dashboard)/
|
21
|
+
# need to do these as traditional helper declarations somehow
|
22
22
|
constant_name = File.basename(path, File.extname(path)).gsub("/", "::").camelize
|
23
23
|
ActionController::Base.send :include, "Storefront::#{constant_name}".constantize
|
24
24
|
end
|
25
|
+
|
26
|
+
ActionController::Base.send :before_filter, :configure_storefront
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
data/lib/storefront/table.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
module Storefront
|
2
2
|
class Table
|
3
|
+
include Storefront::AttributeHelper
|
4
|
+
include Storefront::LocaleHelper
|
5
|
+
include Storefront::TimeHelper
|
6
|
+
|
3
7
|
attr_reader :content, :template, :key
|
4
8
|
|
5
9
|
def initialize(template, *args, &block)
|
@@ -159,6 +163,9 @@ module Storefront
|
|
159
163
|
attributes[:id] ||= id_for(:cell, key, value, @row_index, @cell_index)
|
160
164
|
#attributes[:"aria-describedby"] = @headers[@cell_index]
|
161
165
|
attributes[:headers] = @headers[@cell_index]
|
166
|
+
[:width, :height].each do |size|
|
167
|
+
attributes[size] = pixelate(attributes[size]) unless attributes[size].nil?
|
168
|
+
end
|
162
169
|
template.capture_haml do
|
163
170
|
if block_given?
|
164
171
|
template.haml_tag :td, attributes, &block
|
data/test/form_helper_test.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: storefront
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.2.
|
5
|
+
version: 0.2.7
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Lance Pollard
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-05
|
13
|
+
date: 2011-07-05 00:00:00 Z
|
14
14
|
dependencies: []
|
15
15
|
|
16
16
|
description: Semantic HTML5 for Rails
|
@@ -23,15 +23,27 @@ extra_rdoc_files: []
|
|
23
23
|
|
24
24
|
files:
|
25
25
|
- Rakefile
|
26
|
-
-
|
26
|
+
- lib/storefront/configuration.rb
|
27
27
|
- lib/storefront/dashboard.rb
|
28
|
-
- lib/storefront/form/
|
28
|
+
- lib/storefront/form/base.rb
|
29
|
+
- lib/storefront/form/builder.rb
|
29
30
|
- lib/storefront/form/errors.rb
|
30
|
-
- lib/storefront/form/
|
31
|
-
- lib/storefront/form/
|
32
|
-
- lib/storefront/form/
|
33
|
-
- lib/storefront/form/
|
34
|
-
- lib/storefront/form/
|
31
|
+
- lib/storefront/form/field.rb
|
32
|
+
- lib/storefront/form/fieldset.rb
|
33
|
+
- lib/storefront/form/hint.rb
|
34
|
+
- lib/storefront/form/input.rb
|
35
|
+
- lib/storefront/form/inputs/checkbox.rb
|
36
|
+
- lib/storefront/form/inputs/date.rb
|
37
|
+
- lib/storefront/form/inputs/file.rb
|
38
|
+
- lib/storefront/form/inputs/hidden.rb
|
39
|
+
- lib/storefront/form/inputs/radio.rb
|
40
|
+
- lib/storefront/form/inputs/range.rb
|
41
|
+
- lib/storefront/form/inputs/select.rb
|
42
|
+
- lib/storefront/form/inputs/string.rb
|
43
|
+
- lib/storefront/form/inputs/submit.rb
|
44
|
+
- lib/storefront/form/inputs/textarea.rb
|
45
|
+
- lib/storefront/form/inputs/value.rb
|
46
|
+
- lib/storefront/form/label.rb
|
35
47
|
- lib/storefront/form.rb
|
36
48
|
- lib/storefront/helpers/attribute_helper.rb
|
37
49
|
- lib/storefront/helpers/body_helper.rb
|
@@ -59,29 +71,15 @@ files:
|
|
59
71
|
- lib/storefront/helpers/sidebar_helper.rb
|
60
72
|
- lib/storefront/helpers/system_helper.rb
|
61
73
|
- lib/storefront/helpers/table_helper.rb
|
74
|
+
- lib/storefront/helpers/template_helper.rb
|
62
75
|
- lib/storefront/helpers/time_helper.rb
|
63
76
|
- lib/storefront/helpers/url_helper.rb
|
64
77
|
- lib/storefront/helpers/user_helper.rb
|
65
78
|
- lib/storefront/helpers/widget_helper.rb
|
66
79
|
- lib/storefront/helpers/workflow_helper.rb
|
67
|
-
- lib/storefront/
|
68
|
-
- lib/storefront/
|
69
|
-
- lib/storefront/
|
70
|
-
- lib/storefront/microdata/organization.rb
|
71
|
-
- lib/storefront/microdata/person.rb
|
72
|
-
- lib/storefront/microformat/event.rb
|
73
|
-
- lib/storefront/microformat/person.rb
|
74
|
-
- lib/storefront/models/container.rb
|
75
|
-
- lib/storefront/models/element.rb
|
76
|
-
- lib/storefront/models/form.rb
|
77
|
-
- lib/storefront/models/form_element.rb
|
78
|
-
- lib/storefront/models/link.rb
|
79
|
-
- lib/storefront/models/list.rb
|
80
|
-
- lib/storefront/models/list_element.rb
|
81
|
-
- lib/storefront/models/table.rb
|
82
|
-
- lib/storefront/models/term.rb
|
83
|
-
- lib/storefront/models/term_list.rb
|
84
|
-
- lib/storefront/models/validation.rb
|
80
|
+
- lib/storefront/model_helper.rb
|
81
|
+
- lib/storefront/proxies/attribute_proxy.rb
|
82
|
+
- lib/storefront/proxies/model_proxy.rb
|
85
83
|
- lib/storefront/railtie.rb
|
86
84
|
- lib/storefront/table.rb
|
87
85
|
- lib/storefront.rb
|
data/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
File.dirname(__FILE__) + "/rails/init.rb"
|
@@ -1,101 +0,0 @@
|
|
1
|
-
module Storefront
|
2
|
-
class Form
|
3
|
-
module Elements
|
4
|
-
def wrapper_id(attribute, options = {})
|
5
|
-
|
6
|
-
end
|
7
|
-
|
8
|
-
# input :name, :as => :string, :class => "string something", :label_method => x, :value_method => y
|
9
|
-
# disabled, readonly, accesskey, tabindex
|
10
|
-
# button, checkbox, color, date, datetime, datetime-local, email, file, hidden, image, month, number, password, radio, range , reset, search, submit, tel, text, time, url, week
|
11
|
-
def input(attribute, options = {}, &block)
|
12
|
-
# aria-required=true
|
13
|
-
|
14
|
-
options[:required] = required?(attribute) unless options.has_key?(:required)
|
15
|
-
options[:as] ||= default_input_type(attribute, options)
|
16
|
-
|
17
|
-
html_class = [
|
18
|
-
options[:required] ? "required" : "optional",
|
19
|
-
errors_on?(attribute, options) ? "error" : nil
|
20
|
-
].compact.uniq
|
21
|
-
|
22
|
-
# input
|
23
|
-
input_attributes = {}
|
24
|
-
if options[:input_html].present?
|
25
|
-
options[:input_html].each do |key, value|
|
26
|
-
input_attributes[key] = value
|
27
|
-
end
|
28
|
-
end
|
29
|
-
input_attributes[:class] = (html_class << (options.delete(:class) || options[:as]).to_s).compact.join(" ")
|
30
|
-
input_attributes[:id] ||= input_id(attribute)
|
31
|
-
|
32
|
-
input_attributes[:name] ||= input_name(attribute, options)
|
33
|
-
input_attributes[:value] ||= input_value(attribute, options.delete(:value))
|
34
|
-
input_attributes[:tabindex] = @tabindex
|
35
|
-
|
36
|
-
@tabindex = @tabindex + 1
|
37
|
-
access_key = input_attributes.delete(:accesskey) || access_key_for(attribute)
|
38
|
-
input_attributes[:accesskey] = access_key
|
39
|
-
#input_attributes = {
|
40
|
-
# :input_attributes => input_attributes,
|
41
|
-
# :include_blank => options.delete(:include_blank)
|
42
|
-
#}
|
43
|
-
|
44
|
-
# label
|
45
|
-
unless options[:label] == false
|
46
|
-
label_attributes = options.delete(:label_html) || {}
|
47
|
-
label_attributes[:for] ||= input_attributes[:id]
|
48
|
-
label_attributes[:id] ||= input_id(attribute, "label")
|
49
|
-
label_attributes[:class] = "label"
|
50
|
-
label_attributes[:value] = localized_string(attribute, options[:label], :label)
|
51
|
-
label_attributes[:value] = humanized_attribute_name(attribute) if label_attributes[:value].blank?
|
52
|
-
else
|
53
|
-
label_attributes = false
|
54
|
-
end
|
55
|
-
|
56
|
-
# wrapper
|
57
|
-
wrapper_attributes = options.delete(:wrapper_attributes) || {}
|
58
|
-
wrapper_attributes[:class] = (html_class << wrapper_attributes[:class]).compact.join(" ")
|
59
|
-
wrapper_attributes[:id] ||= input_id(attribute, "field")
|
60
|
-
|
61
|
-
# hint
|
62
|
-
#return if options[:hint].blank? or options[:hint].kind_of? Hash
|
63
|
-
hint_class = options[:hint_class]# || default_hint_class
|
64
|
-
hint_attributes = options.delete(:hint_html) || {}
|
65
|
-
hint_attributes[:class] = "hint inline-hints"
|
66
|
-
hint_attributes[:value] = localized_string(attribute, options[:hint], :hint)
|
67
|
-
|
68
|
-
# error
|
69
|
-
error_attributes = options.delete(:error_html) || {}
|
70
|
-
error_attributes[:class] = "error"
|
71
|
-
|
72
|
-
elements = []
|
73
|
-
if options[:as] == :hidden
|
74
|
-
elements << :input
|
75
|
-
else
|
76
|
-
if label_attributes
|
77
|
-
elements << :label
|
78
|
-
end
|
79
|
-
elements = elements.concat [:input, :hints, :errors]
|
80
|
-
end
|
81
|
-
|
82
|
-
options[:input_attributes] = input_attributes
|
83
|
-
options[:label_attributes] = label_attributes
|
84
|
-
options[:hint_attributes] = hint_attributes
|
85
|
-
options[:error_attributes] = error_attributes
|
86
|
-
|
87
|
-
template.capture_haml do
|
88
|
-
template.haml_tag :li, wrapper_attributes do
|
89
|
-
result = elements.map do |element|
|
90
|
-
send("#{element}_for", attribute, options)
|
91
|
-
#if element == :input && block_given?
|
92
|
-
# yield
|
93
|
-
#end
|
94
|
-
end.join
|
95
|
-
template.haml_concat result.gsub(/\n$/, "")
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|