rd_unobtrusive_date_picker 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 (47) hide show
  1. data/MIT-LICENSE +19 -0
  2. data/Manifest +45 -0
  3. data/README.rdoc +165 -0
  4. data/Rakefile +29 -0
  5. data/about.yml +7 -0
  6. data/init.rb +8 -0
  7. data/install.rb +14 -0
  8. data/lib/12_hour_time.rb +102 -0
  9. data/lib/unobtrusive_date_picker.rb +407 -0
  10. data/public/images/backstripes.gif +0 -0
  11. data/public/images/bg_header.jpg +0 -0
  12. data/public/images/bullet1.gif +0 -0
  13. data/public/images/bullet2.gif +0 -0
  14. data/public/images/cal.gif +0 -0
  15. data/public/images/gradient-e5e5e5-ffffff.gif +0 -0
  16. data/public/javascripts/datepicker.js +1445 -0
  17. data/public/javascripts/lang/af.js +40 -0
  18. data/public/javascripts/lang/ar.js +50 -0
  19. data/public/javascripts/lang/de.js +40 -0
  20. data/public/javascripts/lang/du.js +40 -0
  21. data/public/javascripts/lang/en.js +42 -0
  22. data/public/javascripts/lang/es.js +41 -0
  23. data/public/javascripts/lang/fi.js +40 -0
  24. data/public/javascripts/lang/fr.js +44 -0
  25. data/public/javascripts/lang/gr.js +40 -0
  26. data/public/javascripts/lang/he.js +49 -0
  27. data/public/javascripts/lang/it.js +13 -0
  28. data/public/javascripts/lang/nl.js +40 -0
  29. data/public/javascripts/lang/no.js +40 -0
  30. data/public/javascripts/lang/pt.js +50 -0
  31. data/public/javascripts/lang/ro.js +40 -0
  32. data/public/javascripts/lang/ru.js +40 -0
  33. data/public/javascripts/lang/sp.js +40 -0
  34. data/public/javascripts/lang/sv.js +41 -0
  35. data/public/javascripts/lang/ua.js +40 -0
  36. data/public/stylesheets/datepicker.css +263 -0
  37. data/spec/date_picker_tag_spec.rb +122 -0
  38. data/spec/date_picker_text_field_spec.rb +54 -0
  39. data/spec/datepicker_html_class_options_spec.rb +281 -0
  40. data/spec/spec.opts +12 -0
  41. data/spec/spec_helper.rb +52 -0
  42. data/spec/tag_matcher.rb +142 -0
  43. data/spec/unobtrusive_date_picker_spec.rb +129 -0
  44. data/tasks/datepicker_tasks.rake +17 -0
  45. data/uninstall.rb +12 -0
  46. data/unobtrusive_date_picker.gemspec +30 -0
  47. metadata +116 -0
