youthtree-helpers 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -0
- data/lib/youth_tree/helpers.rb +8 -1
- data/lib/youth_tree/helpers/form_builder.rb +111 -0
- data/lib/youth_tree/locales/formtastic.en.yml +9 -0
- data/youthtree-helpers.gemspec +20 -17
- metadata +28 -12
- data/.gitignore +0 -21
data/Rakefile
CHANGED
@@ -17,6 +17,7 @@ begin
|
|
17
17
|
gem.version = YouthTree::Helpers::VERSION
|
18
18
|
gem.add_dependency "activesupport", "~> 3.0.0.rc"
|
19
19
|
gem.add_dependency "actionpack", "~> 3.0.0.rc"
|
20
|
+
gem.add_dependency "formtastic", "~> 1.2"
|
20
21
|
gem.add_dependency "youthtree-js"
|
21
22
|
gem.add_dependency "youthtree-settings"
|
22
23
|
end
|
data/lib/youth_tree/helpers.rb
CHANGED
@@ -2,7 +2,7 @@ require 'active_support/concern'
|
|
2
2
|
|
3
3
|
module YouthTree
|
4
4
|
module Helpers
|
5
|
-
VERSION = "0.
|
5
|
+
VERSION = "0.2.0".freeze
|
6
6
|
|
7
7
|
extend ActiveSupport::Autoload
|
8
8
|
|
@@ -12,6 +12,7 @@ module YouthTree
|
|
12
12
|
autoload :EmbedHelper
|
13
13
|
autoload :SidebarHelper
|
14
14
|
autoload :UuidTrackerHelper
|
15
|
+
autoload :FormBuilder
|
15
16
|
|
16
17
|
def self.install!
|
17
18
|
ActionView::Base.class_eval do
|
@@ -22,6 +23,7 @@ module YouthTree
|
|
22
23
|
include SidebarHelper
|
23
24
|
include UuidTrackerHelper
|
24
25
|
end
|
26
|
+
FormBuilder.install!
|
25
27
|
end
|
26
28
|
|
27
29
|
if defined?(Rails::Railtie)
|
@@ -29,6 +31,11 @@ module YouthTree
|
|
29
31
|
initializer "youthtree-helpers.setup-helpers" do
|
30
32
|
YouthTree::Helpers.install!
|
31
33
|
end
|
34
|
+
|
35
|
+
initializer "youthtree-helpers.setup-i18n" do
|
36
|
+
config.i18n.load_path += Dir[Pathname(__FILE__).dirname.join("locales", "**", "*.{yml,rb}")]
|
37
|
+
end
|
38
|
+
|
32
39
|
end
|
33
40
|
end
|
34
41
|
|
@@ -0,0 +1,111 @@
|
|
1
|
+
module YouthTree
|
2
|
+
module Helpers
|
3
|
+
class FormBuilder < Formtastic::SemanticFormBuilder
|
4
|
+
|
5
|
+
def self.install!
|
6
|
+
Formtastic::SemanticFormHelper.builder = self
|
7
|
+
self.include_blank_for_select_by_default = true
|
8
|
+
self.i18n_lookups_by_default = true
|
9
|
+
self.required_string = proc { ::Formtastic::I18n.t(:required).html_safe }
|
10
|
+
self.optional_string = proc { ::Formtastic::I18n.t(:optional).html_safe }
|
11
|
+
end
|
12
|
+
|
13
|
+
def submit(value = "Save changes", options = {})
|
14
|
+
@template.content_tag(:button, value, options.reverse_merge(:type => "submit", :id => "#{object_name}_submit"))
|
15
|
+
end
|
16
|
+
|
17
|
+
# Generates a label, using a safe buffer and a few other things along those lines.
|
18
|
+
def label(*args)
|
19
|
+
super(*args).gsub(/\?\s*\:\<\/label\>/, "?</label>").gsub(/\?\s*\:\s*\<abbr/, "? <abbr")
|
20
|
+
end
|
21
|
+
|
22
|
+
def boolean_input(method, options)
|
23
|
+
super.gsub(":</label>", "</label>").gsub(": <abbr", " <abbr")
|
24
|
+
end
|
25
|
+
|
26
|
+
def dob_input(*args)
|
27
|
+
options = args.extract_options!
|
28
|
+
options.merge!(:start_year => (Time.now.year - 100), :end_year => Time.now.year, :selected => nil)
|
29
|
+
args << options
|
30
|
+
date_input(*args)
|
31
|
+
end
|
32
|
+
|
33
|
+
def commit_button_with_cancel(*args)
|
34
|
+
options = args.extract_options!
|
35
|
+
text = options.delete(:label) || args.shift
|
36
|
+
cancel_options = options.delete(:cancel)
|
37
|
+
|
38
|
+
if @object && @object.respond_to?(:new_record?)
|
39
|
+
key = @object.new_record? ? :create : :update
|
40
|
+
|
41
|
+
# Deal with some complications with ActiveRecord::Base.human_name and two name models (eg UserPost)
|
42
|
+
# ActiveRecord::Base.human_name falls back to ActiveRecord::Base.name.humanize ("Userpost")
|
43
|
+
# if there's no i18n, which is pretty crappy. In this circumstance we want to detect this
|
44
|
+
# fall back (human_name == name.humanize) and do our own thing name.underscore.humanize ("User Post")
|
45
|
+
if @object.class.model_name.respond_to?(:human)
|
46
|
+
object_name = @object.class.model_name.human
|
47
|
+
else
|
48
|
+
object_human_name = @object.class.human_name # default is UserPost => "Userpost", but i18n may do better ("User post")
|
49
|
+
crappy_human_name = @object.class.name.humanize # UserPost => "Userpost"
|
50
|
+
decent_human_name = @object.class.name.underscore.humanize # UserPost => "User post"
|
51
|
+
object_name = (object_human_name == crappy_human_name) ? decent_human_name : object_human_name
|
52
|
+
end
|
53
|
+
else
|
54
|
+
key = :submit
|
55
|
+
object_name = @object_name.to_s.send(self.class.label_str_method)
|
56
|
+
end
|
57
|
+
|
58
|
+
text = (self.localized_string(key, text, :action, :model => object_name) ||
|
59
|
+
::Formtastic::I18n.t(key, :model => object_name)) unless text.is_a?(::String)
|
60
|
+
|
61
|
+
button_html = options.delete(:button_html) || {}
|
62
|
+
button_html.merge!(:class => [button_html[:class], key].compact.join(' '))
|
63
|
+
element_class = ['commit', options.delete(:class)].compact.join(' ') # TODO: Add class reflecting on form action.
|
64
|
+
accesskey = (options.delete(:accesskey) || self.class.default_commit_button_accesskey) unless button_html.has_key?(:accesskey)
|
65
|
+
button_html = button_html.merge(:accesskey => accesskey) if accesskey
|
66
|
+
inner = Formtastic::Util.html_safe(self.submit(text, button_html))
|
67
|
+
# Start custom code
|
68
|
+
if cancel_options.present?
|
69
|
+
inner << template.content_tag(:span, "or", :class => "or")
|
70
|
+
inner << @template.link_to(cancel_options.delete(:text), cancel_options.delete(:url), cancel_options)
|
71
|
+
end
|
72
|
+
# End custom code
|
73
|
+
template.content_tag(:li, inner, :class => element_class)
|
74
|
+
end
|
75
|
+
|
76
|
+
# Returns errors converted to a sentence, adding a full stop.
|
77
|
+
def error_sentence(errors, options = {})
|
78
|
+
error_class = options[:error_class] || self.class.default_inline_error_class
|
79
|
+
error_text = errors.to_sentence.untaint.strip
|
80
|
+
error_text << "." unless %w(? ! . :).include?(error_text[-1, 1])
|
81
|
+
template.content_tag(:p, Formtastic::Util.html_safe(error_text), :class => error_class)
|
82
|
+
end
|
83
|
+
|
84
|
+
def datetime_picker_input(method, options = {})
|
85
|
+
format = (options[:format] || Time::DATE_FORMATS[:default] || '%d %B %Y %I:%M %p')
|
86
|
+
string_input(method, datetime_picker_options(format, object.send(method)).merge(options))
|
87
|
+
end
|
88
|
+
|
89
|
+
def date_picker_input(method, options = {})
|
90
|
+
format = (options[:format] || Time::DATE_FORMATS[:default] || '%d %B %Y')
|
91
|
+
string_input(method, date_picker_options(format, object.send(method)).merge(options))
|
92
|
+
end
|
93
|
+
|
94
|
+
protected
|
95
|
+
|
96
|
+
def datetime_picker_options(format, value = nil)
|
97
|
+
input_options = {:class => 'ui-datetime-picker',:value => value.try(:strftime, format)}
|
98
|
+
wrapper_options = {:class => 'datetime-picker'}
|
99
|
+
return :wrapper_html => wrapper_options, :input_html => input_options
|
100
|
+
end
|
101
|
+
|
102
|
+
def date_picker_options(format, value = nil)
|
103
|
+
input_options = {:class => 'ui-date-picker',:value => value.try(:strftime, format)}
|
104
|
+
wrapper_options = {:class => 'date-picker'}
|
105
|
+
return :wrapper_html => wrapper_options, :input_html => input_options
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
data/youthtree-helpers.gemspec
CHANGED
@@ -5,35 +5,35 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{youthtree-helpers}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Darcy Laycock"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-12-12}
|
13
13
|
s.description = %q{Helpers to make life easier when coding YT-specific apps. see the code..}
|
14
14
|
s.email = %q{sutto@sutto.net}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
|
17
|
+
"README.md"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
21
|
+
"LICENSE",
|
22
|
+
"README.md",
|
23
|
+
"Rakefile",
|
24
|
+
"lib/youth_tree/helpers.rb",
|
25
|
+
"lib/youth_tree/helpers/analytics_helper.rb",
|
26
|
+
"lib/youth_tree/helpers/assets_helper.rb",
|
27
|
+
"lib/youth_tree/helpers/embed_helper.rb",
|
28
|
+
"lib/youth_tree/helpers/form_builder.rb",
|
29
|
+
"lib/youth_tree/helpers/general_helper.rb",
|
30
|
+
"lib/youth_tree/helpers/sidebar_helper.rb",
|
31
|
+
"lib/youth_tree/helpers/uuid_tracker_helper.rb",
|
32
|
+
"lib/youth_tree/locales/formtastic.en.yml",
|
33
|
+
"lib/youthtree-helpers.rb",
|
34
|
+
"youthtree-helpers.gemspec"
|
34
35
|
]
|
35
36
|
s.homepage = %q{http://github.com/YouthTree/youthtree-helpers}
|
36
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
37
37
|
s.require_paths = ["lib"]
|
38
38
|
s.rubygems_version = %q{1.3.7}
|
39
39
|
s.summary = %q{A exceedingly simple set of helpers used across Youth Tree web applications.}
|
@@ -45,17 +45,20 @@ Gem::Specification.new do |s|
|
|
45
45
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
46
46
|
s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.0.rc"])
|
47
47
|
s.add_runtime_dependency(%q<actionpack>, ["~> 3.0.0.rc"])
|
48
|
+
s.add_runtime_dependency(%q<formtastic>, ["~> 1.2"])
|
48
49
|
s.add_runtime_dependency(%q<youthtree-js>, [">= 0"])
|
49
50
|
s.add_runtime_dependency(%q<youthtree-settings>, [">= 0"])
|
50
51
|
else
|
51
52
|
s.add_dependency(%q<activesupport>, ["~> 3.0.0.rc"])
|
52
53
|
s.add_dependency(%q<actionpack>, ["~> 3.0.0.rc"])
|
54
|
+
s.add_dependency(%q<formtastic>, ["~> 1.2"])
|
53
55
|
s.add_dependency(%q<youthtree-js>, [">= 0"])
|
54
56
|
s.add_dependency(%q<youthtree-settings>, [">= 0"])
|
55
57
|
end
|
56
58
|
else
|
57
59
|
s.add_dependency(%q<activesupport>, ["~> 3.0.0.rc"])
|
58
60
|
s.add_dependency(%q<actionpack>, ["~> 3.0.0.rc"])
|
61
|
+
s.add_dependency(%q<formtastic>, ["~> 1.2"])
|
59
62
|
s.add_dependency(%q<youthtree-js>, [">= 0"])
|
60
63
|
s.add_dependency(%q<youthtree-settings>, [">= 0"])
|
61
64
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: youthtree-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Darcy Laycock
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-12-12 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -53,9 +53,24 @@ dependencies:
|
|
53
53
|
type: :runtime
|
54
54
|
version_requirements: *id002
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: formtastic
|
57
57
|
prerelease: false
|
58
58
|
requirement: &id003 !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ~>
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
hash: 11
|
64
|
+
segments:
|
65
|
+
- 1
|
66
|
+
- 2
|
67
|
+
version: "1.2"
|
68
|
+
type: :runtime
|
69
|
+
version_requirements: *id003
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: youthtree-js
|
72
|
+
prerelease: false
|
73
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
59
74
|
none: false
|
60
75
|
requirements:
|
61
76
|
- - ">="
|
@@ -65,11 +80,11 @@ dependencies:
|
|
65
80
|
- 0
|
66
81
|
version: "0"
|
67
82
|
type: :runtime
|
68
|
-
version_requirements: *
|
83
|
+
version_requirements: *id004
|
69
84
|
- !ruby/object:Gem::Dependency
|
70
85
|
name: youthtree-settings
|
71
86
|
prerelease: false
|
72
|
-
requirement: &
|
87
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
73
88
|
none: false
|
74
89
|
requirements:
|
75
90
|
- - ">="
|
@@ -79,7 +94,7 @@ dependencies:
|
|
79
94
|
- 0
|
80
95
|
version: "0"
|
81
96
|
type: :runtime
|
82
|
-
version_requirements: *
|
97
|
+
version_requirements: *id005
|
83
98
|
description: Helpers to make life easier when coding YT-specific apps. see the code..
|
84
99
|
email: sutto@sutto.net
|
85
100
|
executables: []
|
@@ -91,7 +106,6 @@ extra_rdoc_files:
|
|
91
106
|
- README.md
|
92
107
|
files:
|
93
108
|
- .document
|
94
|
-
- .gitignore
|
95
109
|
- LICENSE
|
96
110
|
- README.md
|
97
111
|
- Rakefile
|
@@ -99,9 +113,11 @@ files:
|
|
99
113
|
- lib/youth_tree/helpers/analytics_helper.rb
|
100
114
|
- lib/youth_tree/helpers/assets_helper.rb
|
101
115
|
- lib/youth_tree/helpers/embed_helper.rb
|
116
|
+
- lib/youth_tree/helpers/form_builder.rb
|
102
117
|
- lib/youth_tree/helpers/general_helper.rb
|
103
118
|
- lib/youth_tree/helpers/sidebar_helper.rb
|
104
119
|
- lib/youth_tree/helpers/uuid_tracker_helper.rb
|
120
|
+
- lib/youth_tree/locales/formtastic.en.yml
|
105
121
|
- lib/youthtree-helpers.rb
|
106
122
|
- youthtree-helpers.gemspec
|
107
123
|
has_rdoc: true
|
@@ -109,8 +125,8 @@ homepage: http://github.com/YouthTree/youthtree-helpers
|
|
109
125
|
licenses: []
|
110
126
|
|
111
127
|
post_install_message:
|
112
|
-
rdoc_options:
|
113
|
-
|
128
|
+
rdoc_options: []
|
129
|
+
|
114
130
|
require_paths:
|
115
131
|
- lib
|
116
132
|
required_ruby_version: !ruby/object:Gem::Requirement
|