calendar_date_select 1.15 → 1.16

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 (29) hide show
  1. data/.gitignore +3 -0
  2. data/History.txt +29 -0
  3. data/Manifest.txt +1 -1
  4. data/{Readme.txt → README.txt} +2 -0
  5. data/Rakefile +18 -13
  6. data/VERSION +1 -0
  7. data/calendar_date_select.gemspec +96 -0
  8. data/js_test/functional/.tmp_cds_test.html +306 -0
  9. data/js_test/functional/cds_test.html +31 -0
  10. data/js_test/functional/format_iso_date_test.html +52 -0
  11. data/lib/calendar_date_select/calendar_date_select.rb +10 -4
  12. data/lib/calendar_date_select/form_helpers.rb +16 -4
  13. data/public/javascripts/calendar_date_select/calendar_date_select.js +9 -4
  14. data/public/javascripts/calendar_date_select/format_american.js +2 -1
  15. data/public/javascripts/calendar_date_select/format_danish.js +31 -0
  16. data/public/javascripts/calendar_date_select/format_iso_date.js +19 -36
  17. data/public/javascripts/calendar_date_select/locale/ar.js +10 -0
  18. data/public/javascripts/calendar_date_select/locale/da.js +11 -0
  19. data/public/javascripts/calendar_date_select/locale/es.js +11 -0
  20. data/public/javascripts/calendar_date_select/locale/fr.js +2 -1
  21. data/public/javascripts/calendar_date_select/locale/it.js +9 -0
  22. data/public/javascripts/calendar_date_select/locale/nl.js +11 -0
  23. data/public/javascripts/calendar_date_select/locale/pl.js +2 -1
  24. data/public/javascripts/calendar_date_select/locale/sl.js +11 -0
  25. data/public/stylesheets/calendar_date_select/green.css +142 -0
  26. data/spec/calendar_date_select/form_helpers_spec.rb +23 -0
  27. data/spec/calendar_date_select/includes_helper_spec.rb +46 -0
  28. data/spec/spec_helper.rb +1 -1
  29. metadata +52 -39
@@ -127,6 +127,21 @@
127
127
  assert($('global').onchange_called, "onchange wasnt called");
128
128
  $("global").remove();
129
129
  }},
130
+ test_onchangeCallbackChangedOnclear: function() { with(this){
131
+ $("cds_test").up().build("div", {id: "global"});
132
+ cds = new CalendarDateSelect($("cds_test"), {time: "mixed",
133
+ onchange: function() { $("global").onchange_called = true},
134
+ });
135
+ $("cds_test").value = "";
136
+ cds.clearDate();
137
+ assert( ! $('global').onchange_called, "onchange was called, when the value wasn't actually changed");
138
+ $("cds_test").value = "boogy";
139
+ cds.clearDate();
140
+ assert( $('global').onchange_called, "onchange wasnt called, but should ahve been");
141
+ cds.close();
142
+ $("global").remove();
143
+ }},
144
+
130
145
  test_disabledElement_cantUpdate: function() {with(this){
131
146
  $("cds_test").value = "May 10, 2007";
132
147
  $("cds_test").disabled = true;
@@ -201,6 +216,22 @@
201
216
  assert(cds.use_time)
202
217
  cds.close();
203
218
  }},