@@ -0,0 +1,122 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe UnobtrusiveDatePicker, "with no data passed to tag helper" do
4
+ it_should_behave_like "all date picker helpers"
5
+
6
+ before(:each) do
7
+ @default_id = ActionView::Helpers::DateTimeSelector::DEFAULT_PREFIX
8
+ @date = Date.today
9
+ @datepicker = unobtrusive_date_picker_tags(nil, {:include_blank => true})
10
+ end
11
+
12
+ it "should have default prefix for year id" do
13
+ default_name = @default_id + "[#{UnobtrusiveDatePicker::DATEPICKER_DEFAULT_NAME_ID_SUFFIXES[:year][:name]}]"
14
+ @datepicker.should include_tag(:select, :attributes => {:id => @default_id, :name => default_name})
15
+ end
16
+
17
+ it "should have 'split-date' in class on year" do
18
+ default_name = @default_id + "[#{UnobtrusiveDatePicker::DATEPICKER_DEFAULT_NAME_ID_SUFFIXES[:year][:name]}]"
19
+ @datepicker.should include_tag(:select, :attributes => {:class => 'split-date', :name => default_name})
20
+ end
21
+
22
+ it "should have default prefix and 'mm' on month id" do
23
+ month_id = @default_id + '-mm'
24
+ month_name = @default_id + "[#{UnobtrusiveDatePicker::DATEPICKER_DEFAULT_NAME_ID_SUFFIXES[:month][:name]}]"
25
+ @datepicker.should include_tag(:select, :attributes => {:id => month_id, :name => month_name})
26
+ end
27
+
28
+ it "should have default prefix and 'dd' on day id" do
29
+ day_id = @default_id + '-dd'
30
+ day_name = @default_id + "[#{UnobtrusiveDatePicker::DATEPICKER_DEFAULT_NAME_ID_SUFFIXES[:day][:name]}]"
31
+ @datepicker.should include_tag(:select, :attributes => {:id => day_id, :name => day_name})
32
+ end
33
+
34
+ it "should include blank selected option for all selects" do
35
+ ids = []
36
+ ids << @default_id + '-dd'
37
+ ids << @default_id + '-mm'
38
+ ids << @default_id
39
+
40
+ ids.each do |id|
41
+ @datepicker.should include_tag(:select, :attributes => {:id => id}, :child => {:tag => 'option', :attributes => {:value => ''}, :content => ''})
42
+ end
43
+ end
44
+
45
+ it "should use full month names for option text" do
46
+ month_id = @default_id + '-mm'
47
+
48
+ 1.upto(12) do |month_number|
49
+ @datepicker.should include_tag(:select, :attributes => {:id => month_id}, :child => {:tag => 'option', :attributes => {:value => month_number.to_s}, :content => Date::MONTHNAMES[month_number]})
50
+ end
51
+ end
52
+
53
+ it "should have current year +/-5 years" do
54
+ start_year, end_year = @date.year - 5, @date.year + 5
55
+
56
+ start_year.upto(end_year) do |year|
57
+ @datepicker.should include_tag(:select, :attributes => {:id => @default_id}, :child => {:tag => 'option', :attributes => {:value => year.to_s}, :content => year.to_s})
58
+ end
59
+ end
60
+
61
+ after(:each) do
62
+ @date, @datepicker = nil
63
+ end
64
+
65
+ end
66
+
67
+
68
+ describe UnobtrusiveDatePicker, "with specific date and options passed to tag helpers" do
69
+ it_should_behave_like "all date picker helpers"
70
+
71
+ before(:each) do
72
+ @id = "date_published"
73
+ @date = Date.parse("March 15, 2007")
74
+ @start_year = 1945
75
+ @end_year = Date.today.year
76
+ @datepicker = unobtrusive_date_picker_tags(@date, {:use_short_month => true, :start_year => @start_year, :end_year => @end_year}, {:id => @id})
77
+ end
78
+
79
+ it "should have a year select tag with options that start with the start date and end with the end date" do
80
+ @start_year.upto(@end_year) do |year|
81
+ @datepicker.should include_tag(:select, :attributes => {:id => @id}, :child => {:tag => 'option', :attributes => {:value => year.to_s}, :content => year.to_s})
82
+ end
83
+ end
84
+
85
+ it "should have only the options for the range of years" do
86
+ total_options = (@start_year..@end_year).entries.size
87
+ @datepicker.should include_tag(:select, :attributes => {:id => @id}, :children => {:count => total_options, :only => {:tag => 'option'}})
88
+ end
89
+
90
+ it "should include only options for months 1 to 12" do
91
+ month_id = @id + '-mm'
92
+
93
+ 1.upto(12) do |month|
94
+ @datepicker.should include_tag(:select, :attributes => {:id => month_id}, :child => {:tag => 'option', :attributes => {:value => month.to_s}})
95
+ end
96
+
97
+ @datepicker.should include_tag(:select, :attributes => {:id => month_id}, :children => {:count => 12, :only => {:tag => 'option'}})
98
+ end
99
+
100
+ it "should include only options for days 1 to 31" do
101
+ day_id = @id + '-dd'
102
+
103
+ 1.upto(31) do |day|
104
+ @datepicker.should include_tag(:select, :attributes => {:id => day_id}, :child => {:tag => 'option', :attributes => {:value => day.to_s}, :content => day.to_s})
105
+ end
106
+
107
+ @datepicker.should include_tag(:select, :attributes => {:id => day_id}, :children => {:count => 31, :only => {:tag => 'option'}})
108
+ end
109
+
110
+ it "should use short month names for option text" do
111
+ month_id = @id + '-mm'
112
+
113
+ 1.upto(12) do |month_number|
114
+ @datepicker.should include_tag(:select, :attributes => {:id => month_id}, :child => {:tag => 'option', :attributes => {:value => month_number.to_s}, :content => Date::ABBR_MONTHNAMES[month_number]})
115
+ end
116
+ end
117
+
118
+ after(:each) do
119
+ @id, @date, @datepicker, @start_year, @end_year = nil
120
+ end
121
+
122
+ end
@@ -0,0 +1,54 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "a unobtrusive_date_text_picker with a stub ActiveRecord object" do
4
+ it_should_behave_like "all date picker helpers"
5
+
6
+ before(:each) do
7
+ @date = Date.parse("March 15, 2007")
8
+ @date_model = stub('DateModel', :date => @date, :id => 1)
9
+ @datepicker_html = unobtrusive_date_text_picker(:date_model, :date, :format => 'd-m-y', :divider => 'dash')
10
+ end
11
+
12
+ it "should have all the correct classes and attributes" do
13
+ @datepicker_html.should selector_tag("input#date_model_date.format-d-m-y.divider-dash[type='text'][value='15-03-2007']")
14
+ end
15
+
16
+ after(:each) do
17
+ @date, @date_model, @datepicker_html = nil
18
+ end
19
+ end
20
+
21
+ describe "a unobtrusive_date_text_picker_tag with a date object" do
22
+ it_should_behave_like "all date picker helpers"
23
+
24
+ before(:each) do
25
+ @date = Date.parse("March 15, 2007")
26
+ @datepicker_html = unobtrusive_date_text_picker_tag(:date_value, @date, :divider => '.')
27
+ end
28
+
29
+ it "should have all the correct classes and attributes" do
30
+ @datepicker_html.should selector_tag("input#date_value.format-m-d-y.divider-dot[type='text'][value='03.15.2007']")
31
+ end
32
+
33
+ after(:each) do
34
+ @date, @datepicker_html = nil
35
+ end
36
+ end
37
+
38
+ describe "a unobtrusive_date_text_picker with a ActiveRecord attribute with a nil value" do
39
+ it_should_behave_like "all date picker helpers"
40
+
41
+ before(:each) do
42
+ @date = nil
43
+ @date_model = stub('DateModel', :date => @date, :id => 1)
44
+ @datepicker_html = unobtrusive_date_text_picker(:date_model, :date, :format => 'd-m-y', :divider => 'dash')
45
+ end
46
+
47
+ it "should have all the correct classes and attributes" do
48
+ @datepicker_html.should selector_tag("input#date_model_date.format-d-m-y.divider-dash[type='text'][value='']")
49
+ end
50
+
51
+ after(:each) do
52
+ @date, @date_model, @datepicker_html = nil
53
+ end
54
+ end
@@ -0,0 +1,281 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "all date picker form helpers", :shared => true do
4
+ before(:each) do
5
+ @date = Date.parse("March 15, 2007")
6
+ @date_model = stub('DateModel', :date => @date, :id => 1)
7
+ end
8
+
9
+ after(:each) do
10
+ @date, @date_model = nil
11
+ end
12
+ end
13
+
14
+
15
+ describe UnobtrusiveDatePicker, "with :highlight_days option passed a string" do
16
+ it_should_behave_like "all date picker helpers"
17
+ it_should_behave_like "all date picker form helpers"
18
+
19
+ before(:each) do
20
+ @days = '123'
21
+ @datepicker_html = unobtrusive_date_picker(:date_model, :date, {:highlight_days => @days})
22
+ end
23
+
24
+ it "should have the correct class" do
25
+ year_id = 'date_model_date'
26
+ year_name = 'date_model[date(1i)]'
27
+ highlight_days = 'highlight-days-' + @days
28
+
29
+ @datepicker_html.should include_tag(:select, :attributes => {:id => year_id, :name => year_name, :class => "#{highlight_days} split-date"})
30
+ end
31
+
32
+ after(:each) do
33
+ @days, @datepicker_html = nil
34
+ end
35
+ end
36
+
37
+
38
+ describe UnobtrusiveDatePicker, "with :highlight_days option passed an array of symbols" do
39
+ it_should_behave_like "all date picker helpers"
40
+ it_should_behave_like "all date picker form helpers"
41
+
42
+ before(:each) do
43
+ @days = [:Tuesday, :Wednesday, :Thursday]
44
+ @datepicker_html = unobtrusive_date_picker(:date_model, :date, {:highlight_days => @days})
45
+ end
46
+
47
+ it "should have the correct class" do
48
+ year_id = 'date_model_date'
49
+ year_name = 'date_model[date(1i)]'
50
+ highlight_days = 'highlight-days-123'
51
+
52
+ @datepicker_html.should include_tag(:select, :attributes => {:id => year_id, :name => year_name, :class => "#{highlight_days} split-date"})
53
+ end
54
+
55
+ after(:each) do
56
+ @days, @datepicker_html = nil
57
+ end
58
+ end
59
+
60
+
61
+ describe UnobtrusiveDatePicker, "with :highlight_days option passed an empty array" do
62
+ it_should_behave_like "all date picker helpers"
63
+ it_should_behave_like "all date picker form helpers"
64
+
65
+ before(:each) do
66
+ @datepicker_html = unobtrusive_date_picker(:date_model, :date, {:highlight_days => []})
67
+ end
68
+
69
+ it "should have the correct class" do
70
+ year_id = 'date_model_date'
71
+ year_name = 'date_model[date(1i)]'
72
+
73
+ @datepicker_html.should include_tag(:select, :attributes => {:id => year_id, :name => year_name, :class => "split-date"})
74
+ end
75
+
76
+ after(:each) do
77
+ @datepicker_html = nil
78
+ end
79
+ end
80
+
81
+
82
+ describe UnobtrusiveDatePicker, "with :range_low option passed :today" do
83
+ it_should_behave_like "all date picker helpers"
84
+ it_should_behave_like "all date picker form helpers"
85
+
86
+ before(:each) do
87
+ @datepicker_html = unobtrusive_date_picker(:date_model, :date, {:range_low => :today})
88
+ end
89
+
90
+ it "should have the correct class" do
91
+ year_id = 'date_model_date'
92
+ year_name = 'date_model[date(1i)]'
93
+ range_low = 'range-low-today'
94
+
95
+ @datepicker_html.should include_tag(:select, :attributes => {:id => year_id, :name => year_name, :class => "#{range_low} split-date"})
96
+ end
97
+
98
+ after(:each) do
99
+ @datepicker_html = nil
100
+ end
101
+ end
102
+
103
+
104
+ describe UnobtrusiveDatePicker, "with :range_low option passed :tomorrow" do
105
+ it_should_behave_like "all date picker helpers"
106
+ it_should_behave_like "all date picker form helpers"
107
+
108
+ before(:each) do
109
+ @datepicker_html = unobtrusive_date_picker(:date_model, :date, {:range_low => :tomorrow})
110
+ end
111
+
112
+ it "should have the correct class" do
113
+ year_id = 'date_model_date'
114
+ year_name = 'date_model[date(1i)]'
115
+ tomorrow = Date.tomorrow.strftime(UnobtrusiveDatePicker::RANGE_DATE_FORMAT)
116
+ range_low = "range-low-#{tomorrow}"
117
+
118
+ @datepicker_html.should include_tag(:select, :attributes => {:id => year_id, :name => year_name, :class => "#{range_low} split-date"})
119
+ end
120
+
121
+ after(:each) do
122
+ @datepicker_html = nil
123
+ end
124
+ end
125
+
126
+
127
+ describe UnobtrusiveDatePicker, "with :range_high option passed a string" do
128
+ it_should_behave_like "all date picker helpers"
129
+ it_should_behave_like "all date picker form helpers"
130
+
131
+ before(:each) do
132
+ @range_high = 'March 20, 2020'
133
+ @datepicker_html = unobtrusive_date_picker(:date_model, :date, {:range_high => @range_high})
134
+ end
135
+
136
+ it "should have the correct class" do
137
+ year_id = 'date_model_date'
138
+ year_name = 'date_model[date(1i)]'
139
+ range_date = Date.parse(@range_high).strftime(UnobtrusiveDatePicker::RANGE_DATE_FORMAT)
140
+ html_class = "range-high-#{range_date}"
141
+
142
+ @datepicker_html.should include_tag(:select, :attributes => {:id => year_id, :name => year_name, :class => "#{html_class} split-date"})
143
+ end
144
+
145
+ after(:each) do
146
+ @range_high, @datepicker_html = nil
147
+ end
148
+ end
149
+
150
+
151
+ describe UnobtrusiveDatePicker, "with :range_high option passed a Date object" do
152
+ it_should_behave_like "all date picker helpers"
153
+ it_should_behave_like "all date picker form helpers"
154
+
155
+ before(:each) do
156
+ @range_high = Date.parse('March 20, 2020')
157
+ @datepicker_html = unobtrusive_date_picker(:date_model, :date, {:range_high => @range_high})
158
+ end
159
+
160
+ it "should have the correct class" do
161
+ year_id = 'date_model_date'
162
+ year_name = 'date_model[date(1i)]'
163
+ range_date = @range_high.strftime(UnobtrusiveDatePicker::RANGE_DATE_FORMAT)
164
+ html_class = "range-high-#{range_date}"
165
+
166
+ @datepicker_html.should include_tag(:select, :attributes => {:id => year_id, :name => year_name, :class => "#{html_class} split-date"})
167
+ end
168
+
169
+ after(:each) do
170
+ @range_high, @datepicker_html = nil
171
+ end
172
+ end
173
+
174
+
175
+ describe UnobtrusiveDatePicker, "with :range_high passed nil and :range_low option passed an empty string" do
176
+ it_should_behave_like "all date picker helpers"
177
+ it_should_behave_like "all date picker form helpers"
178
+
179
+ before(:each) do
180
+ @datepicker_html = unobtrusive_date_picker(:date_model, :date, {:range_high => nil, :range_low => ''})
181
+ end
182
+
183
+ it "should have the correct class" do
184
+ year_id = 'date_model_date'
185
+ year_name = 'date_model[date(1i)]'
186
+
187
+ @datepicker_html.should include_tag(:select, :attributes => {:id => year_id, :name => year_name, :class => "split-date"})
188
+ end
189
+
190
+ after(:each) do
191
+ @datepicker_html = nil
192
+ end
193
+ end
194
+
195
+
196
+ describe UnobtrusiveDatePicker, "with :disable_days option passed an array of symbols" do
197
+ it_should_behave_like "all date picker helpers"
198
+ it_should_behave_like "all date picker form helpers"
199
+
200
+ before(:each) do
201
+ @days = [:Saturday, :Sunday]
202
+ @datepicker_html = unobtrusive_date_picker(:date_model, :date, {:disable_days => @days})
203
+ end
204
+
205
+ it "should have the correct class" do
206
+ year_id = 'date_model_date'
207
+ year_name = 'date_model[date(1i)]'
208
+ disable_days = 'disable-days-56'
209
+
210
+ @datepicker_html.should include_tag(:select, :attributes => {:id => year_id, :name => year_name, :class => "#{disable_days} split-date"})
211
+ end
212
+
213
+ after(:each) do
214
+ @days, @datepicker_html = nil
215
+ end
216
+ end
217
+
218
+
219
+ describe UnobtrusiveDatePicker, "with :disable_days option passed an empty array" do
220
+ it_should_behave_like "all date picker helpers"
221
+ it_should_behave_like "all date picker form helpers"
222
+
223
+ before(:each) do
224
+ @datepicker_html = unobtrusive_date_picker(:date_model, :date, {:disable_days => []})
225
+ end
226
+
227
+ it "should have the correct class" do
228
+ year_id = 'date_model_date'
229
+ year_name = 'date_model[date(1i)]'
230
+
231
+ @datepicker_html.should include_tag(:select, :attributes => {:id => year_id, :name => year_name, :class => "split-date"})
232
+ end
233
+
234
+ after(:each) do
235
+ @datepicker_html = nil
236
+ end
237
+ end
238
+
239
+
240
+ describe UnobtrusiveDatePicker, "with :no_transparency option set to true" do
241
+ it_should_behave_like "all date picker helpers"
242
+ it_should_behave_like "all date picker form helpers"
243
+
244
+ before(:each) do
245
+ @datepicker_html = unobtrusive_date_picker(:date_model, :date, {:no_transparency => true})
246
+ end
247
+
248
+ it "should have the correct class" do
249
+ year_id = 'date_model_date'
250
+ year_name = 'date_model[date(1i)]'
251
+ html_class = 'no-transparency'
252
+
253
+ @datepicker_html.should include_tag(:select, :attributes => {:id => year_id, :name => year_name, :class => "#{html_class} split-date"})
254
+ end
255
+
256
+ after(:each) do
257
+ @datepicker_html = nil
258
+ end
259
+ end
260
+
261
+
262
+ describe UnobtrusiveDatePicker, "with :no_transparency option set to false" do
263
+ it_should_behave_like "all date picker helpers"
264
+ it_should_behave_like "all date picker form helpers"
265
+
266
+ before(:each) do
267
+ @datepicker_html = unobtrusive_date_picker(:date_model, :date, {:no_transparency => false})
268
+ end
269
+
270
+ it "should have the correct class" do
271
+ year_id = 'date_model_date'
272
+ year_name = 'date_model[date(1i)]'
273
+
274
+ @datepicker_html.should include_tag(:select, :attributes => {:id => year_id, :name => year_name, :class => "split-date"})
275
+ end
276
+
277
+ after(:each) do
278
+ @datepicker_html = nil
279
+ end
280
+ end
281
+