jquery-ui-form 0.1.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/.document +5 -0
- data/.rvmrc +1 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +109 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +25 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/jquery-ui-form.gemspec +149 -0
- data/lib/generators/jquery_ui_form/install/install_generator.rb +18 -0
- data/lib/generators/templates/jquery-ui-form.js +46 -0
- data/lib/generators/templates/jquery-ui-form.rb +5 -0
- data/lib/generators/templates/jquery-ui-form.sass +115 -0
- data/lib/jquery-ui-form.rb +1 -0
- data/lib/jquery_ui_form.rb +7 -0
- data/lib/jquery_ui_form/form_builder.rb +43 -0
- data/lib/jquery_ui_form/helpers.rb +17 -0
- data/lib/jquery_ui_form/helpers/button_helper.rb +39 -0
- data/lib/jquery_ui_form/helpers/error_helper.rb +39 -0
- data/lib/jquery_ui_form/helpers/form_helper.rb +19 -0
- data/lib/jquery_ui_form/helpers/input_helper.rb +145 -0
- data/lib/jquery_ui_form/helpers/label_helper.rb +33 -0
- data/lib/jquery_ui_form/helpers/wrapper_helper.rb +41 -0
- data/lib/jquery_ui_form/inputs.rb +20 -0
- data/lib/jquery_ui_form/inputs/boolean_input.rb +16 -0
- data/lib/jquery_ui_form/inputs/check_boxes_input.rb +75 -0
- data/lib/jquery_ui_form/inputs/date_input.rb +24 -0
- data/lib/jquery_ui_form/inputs/email_input.rb +12 -0
- data/lib/jquery_ui_form/inputs/file_input.rb +12 -0
- data/lib/jquery_ui_form/inputs/hidden_input.rb +11 -0
- data/lib/jquery_ui_form/inputs/number_input.rb +12 -0
- data/lib/jquery_ui_form/inputs/password_input.rb +11 -0
- data/lib/jquery_ui_form/inputs/phone_input.rb +12 -0
- data/lib/jquery_ui_form/inputs/radio_input.rb +33 -0
- data/lib/jquery_ui_form/inputs/range_input.rb +12 -0
- data/lib/jquery_ui_form/inputs/search_input.rb +12 -0
- data/lib/jquery_ui_form/inputs/select_input.rb +19 -0
- data/lib/jquery_ui_form/inputs/string_input.rb +11 -0
- data/lib/jquery_ui_form/inputs/text_input.rb +13 -0
- data/lib/jquery_ui_form/inputs/url_input.rb +12 -0
- data/lib/jquery_ui_form/railtie.rb +14 -0
- data/spec/form_helper_spec.rb +22 -0
- data/spec/helpers/button_helper_spec.rb +54 -0
- data/spec/helpers/error_helper_spec.rb +81 -0
- data/spec/helpers/input_helper_spec.rb +18 -0
- data/spec/helpers/label_helper_spec.rb +31 -0
- data/spec/helpers/wrapper_helper_spec.rb +73 -0
- data/spec/inputs/boolean_input_spec.rb +25 -0
- data/spec/inputs/check_boxes_input_spec.rb +39 -0
- data/spec/inputs/date_input_spec.rb +47 -0
- data/spec/inputs/email_input_spec.rb +24 -0
- data/spec/inputs/file_input_spec.rb +24 -0
- data/spec/inputs/hidden_input_spec.rb +24 -0
- data/spec/inputs/number_input_spec.rb +24 -0
- data/spec/inputs/password_input_spec.rb +23 -0
- data/spec/inputs/phone_input_spec.rb +24 -0
- data/spec/inputs/radio_input_spec.rb +39 -0
- data/spec/inputs/range_input_spec.rb +24 -0
- data/spec/inputs/search_input_spec.rb +24 -0
- data/spec/inputs/select_input_spec.rb +28 -0
- data/spec/inputs/string_input_spec.rb +24 -0
- data/spec/inputs/text_input_spec.rb +24 -0
- data/spec/inputs/url_input_spec.rb +24 -0
- data/spec/spec_helper.rb +63 -0
- metadata +272 -0
@@ -0,0 +1,33 @@
|
|
1
|
+
module JqueryUiForm
|
2
|
+
module Helpers
|
3
|
+
module LabelHelper
|
4
|
+
# include ActionView::Helpers::FormHelper
|
5
|
+
|
6
|
+
def label(method, text = nil, options = {})
|
7
|
+
|
8
|
+
text, options = label_text(method, text, options)
|
9
|
+
super(method,"#{text}:".html_safe, options)
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
def label_text(method, text, options={})
|
14
|
+
if text.is_a?(Hash)
|
15
|
+
options.merge!(text)
|
16
|
+
text = nil
|
17
|
+
end
|
18
|
+
text = options.delete(:label) if text.blank?
|
19
|
+
if text.blank?
|
20
|
+
if use_i18n
|
21
|
+
text = I18n.t("#{@object_name.to_s.downcase}.#{method.to_s.downcase}",:scope => [:activerecord, :attributes])
|
22
|
+
else
|
23
|
+
text = method.to_s.humanize
|
24
|
+
end
|
25
|
+
end
|
26
|
+
if options.delete(:required)
|
27
|
+
text << (required_string.is_a?(Proc) ? required_string.call : required_string)
|
28
|
+
end
|
29
|
+
[text, options]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module JqueryUiForm
|
2
|
+
module Helpers
|
3
|
+
module WrapperHelper
|
4
|
+
|
5
|
+
def wrapper(*args, &block)
|
6
|
+
html_options = args.extract_options!
|
7
|
+
html_options[:class] = "#{html_options[:class]} ui-form-#{html_options.delete(:mode) || 'wrapper'}"
|
8
|
+
template.content_tag(:div, html_options) do
|
9
|
+
yield
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def fieldset(*args, &block)
|
14
|
+
legend = ""
|
15
|
+
legend = args.shift unless args.first.is_a?(Hash)
|
16
|
+
html_options = args.extract_options!
|
17
|
+
html_options[:class] = "#{html_options[:class]} ui-fieldset"
|
18
|
+
template.content_tag(:fieldset,html_options) do
|
19
|
+
template.concat(template.content_tag(:legend, legend, html_options[:html_legend])) unless legend.blank?
|
20
|
+
yield
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def column(options = {}, &block)
|
25
|
+
options[:mode] = "column"
|
26
|
+
wrapper(options, &block)
|
27
|
+
end
|
28
|
+
|
29
|
+
def row(options = {}, &block)
|
30
|
+
options[:mode] = "row"
|
31
|
+
wrapper(options, &block)
|
32
|
+
end
|
33
|
+
|
34
|
+
def buttons(options = {}, &block)
|
35
|
+
options[:mode] = "buttons"
|
36
|
+
wrapper(options, &block)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module JqueryUiForm
|
2
|
+
module Inputs
|
3
|
+
autoload :StringInput, 'jquery_ui_form/inputs/string_input'
|
4
|
+
autoload :PasswordInput, 'jquery_ui_form/inputs/password_input'
|
5
|
+
autoload :BooleanInput, 'jquery_ui_form/inputs/boolean_input'
|
6
|
+
autoload :SelectInput, 'jquery_ui_form/inputs/select_input'
|
7
|
+
autoload :RadioInput, 'jquery_ui_form/inputs/radio_input'
|
8
|
+
autoload :CheckBoxesInput, 'jquery_ui_form/inputs/check_boxes_input'
|
9
|
+
autoload :TextInput, 'jquery_ui_form/inputs/text_input'
|
10
|
+
autoload :HiddenInput, 'jquery_ui_form/inputs/hidden_input'
|
11
|
+
autoload :EmailInput, 'jquery_ui_form/inputs/email_input'
|
12
|
+
autoload :PhoneInput, 'jquery_ui_form/inputs/phone_input'
|
13
|
+
autoload :UrlInput, 'jquery_ui_form/inputs/url_input'
|
14
|
+
autoload :SearchInput, 'jquery_ui_form/inputs/search_input'
|
15
|
+
autoload :NumberInput, 'jquery_ui_form/inputs/number_input'
|
16
|
+
autoload :RangeInput, 'jquery_ui_form/inputs/range_input'
|
17
|
+
autoload :FileInput, 'jquery_ui_form/inputs/file_input'
|
18
|
+
autoload :DateInput, 'jquery_ui_form/inputs/date_input'
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module JqueryUiForm
|
2
|
+
module Inputs
|
3
|
+
module BooleanInput
|
4
|
+
|
5
|
+
def boolean_input(method, options = {})
|
6
|
+
basic_input_helper(:check_box, :boolean, method, options)
|
7
|
+
end
|
8
|
+
|
9
|
+
def check_box(method, options = {})
|
10
|
+
checked_value = options.delete(:checked_value) || "1"
|
11
|
+
unchecked_value = options.delete(:unchecked_value) || "0"
|
12
|
+
super(method, options,checked_value, unchecked_value)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module JqueryUiForm
|
2
|
+
module Inputs
|
3
|
+
module CheckBoxesInput
|
4
|
+
|
5
|
+
def check_boxes_input(method, options = {})
|
6
|
+
# radio_button(method, tag_value, options)
|
7
|
+
legend, options = label_text(method, options)
|
8
|
+
current_values = current_values_from_association(method)
|
9
|
+
collection = options.delete(:collection) || collection_from_association(method)
|
10
|
+
label_options = options.delete(:html_label) || {}
|
11
|
+
|
12
|
+
options[:class] = options[:class].gsub('ui-check_boxes-input','ui-boolean-input')
|
13
|
+
buttonset = options.delete(:buttonset) || false
|
14
|
+
|
15
|
+
fieldset_options = {}
|
16
|
+
fieldset_options[:class] = "to-buttonset" if buttonset
|
17
|
+
|
18
|
+
|
19
|
+
label_method = options.delete(:label_method) || :name
|
20
|
+
value_method = options.delete(:value_method) || :id
|
21
|
+
|
22
|
+
output = fieldset(legend.html_safe, fieldset_options) do
|
23
|
+
template.concat(inline_hint(options.delete(:hint)))
|
24
|
+
template.concat(inline_error(method))
|
25
|
+
collection.each do |row|
|
26
|
+
label_text = label_from_association(row,label_method)
|
27
|
+
value_text = value_from_association(row,value_method)
|
28
|
+
checked = current_values.include?(value_text.to_s)
|
29
|
+
if buttonset
|
30
|
+
template.concat(template.check_box_tag("#{@object_name}[#{method}][]", value_text, checked, options.merge(:id => name_to_id("#{@object_name}_#{method}_#{value_text}"))))
|
31
|
+
template.concat(label(name_to_id("#{method}_#{value_text}"), label_text, label_options))
|
32
|
+
else
|
33
|
+
template.concat(column do
|
34
|
+
template.concat(label(name_to_id("#{method}_#{value_text}"), label_text, label_options))
|
35
|
+
template.concat(template.check_box_tag("#{@object_name}[#{method}][]", value_text, checked, options.merge(:id => name_to_id("#{@object_name}_#{method}_#{value_text}"))))
|
36
|
+
end)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def label_from_association(row, label_method)
|
43
|
+
return row[0] unless row.respond_to?(label_method)
|
44
|
+
return row[0] if row.is_a?(Array)
|
45
|
+
row.send(label_method)
|
46
|
+
end
|
47
|
+
|
48
|
+
def value_from_association(row, value_method)
|
49
|
+
return row[1] unless row.respond_to?(value_method)
|
50
|
+
return row[1] if row.is_a?(Array)
|
51
|
+
row.send(value_method)
|
52
|
+
end
|
53
|
+
|
54
|
+
def current_values_from_association(method)
|
55
|
+
return [] unless @object.send(method).is_a?(Array)
|
56
|
+
@object.send(method).map{|row| row.id.to_s}
|
57
|
+
end
|
58
|
+
|
59
|
+
def collection_from_association(method)
|
60
|
+
return [] unless @object.send(method).is_a?(Array)
|
61
|
+
if target = @object.send(method).first
|
62
|
+
target.class.all
|
63
|
+
else
|
64
|
+
begin
|
65
|
+
collection = method.to_s.classify.constantize
|
66
|
+
collection.all
|
67
|
+
rescue
|
68
|
+
return []
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module JqueryUiForm
|
2
|
+
module Inputs
|
3
|
+
module DateInput
|
4
|
+
|
5
|
+
def date_input(method, options = {})
|
6
|
+
# options[:type] = "date"
|
7
|
+
options["data-calendar"] = options["data-calendar"].to_json if options["data-calendar"].is_a?(Hash)
|
8
|
+
basic_input_helper(:date_field, :date, method, options)
|
9
|
+
end
|
10
|
+
|
11
|
+
def datetime_input(method, options = {})
|
12
|
+
# options[:type] = "datetime"
|
13
|
+
options["data-calendar"] = options["data-calendar"].to_json if options["data-calendar"].is_a?(Hash)
|
14
|
+
basic_input_helper(:datetime_field, :datetime, method, options)
|
15
|
+
end
|
16
|
+
|
17
|
+
def time_input(method, options = {})
|
18
|
+
# options[:type] = "time"
|
19
|
+
basic_input_helper(:time_field, :time, method, options)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module JqueryUiForm
|
2
|
+
module Inputs
|
3
|
+
module RadioInput
|
4
|
+
|
5
|
+
def radio_input(method, options = {})
|
6
|
+
# radio_button(method, tag_value, options)
|
7
|
+
legend, options = label_text(method, options)
|
8
|
+
collection = options.delete(:collection)
|
9
|
+
label_options = options.delete(:html_label) || {}
|
10
|
+
label_options[:required] = options.delete(:required)
|
11
|
+
buttonset = options.delete(:buttonset) || false
|
12
|
+
fieldset_options = {}
|
13
|
+
fieldset_options[:class] = "to-buttonset" if buttonset
|
14
|
+
output = fieldset(legend.html_safe, fieldset_options) do
|
15
|
+
template.concat(inline_hint(options.delete(:hint)))
|
16
|
+
template.concat(inline_error(method))
|
17
|
+
collection.each do |row|
|
18
|
+
if buttonset
|
19
|
+
template.concat(radio_button(method, row[1], options.merge(:checked => @object.send(method) == row[1])))
|
20
|
+
template.concat(label(name_to_id("#{method}_#{row[1]}"), row[0], label_options))
|
21
|
+
else
|
22
|
+
template.concat(column do
|
23
|
+
template.concat(label(name_to_id("#{method}_#{row[1]}"), row[0], label_options))
|
24
|
+
template.concat(radio_button(method, row[1], options.merge(:checked => @object.send(method) == row[1])))
|
25
|
+
end)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module JqueryUiForm
|
2
|
+
module Inputs
|
3
|
+
module SelectInput
|
4
|
+
SELECT_OPTIONS = %w(selected include_blank disabled required)
|
5
|
+
def select_input(method, options = {})
|
6
|
+
basic_input_helper(:select, :select, method, options)
|
7
|
+
end
|
8
|
+
|
9
|
+
def select(method, options = {})
|
10
|
+
choices = options.delete(:collection)
|
11
|
+
html_options = options.delete(:html) || {}
|
12
|
+
options.each do |key,value|
|
13
|
+
html_options[key] = options.delete(key) unless SELECT_OPTIONS.include?(key.to_s)
|
14
|
+
end
|
15
|
+
super(method, choices, options, html_options)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module JqueryUiForm
|
2
|
+
# @private
|
3
|
+
class Railtie < Rails::Railtie
|
4
|
+
initializer 'jquery_ui_form.initialize' do
|
5
|
+
ActiveSupport.on_load(:action_view) do
|
6
|
+
include JqueryUiForm::Helpers::FormHelper
|
7
|
+
include JqueryUiForm::Helpers::ErrorHelper
|
8
|
+
# include JqueryUiForm::Helpers::FormRowHelper
|
9
|
+
# include JqueryUiForm::Helpers::LabelHelper
|
10
|
+
end
|
11
|
+
ActionView::Base.field_error_proc = proc { |input, instance| input }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'FormHelper' do
|
4
|
+
|
5
|
+
include RSpec::Rails::HelperExampleGroup
|
6
|
+
|
7
|
+
describe '#jquery_form_for' do
|
8
|
+
|
9
|
+
it 'yields an instance of JqueryUiForm::FormBuilder' do
|
10
|
+
helper.jquery_form_for(:new_post, :url => '/hello') do |builder|
|
11
|
+
builder.class.should == JqueryUiForm::FormBuilder
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'adds a class of "ui-form" to the generated form' do
|
16
|
+
helper.jquery_form_for(:new_post, :url => '/hello') do |builder|
|
17
|
+
end.should have_selector("form.ui-form")
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|