219
+ test_parseDate_defaultTime_javaScriptFunctionPassed_shouldReturnDateFromJavaScriptFunction: function() {with(this){
220
+ $("cds_test").value = " ";
221
+ cds = new CalendarDateSelect($("cds_test"), {default_time:function() { return new Date('January 02, 2008 2:00 PM') }});
222
+ assertEqual('2008', cds.selected_date.getFullYear());
223
+ assertEqual('2008', cds.date.getFullYear());
224
+ assert(cds.selection_made)
225
+ cds.close();
226
+ }},
227
+ test_parseDate_defaultTime_javaScriptDatePassed_shouldReturnJavaScriptDate: function() {with(this){
228
+ $("cds_test").value = " ";
229
+ cds = new CalendarDateSelect($("cds_test"), {default_time:new Date('January 02, 2007 05:45 PM') });
230
+ assertEqual('2007', cds.selected_date.getFullYear());
231
+ assertEqual('2007', cds.date.getFullYear());
232
+ assert(cds.selection_made)
233
+ cds.close();
234
+ }},
204
235
  test_passDivElement__shouldUseChildInputForTargetElement: function() {with(this){
205
236
  cds = new CalendarDateSelect($("cds_test_div"), {time:true});
206
237
  assertEqual("INPUT", cds.target_element.nodeName)
@@ -0,0 +1,52 @@
1
+
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <title>Format ISO Date Test Cases</title>
7
+ <script src="../prototype.js" type="text/javascript"></script>
8
+ <script src="../unittest.js" type="text/javascript"></script>
9
+ <!-- other JavaScript includes -->
10
+ <script src="../../public/javascripts/calendar_date_select/calendar_date_select.js" type="text/javascript"></script>
11
+ <script src="../../public/javascripts/calendar_date_select/format_iso_date.js" type="text/javascript"></script>
12
+ <link rel="stylesheet" href="../test.css" type="text/css" />
13
+
14
+ </head>
15
+ <body>
16
+
17
+ <!-- Log output -->
18
+ <div id="testlog"> </div>
19
+
20
+ <!-- here go any elements you do the testing on -->
21
+ <div id="cds_test_div">
22
+ <input type="text" id="cds_test" />
23
+ </div>
24
+
25
+ <!-- Tests -->
26
+ <script type="text/javascript" language="javascript">
27
+ // <![CDATA[
28
+ new Test.Unit.Runner({
29
+ setup: function() { with(this){
30
+ }},
31
+ teardown: function() { with(this){
32
+ }},
33
+ testParsing_withTime: function() { with(this) {
34
+ time = Date.parseFormattedString("2009-01-05 12:30")
35
+ assertEqual(2009, time.getFullYear());
36
+ assertEqual(0, time.getMonth());
37
+ assertEqual(5, time.getDate());
38
+ assertEqual(12, time.getHours());
39
+ assertEqual(30, time.getMinutes());
40
+ }},
41
+ testParsing_withoutTime: function() { with(this) {
42
+ time = Date.parseFormattedString("2009-01-05")
43
+ assertEqual(2009, time.getFullYear());
44
+ assertEqual(0, time.getMonth());
45
+ assertEqual(5, time.getDate());
46
+ }}
47
+
48
+ });
49
+ // ]]>
50
+ </script>
51
+ </body>
52
+ </html>
@@ -1,5 +1,6 @@
1
1
  module CalendarDateSelect
2
- VERSION = '1.15'
2
+ VERSION = '1.16'
3
+
3
4
  FORMATS = {
4
5
  :natural => {
5
6
  :date => "%B %d, %Y",
@@ -20,6 +21,11 @@ module CalendarDateSelect
20
21
  :time => " %H:%M",
21
22
  :javascript_include => "format_finnish"
22
23
  },
24
+ :danish => {
25
+ :date => "%d/%m/%Y",
26
+ :time => " %H:%M",
27
+ :javascript_include => "format_danish"
28
+ },
23
29
  :american => {
24
30
  :date => "%m/%d/%Y",
25
31
  :time => " %I:%M %p",
@@ -57,7 +63,7 @@ module CalendarDateSelect
57
63
  # :image => "custom_calendar_picker.png"
58
64
  # )
59
65
  def self.default_options
60
- @default_options ||= { :image => "calendar_date_select/calendar.gif" }
66
+ @calendar_date_select_default_options ||= { :image => "calendar_date_select/calendar.gif" }
61
67
  end
62
68
 
63
69
  # Set the picker image. Provide the image url the same way you would provide it to image_tag
@@ -72,7 +78,7 @@ module CalendarDateSelect
72
78
  # puts CalendarDateSelect.format[:date]
73
79
  # => "%d/%m/%Y"
74
80
  def self.format
75
- @format ||= FORMATS[:natural]
81
+ @calendar_date_select_format ||= FORMATS[:natural]
76
82
  end
77
83
 
78
84
  # Set the format. To see a list of available formats, CalendarDateSelect::FORMATS.keys, or open lib/calendar_date_select/calendar_date_select.rb
@@ -80,7 +86,7 @@ module CalendarDateSelect
80
86
  # (e.g. CalendarDateSelect.format = :italian)
81
87
  def self.format=(format)
82
88
  raise "CalendarDateSelect: Unrecognized format specification: #{format}" unless FORMATS.has_key?(format)
83
- @format = FORMATS[format]
89
+ @calendar_date_select_format = FORMATS[format]
84
90
  end
85
91
 
86
92
  def self.date_format_string(time = false)
@@ -86,7 +86,7 @@ module CalendarDateSelect::FormHelpers
86
86
  # :before_close => "log('Calendar closing');" ,
87
87
  # :after_close => "log('Calendar closed');",
88
88
  # :after_navigate => "log('Current month is ' + (param.getMonth()+1) + '/' + (param.getFullYear()));",
89
- # :onchange => "log('value changed to - ' + $F(this));"
89
+ # :onchange => "log('value changed to - ' + $F(this));" %>
90
90
  #
91
91
  # }}}
92
92
  #
@@ -116,7 +116,7 @@ module CalendarDateSelect::FormHelpers
116
116
  obj = options[:object] || instance_variable_get("@#{object}")
117
117
 
118
118
  if !options.include?(:time) && obj.class.respond_to?("columns_hash")
119
- column_type = (obj.class.columns_hash[method.to_s].type rescue nil)
119
+ column_type = obj.class.columns_hash[method.to_s].type if obj.class.columns_hash.include?(method.to_s)
120
120
  options[:time] = true if column_type == :datetime
121
121
  end
122
122
 
@@ -136,7 +136,11 @@ module CalendarDateSelect::FormHelpers
136
136
  elsif obj.respond_to?(method)
137
137
  obj.send(method).to_s
138
138
  else
139
- nil
139
+ begin
140
+ obj.send(method).strftime(CalendarDateSelect.date_format_string(use_time))
141
+ rescue
142
+ nil
143
+ end
140
144
  end
141
145
 
142
146
  tag = ActionView::Helpers::InstanceTag.new_with_backwards_compatibility(object, method, self, options.delete(:object))
@@ -154,10 +158,18 @@ module CalendarDateSelect::FormHelpers
154
158
  options, javascript_options = CalendarDateSelect.default_options.merge(options), {}
155
159
  image = options.delete(:image)
156
160
  callbacks = [:before_show, :before_close, :after_show, :after_close, :after_navigate]
157
- for key in [:time, :valid_date_check, :embedded, :buttons, :clear_button, :format, :year_range, :month_year, :popup, :hidden, :minute_interval] + callbacks
161
+ for key in [:default_time, :time, :valid_date_check, :embedded, :buttons, :clear_button, :format, :year_range, :month_year, :popup, :hidden, :minute_interval] + callbacks
158
162
  javascript_options[key] = options.delete(key) if options.has_key?(key)
159
163
  end
160
164
 
165
+ if (default_time = javascript_options[:default_time])
166
+ if default_time.respond_to?(:strftime)
167
+ javascript_options[:default_time] = "new Date('#{default_time.strftime(CalendarDateSelect.date_format_string(true))}')"
168
+ else
169
+ javascript_options[:default_time] = "function() { return #{default_time} }"
170
+ end
171
+ end
172
+
161
173
  # if passing in mixed, pad it with single quotes
162
174
  javascript_options[:time] = "'mixed'" if javascript_options[:time].to_s=="mixed"
163
175
  javascript_options[:month_year] = "'#{javascript_options[:month_year]}'" if javascript_options[:month_year]
@@ -1,4 +1,4 @@
1
- // CalendarDateSelect version 1.15 - a prototype based date picker
1
+ // CalendarDateSelect version 1.16 - a prototype based date picker
2
2
  // Questions, comments, bugs? - see the project page: http://code.google.com/p/calendardateselect
3
3
  if (typeof Prototype == 'undefined') alert("CalendarDateSelect Error: Prototype could not be found. Please make sure that your application's layout includes prototype.js (.g. <%= javascript_include_tag :defaults %>) *before* it includes calendar_date_select.js (.g. <%= calendar_date_select_includes %>).");
4
4
  if (Prototype.Version < "1.6") alert("Prototype 1.6.0 is required. If using earlier version of prototype, please use calendar_date_select version 1.8.3");
@@ -333,9 +333,14 @@ CalendarDateSelect.prototype = {
333
333
  parseDate: function()
334
334
  {
335
335
  var value = $F(this.target_element).strip()
336
- this.selection_made = (value != "");
336
+ var default_time = this.options.get("default_time");
337
+ this.selection_made = (value != "" || default_time);
337
338
  this.date = value=="" ? NaN : Date.parseFormattedString(this.options.get("date") || value);
338
- if (isNaN(this.date)) this.date = new Date();
339
+ if (isNaN(this.date) && !default_time)
340
+ this.date = new Date();
341
+ else if (isNaN(this.date) && default_time)
342
+ this.date = (Object.prototype.toString.apply(default_time) === '[object Function]') ? default_time() : default_time;
343
+
339
344
  if (!this.validYear(this.date.getFullYear())) this.date.setYear( (this.date.getFullYear() < this.yearRange().start) ? this.yearRange().start : this.yearRange().end);
340
345
  this.selected_date = new Date(this.date);
341
346
  this.use_time = /[0-9]:[0-9]{2}/.exec(value) ? true : false;
@@ -355,9 +360,9 @@ CalendarDateSelect.prototype = {
355
360
  if ((this.target_element.disabled || this.target_element.readOnly) && this.options.get("popup") != "force") return false;
356
361
  if (parts.get("day")) {
357
362
  var t_selected_date = this.selected_date, vdc = this.options.get("valid_date_check");
358
- for (var x = 0; x<=3; x++) t_selected_date.setDate(parts.get("day"));
359
363
  t_selected_date.setYear(parts.get("year"));
360
364
  t_selected_date.setMonth(parts.get("month"));
365
+ t_selected_date.setDate(parts.get("day"));
361
366
 
362
367
  if (vdc && ! vdc(t_selected_date.stripTime())) { return false; }
363
368
  this.selected_date = t_selected_date;
@@ -16,6 +16,7 @@ Date.parseFormattedString = function (string) {
16
16
  // 1/1/1111 01:11pm
17
17
  // 1/1/1111 1:11pm
18
18
  var regexp = "(([0-1]?[0-9])\/[0-3]?[0-9]\/[0-9]{4}) *([0-9]{1,2}(:[0-9]{2})? *(am|pm))?";
19
+ string = string.strip();
19
20
  var d = string.match(new RegExp(regexp, "i"));
20
21
  if (d==null) {
21
22
  return Date.parse(string); // Give javascript a chance to parse it.
@@ -24,7 +25,7 @@ Date.parseFormattedString = function (string) {
24
25
  mdy = d[1].split('/');
25
26
  hrs = 0;
26
27
  mts = 0;
27
- if(d[3] != null) {
28
+ if(d[3] != null && d[3].strip() != "") {
28
29
  hrs = parseInt(d[3].split('')[0], 10);
29
30
  if(d[5].toLowerCase() == 'pm') { hrs += 12; } // Add 12 more to hrs
30
31
  mts = d[4].split(':')[1];
@@ -0,0 +1,31 @@
1
+ // Formats date and time as "2000/01/20 17:00"
2
+ Date.prototype.toFormattedString = function(include_time){
3
+ str = Date.padded2(this.getDate()) + "/" + Date.padded2(this.getMonth() + 1) + "/" + this.getFullYear();
4
+
5
+ if (include_time) {
6
+ str += " " + this.getHours() + ":" + this.getPaddedMinutes();
7
+ }
8
+ return str;
9
+ }
10
+
11
+ // Parses date and time as "2000/01/20 17:00"
12
+ Date.parseFormattedString = function(string) {
13
+ var regexp = "([0-9]{2})/([0-9]{2})/([0-9]{4})" +
14
+ "( ([0-9]{1,2}):([0-9]{2})(:([0-9]{2})(.([0-9]{3}))?)?" +
15
+ ")?";
16
+ var d = string.match(new RegExp(regexp, "i"));
17
+ if (d==null) return Date.parse(string); // at least give javascript a crack at it.
18
+ var offset = 0;
19
+ var date = new Date(d[3], 0, 1);
20
+ if (d[2]) { date.setMonth(d[2] - 1); }
21
+ if (d[1]) { date.setDate(d[1]); }
22
+ if (d[4]) {
23
+ hours = parseInt(d[5], 10);
24
+ date.setHours(hours);
25
+ }
26
+ if (d[6]) { date.setMinutes(d[6]); }
27
+ //if (d[8]) { date.setSeconds(d[7]); }
28
+ //if (d[9]) { date.setMiliseconds(Number("0." + d[8]) * 1000); }
29
+
30
+ return date;
31
+ }
@@ -1,46 +1,29 @@
1
+ // International date format (ISO 8601): yyyy-mm-dd
2
+ // Including time (no seconds): yyyy-mm-dd HH:MM
1
3
  Date.prototype.toFormattedString = function(include_time) {
2
- var hour;
4
+ var hour;
3
5
  var str = this.getFullYear() + "-" + Date.padded2(this.getMonth() + 1) + "-" +Date.padded2(this.getDate());
4
6
  if (include_time) {
5
- hour = this.getHours();
6
- str += " " + this.getHours() + ":" + this.getPaddedMinutes();
7
+ hour = Date.padded2(this.getHours());
8
+ str += " " + hour + ":" + this.getPaddedMinutes();
7
9
  }
8
10
  return str;
9
11
  };
10
12
 
13
+ // TODO: take care of timezone offsets
14
+ // as the timezone is not displayed in the input,
15
+ // this could be tricky (or just unnessesary)
11
16
  Date.parseFormattedString = function (string) {
17
+ var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
18
+ "([T| ]([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
19
+ "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
20
+ var d = string.match(new RegExp(regexp));
12
21
 
13
- var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
14
- "( ([0-9]{1,2}):([0-9]{2})?" +
15
- "?)?)?)?";
22
+ var date = new Date(d[1], 0, 1);
16
23
 
17
- var d = string.match(new RegExp(regexp, "i"));
18
- if (d === null) {
19
- return Date.parse(string); // at least give javascript a crack at it.
20
- }
21
- var offset = 0;
22
- var date = new Date(d[1], 0, 1);
23
- if (d[3]) {
24
- date.setMonth(d[3] - 1);
25
- }
26
- if (d[5]) {
27
- date.setDate(d[5]);
28
- }
29
- if (d[7]) {
30
- date.setHours(d[7]);
31
- }
32
- if (d[8]) {
33
- date.setMinutes(d[8]);
34
- }
35
- if (d[0]) {
36
- date.setSeconds(d[0]);
37
- }
38
- if (d[2]) {
39
- date.setMilliseconds(Number("0." + d[2]));
40
- }
41
- if (d[4]) {
42
- offset = (Number(d[6])) + Number(d[8]);
43
- offset = ((d[5] == '-') ? 1 : -1);
44
- }
45
- return date;
46
- };
24
+ if (d[3]) { date.setMonth(d[3] - 1); }
25
+ if (d[5]) { date.setDate(d[5]); }
26
+ if (d[7]) { date.setHours(d[7]); }
27
+ if (d[8]) { date.setMinutes(d[8]); }
28
+ return date;
29
+ };
@@ -0,0 +1,10 @@
1
+ Date.weekdays = ['سبت', 'أحد', 'إثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'];
2
+ Date.months = ['كانون ثاني', 'شباط', 'آذار', 'نيسان', 'أيار', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين أول', 'تشرين ثاني', 'كانون أول'];
3
+ Date.first_day_of_week = 6;
4
+
5
+ _translations = {
6
+ "OK": "نفذ",
7
+ "Now": "الآن",
8
+ "Today": "اليوم",
9
+ "Clear": "إلغاء"
10
+ }
@@ -0,0 +1,11 @@
1
+ Date.weekdays = $w('Ma Ti On To Fr Lø Sø');
2
+ Date.months = $w('Januar Februar Marts April Maj Juni Juli August September Oktober November December');
3
+
4
+ Date.first_day_of_week = 1;
5
+
6
+ _translations = {
7
+ "OK": "Vælg",
8
+ "Now": "Nu",
9
+ "Today": "I dag",
10
+ "Clear": "Slet"
11
+ }
@@ -0,0 +1,11 @@
1
+ Date.weekdays = $w("L M X J V S D");
2
+ Date.months = $w("Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre Noviembre Diciembre" );
3
+
4
+ Date.first_day_of_week = 1;
5
+
6
+ _translations = {
7
+ "OK": "Cancelar",
8
+ "Now": "Ahora",
9
+ "Clear": "Limpiar",
10
+ "Today": "Hoy"
11
+ }
@@ -6,5 +6,6 @@ Date.first_day_of_week = 1;
6
6
  _translations = {
7
7
  "OK": "OK",
8
8
  "Now": "Maintenant",
9
- "Today": "Aujourd'hui"
9
+ "Today": "Aujourd'hui",
10
+ "Clear": "Effacer",
10
11
  }
@@ -0,0 +1,9 @@
1
+ Date.weekdays = $w('Lu Ma Me Gi Ve Sa Do');
2
+ Date.months = $w('Gennaio Febbraio Marzo Aprile Maggio Giugno Luglio Agosto Settembre Ottobre Novembre Dicembre');
3
+ Date.first_day_of_week = 1;
4
+ _translations = {
5
+ "OK": "OK",
6
+ "Now": "Ora",
7
+ "Today": "Oggi",
8
+ "Clear": "Cancella"
9
+ }
@@ -0,0 +1,11 @@
1
+ Date.weekdays = $w('Ma Di Wo Do Vr Za Zo');
2
+ Date.months = $w('januari februari maart april mei juni juli augustus september oktober november december');
3
+
4
+ Date.first_day_of_week = 1;
5
+
6
+ _translations = {
7
+ "OK": "OK",
8
+ "Now": "Nu",
9
+ "Today": "Vandaag",
10
+ "Clear": "Wissen"
11
+ }
@@ -6,5 +6,6 @@ Date.first_day_of_week = 1
6
6
  _translations = {
7
7
  "OK": "OK",
8
8
  "Now": "Teraz",
9
+ "Clear": "Wyczyść",
9
10
  "Today": "Dziś"
10
- }
11
+ }
@@ -0,0 +1,11 @@
1
+ Date.weekdays = $w('Po To Sr Če Pe So Ne');
2
+ Date.months = $w('Januar Februar Marec April Maj Junij Julij Avgust September Oktober November December');
3
+
4
+ Date.first_day_of_week = 1;
5
+
6
+ _translations = {
7
+ "OK": "OK",
8
+ "Now": "Trenutno",
9
+ "Today": "Danes",
10
+ "Clear": "Pobriši"
11
+ }
@@ -0,0 +1,142 @@
1
+ .calendar_date_select {
2
+ color:white;
3
+ border:#002b7f 1px solid;
4
+ display:block;
5
+ width:195px;
6
+ z-index: 1000;
7
+ }
8
+ /* this is a fun ie6 hack to get drop downs to stay behind the popup window. This should always be just underneath .calendar_date_select */
9
+ iframe.ie6_blocker {
10
+ position: absolute;
11
+ z-index: 999;
12
+ }
13
+
14
+ .calendar_date_select thead th {
15
+ font-weight:bold;
16
+ background-color: #56aa1c;
17
+ border-bottom:2px solid #002b7f;
18
+ color: #002b7f !important;
19
+ }
20
+
21
+ .calendar_date_select .cds_buttons {
22
+ text-align:center;
23
+ padding:5px 0px;
24
+ background-color: #56aa1c;
25
+ }
26
+
27
+ .calendar_date_select .cds_footer {
28
+ font-weight: bold;
29
+ background-color: #002b7f;
30
+ padding:3px;
31
+ text-align:center;
32
+ }
33
+
34
+ .calendar_date_select table {
35
+ margin: 0px;
36
+ padding: 0px;
37
+ }
38
+
39
+
40
+ .calendar_date_select .cds_header {
41
+ background-color: #ccc;
42
+ border-bottom: 2px solid #002b7f;
43
+ text-align:center;
44
+ }
45
+
46
+ .calendar_date_select .cds_header span {
47
+ font-size:15px;
48
+ color: black;
49
+ font-weight: bold;
50
+ }
51
+
52
+ .calendar_date_select select { font-size:11px;}
53
+
54
+ .calendar_date_select .cds_header a:hover {
55
+ color: white;
56
+ }
57
+ .calendar_date_select .cds_header a {
58
+ width:22px;
59
+ height:20px;
60
+ text-decoration: none;
61
+ font-size:14px;
62
+ color:black !important;
63
+ }
64
+
65
+ .calendar_date_select .cds_header a.prev {
66
+ float:left;
67
+ }
68
+ .calendar_date_select .cds_header a.next {
69
+ float:right;
70
+ }
71
+
72
+ .calendar_date_select .cds_header a.close {
73
+ float:right;
74
+ display:none;
75
+ }
76
+
77
+ .calendar_date_select .cds_header select.month {
78
+ width:90px;
79
+ }
80
+
81
+ .calendar_date_select .cds_header select.year {
82
+ width:61px;
83
+ }
84
+
85
+ .calendar_date_select .cds_buttons a:hover {
86
+ color: white !important;
87
+ }
88
+
89
+ .calendar_date_select .cds_buttons a {
90
+ font-weight:bold;
91
+ color: #c4ba00 !important;
92
+ font-size: 12px;
93
+ }
94
+
95
+
96
+
97
+ .calendar_date_select td {
98
+ background-color: #56aa1c;
99
+ font-size:12px;
100
+ width: 24px;
101
+ height: 21px;
102
+ text-align:center;
103
+ vertical-align: middle;
104
+ }
105
+ .calendar_date_select td.weekend {
106
+ background-color: #56aa1c;
107
+ }
108
+
109
+ .calendar_date_select td div {
110
+ color:#002b7f;
111
+ }
112
+ .calendar_date_select td div.other {
113
+ color: #c4ba00;
114
+ }
115
+ .calendar_date_select td.selected div {
116
+ color:black;
117
+ }
118
+
119
+
120
+ .calendar_date_select tbody td {
121
+ border-bottom: 1px solid #002b7f;
122
+ }
123
+ .calendar_date_select tbody td.selected {
124
+ background-color:white;
125
+ color:black;
126
+ }
127
+
128
+ .calendar_date_select tbody td:hover {
129
+ background-color:#ccc;
130
+ }
131
+
132
+ .calendar_date_select tbody td.today {
133
+ border: 1px dashed #002b7f;
134
+ }
135
+
136
+ .calendar_date_select td.disabled div {
137
+ color: #440000;
138
+ }
139
+
140
+ .fieldWithErrors .calendar_date_select {
141
+ border: 2px solid #002b7f;
142
+ }