rd_unobtrusive_date_picker 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+