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.
Files changed (65) hide show
  1. data/.document +5 -0
  2. data/.rvmrc +1 -0
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +109 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +25 -0
  7. data/Rakefile +53 -0
  8. data/VERSION +1 -0
  9. data/jquery-ui-form.gemspec +149 -0
  10. data/lib/generators/jquery_ui_form/install/install_generator.rb +18 -0
  11. data/lib/generators/templates/jquery-ui-form.js +46 -0
  12. data/lib/generators/templates/jquery-ui-form.rb +5 -0
  13. data/lib/generators/templates/jquery-ui-form.sass +115 -0
  14. data/lib/jquery-ui-form.rb +1 -0
  15. data/lib/jquery_ui_form.rb +7 -0
  16. data/lib/jquery_ui_form/form_builder.rb +43 -0
  17. data/lib/jquery_ui_form/helpers.rb +17 -0
  18. data/lib/jquery_ui_form/helpers/button_helper.rb +39 -0
  19. data/lib/jquery_ui_form/helpers/error_helper.rb +39 -0
  20. data/lib/jquery_ui_form/helpers/form_helper.rb +19 -0
  21. data/lib/jquery_ui_form/helpers/input_helper.rb +145 -0
  22. data/lib/jquery_ui_form/helpers/label_helper.rb +33 -0
  23. data/lib/jquery_ui_form/helpers/wrapper_helper.rb +41 -0
  24. data/lib/jquery_ui_form/inputs.rb +20 -0
  25. data/lib/jquery_ui_form/inputs/boolean_input.rb +16 -0
  26. data/lib/jquery_ui_form/inputs/check_boxes_input.rb +75 -0
  27. data/lib/jquery_ui_form/inputs/date_input.rb +24 -0
  28. data/lib/jquery_ui_form/inputs/email_input.rb +12 -0
  29. data/lib/jquery_ui_form/inputs/file_input.rb +12 -0
  30. data/lib/jquery_ui_form/inputs/hidden_input.rb +11 -0
  31. data/lib/jquery_ui_form/inputs/number_input.rb +12 -0
  32. data/lib/jquery_ui_form/inputs/password_input.rb +11 -0
  33. data/lib/jquery_ui_form/inputs/phone_input.rb +12 -0
  34. data/lib/jquery_ui_form/inputs/radio_input.rb +33 -0
  35. data/lib/jquery_ui_form/inputs/range_input.rb +12 -0
  36. data/lib/jquery_ui_form/inputs/search_input.rb +12 -0
  37. data/lib/jquery_ui_form/inputs/select_input.rb +19 -0
  38. data/lib/jquery_ui_form/inputs/string_input.rb +11 -0
  39. data/lib/jquery_ui_form/inputs/text_input.rb +13 -0
  40. data/lib/jquery_ui_form/inputs/url_input.rb +12 -0
  41. data/lib/jquery_ui_form/railtie.rb +14 -0
  42. data/spec/form_helper_spec.rb +22 -0
  43. data/spec/helpers/button_helper_spec.rb +54 -0
  44. data/spec/helpers/error_helper_spec.rb +81 -0
  45. data/spec/helpers/input_helper_spec.rb +18 -0
  46. data/spec/helpers/label_helper_spec.rb +31 -0
  47. data/spec/helpers/wrapper_helper_spec.rb +73 -0
  48. data/spec/inputs/boolean_input_spec.rb +25 -0
  49. data/spec/inputs/check_boxes_input_spec.rb +39 -0
  50. data/spec/inputs/date_input_spec.rb +47 -0
  51. data/spec/inputs/email_input_spec.rb +24 -0
  52. data/spec/inputs/file_input_spec.rb +24 -0
  53. data/spec/inputs/hidden_input_spec.rb +24 -0
  54. data/spec/inputs/number_input_spec.rb +24 -0
  55. data/spec/inputs/password_input_spec.rb +23 -0
  56. data/spec/inputs/phone_input_spec.rb +24 -0
  57. data/spec/inputs/radio_input_spec.rb +39 -0
  58. data/spec/inputs/range_input_spec.rb +24 -0
  59. data/spec/inputs/search_input_spec.rb +24 -0
  60. data/spec/inputs/select_input_spec.rb +28 -0
  61. data/spec/inputs/string_input_spec.rb +24 -0
  62. data/spec/inputs/text_input_spec.rb +24 -0
  63. data/spec/inputs/url_input_spec.rb +24 -0
  64. data/spec/spec_helper.rb +63 -0
  65. 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,12 @@
1
+ module JqueryUiForm
2
+ module Inputs
3
+ module EmailInput
4
+
5
+ def email_input(method, options = {})
6
+ options[:type] = "email"
7
+ basic_input_helper(:email_field, :email, method, options)
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module JqueryUiForm
2
+ module Inputs
3
+ module FileInput
4
+
5
+ def file_input(method, options = {})
6
+ options[:type] = "file"
7
+ basic_input_helper(:file_field, :file, method, options)
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ module JqueryUiForm
2
+ module Inputs
3
+ module HiddenInput
4
+
5
+ def hidden_input(method, options = {})
6
+ hidden_field(method, options)
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module JqueryUiForm
2
+ module Inputs
3
+ module NumberInput
4
+
5
+ def number_input(method, options = {})
6
+ options[:type] = "number"
7
+ basic_input_helper(:number_field, :number, method, options)
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ module JqueryUiForm
2
+ module Inputs
3
+ module PasswordInput
4
+
5
+ def password_input(method, options = {})
6
+ basic_input_helper(:password_field, :password, method, options)
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module JqueryUiForm
2
+ module Inputs
3
+ module PhoneInput
4
+
5
+ def phone_input(method, options = {})
6
+ options[:type] = "tel"
7
+ basic_input_helper(:phone_field, :phone, method, options)
8
+ end
9
+
10
+ end
11
+ end
12
+ 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,12 @@
1
+ module JqueryUiForm
2
+ module Inputs
3
+ module RangeInput
4
+
5
+ def range_input(method, options = {})
6
+ options[:type] = "range"
7
+ basic_input_helper(:range_field, :range, method, options)
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module JqueryUiForm
2
+ module Inputs
3
+ module SearchInput
4
+
5
+ def search_input(method, options = {})
6
+ options[:type] = "search"
7
+ basic_input_helper(:search_field, :search, method, options)
8
+ end
9
+
10
+ end
11
+ end
12
+ 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,11 @@
1
+ module JqueryUiForm
2
+ module Inputs
3
+ module StringInput
4
+
5
+ def string_input(method, options = {})
6
+ basic_input_helper(:text_field, :string, method, options)
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ module JqueryUiForm
2
+ module Inputs
3
+ module TextInput
4
+
5
+ def text_input(method, options = {})
6
+ options[:rows] ||= 5
7
+ options[:cols] ||= 35
8
+ basic_input_helper(:text_area, :text, method, options)
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ module JqueryUiForm
2
+ module Inputs
3
+ module UrlInput
4
+
5
+ def url_input(method, options = {})
6
+ options[:type] = "url"
7
+ basic_input_helper(:url_field, :url, method, options)
8
+ end
9
+
10
+ end
11
+ end
12
+ 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