bootstrap-datepicker-rails 0.4 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
+ # development environment upon cd'ing into the directory
5
+
6
+ # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
7
+ # Only full ruby name is supported here, for short names use:
8
+ # echo "rvm use 1.9.3" > .rvmrc
9
+ environment_id="ruby-1.9.3-p125@bootstrap-datepicker-rails"
10
+
11
+ # Uncomment the following lines if you want to verify rvm version per project
12
+ # rvmrc_rvm_version="1.11.2" # 1.10.1 seams as a safe start
13
+ # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
+ # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
+ # return 1
16
+ # }
17
+
18
+ # First we attempt to load the desired environment directly from the environment
19
+ # file. This is very fast and efficient compared to running through the entire
20
+ # CLI and selector. If you want feedback on which environment was used then
21
+ # insert the word 'use' after --create as this triggers verbose mode.
22
+ if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
23
+ && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
24
+ then
25
+ \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
26
+ [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
27
+ \. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
28
+ else
29
+ # If the environment file has not yet been created, use the RVM CLI to select.
30
+ rvm --create "$environment_id" || {
31
+ echo "Failed to create RVM environment '${environment_id}'."
32
+ return 1
33
+ }
34
+ fi
35
+
36
+ # If you use bundler, this might be useful to you:
37
+ # if [[ -s Gemfile ]] && {
38
+ # ! builtin command -v bundle >/dev/null ||
39
+ # builtin command -v bundle | grep $rvm_path/bin/bundle >/dev/null
40
+ # }
41
+ # then
42
+ # printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
43
+ # gem install bundler
44
+ # fi
45
+ # if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
46
+ # then
47
+ # bundle install | grep -vE '^Using|Your bundle is complete'
48
+ # fi
data/README.md CHANGED
@@ -12,6 +12,10 @@ bootstrap-datepicker-rails project integrates Datepicker with Rails 3 assets pip
12
12
 
13
13
  http://github.com/Nerian/bootstrap-datepicker-rails
14
14
 
15
+ It also integrates the improvements made by Andrew Rowls.
16
+
17
+ https://github.com/eternicode/bootstrap-datepicker
18
+
15
19
  ## Rails > 3.1
16
20
  Include bootstrap-datepicker-rails in Gemfile;
17
21
 
@@ -33,7 +37,7 @@ and run bundle install.
33
37
  Add necessary stylesheet file to app/assets/stylesheets/application.css
34
38
 
35
39
  ``` css
36
- *=bootstrap-datepicker
40
+ *= require bootstrap-datepicker
37
41
  ```
38
42
 
39
43
  ## Javascripts
@@ -52,147 +56,8 @@ Just call datepicker() with any selector.
52
56
  $('.datepicker').datepicker()
53
57
  ```
54
58
 
55
- ### Options
56
-
57
- #### format
58
-
59
- String. Default: 'mm/dd/yyyy'
60
-
61
- The date format, combination of d, dd, m, mm, M, MM, yy, yyy.
62
-
63
- #### weekStart
64
-
65
- Integer. Default: 0
66
-
67
- Day of the week start. 0 (Sunday) to 6 (Saturday)
68
-
69
- #### startDate
70
-
71
- String. Default: Beginning of time
72
-
73
- The earliest date that may be selected; all earlier dates will be disabled.
74
-
75
- #### endDate
76
-
77
- String. Default: End of time
78
-
79
- The latest date that may be selected; all later dates will be disabled.
80
-
81
- #### autoclose
82
-
83
- Boolean. Default: false
84
-
85
- Whether or not to close the datepicker immediately when a date is selected.
86
-
87
- ### Markup
88
-
89
- Format a component.
90
-
91
- ```html
92
- <div class="input-append date" id="datepicker" data-date="12-02-2012" data-date-format="dd-mm-yyyy">
93
- <input class="span2" size="16" type="text" value="12-02-2012">
94
- <span class="add-on"><i class="icon-th"></i></span>
95
- </div>
96
- ```
97
-
98
- ### Methods
99
-
100
- #### .datepicker(options)
101
-
102
- Initializes an datepicker.
103
-
104
- #### show
105
-
106
- Arguments: None
107
-
108
- Show the datepicker.
109
-
110
- ```javascript
111
- $('#datepicker').datepicker('show');
112
- ```
113
-
114
- #### hide
115
-
116
- Arguments: None
117
-
118
- Hide the datepicker.
119
-
120
- ```javascript
121
- $('#datepicker').datepicker('hide');
122
- ```
123
-
124
- #### update
59
+ There are a lot of options you can pass to datepicker(). They are documented at [https://github.com/eternicode/bootstrap-datepicker](https://github.com/eternicode/bootstrap-datepicker)
125
60
 
126
- Arguments: None
127
-
128
- Update the datepicker with the current input value.
129
-
130
- ```javascript
131
- $('#datepicker').datepicker('update');
132
- ```
133
-
134
- #### setStartDate
135
-
136
- Arguments:
137
-
138
- * startDate (String)
139
-
140
- Sets a new lower date limit on the datepicker.
141
-
142
- ```javascript
143
- $('#datepicker').datepicker('setStartDate', '2012-01-01');
144
- ```
145
- Omit startDate (or provide an otherwise falsey value) to unset the limit.
146
-
147
- ```javascript
148
- $('#datepicker').datepicker('setStartDate');
149
- $('#datepicker').datepicker('setStartDate', null);
150
- ```
151
-
152
- #### setEndDate
153
-
154
- Arguments:
155
-
156
- * endDate (String)
157
-
158
- Sets a new upper date limit on the datepicker.
159
-
160
- ```javascript
161
- $('#datepicker').datepicker('setEndDate', '2012-12-31');
162
- ```
163
-
164
- Omit endDate (or provide an otherwise falsey value) to unset the limit.
165
-
166
- ```javascript
167
- $('#datepicker').datepicker('setEndDate');
168
- $('#datepicker').datepicker('setEndDate', null);
169
- ```
170
-
171
- ### Events
172
-
173
- Datepicker class exposes a few events for manipulating the dates.
174
-
175
- #### show
176
-
177
- Fired when the date picker is displayed.
178
-
179
- #### hide
180
-
181
- Fired when the date picker is hidden.
182
-
183
- #### changeDate
184
-
185
- Fired when the date is changed.
186
-
187
- ```javascript
188
- $('#date-end')
189
- .datepicker()
190
- .on('changeDate', function(ev){
191
- if (ev.date.valueOf() < date-start-display.valueOf()){
192
- ....
193
- }
194
- });
195
- ```
196
61
 
197
62
  ## License
198
63
  Copyright (c) 2011 Gonzalo Rodríguez-Baltanás Díaz
@@ -1,5 +1,5 @@
1
1
  module BootstrapDatepickerRails
2
2
  module Rails
3
- VERSION = "0.4"
3
+ VERSION = "0.5"
4
4
  end
5
5
  end
@@ -3,6 +3,7 @@
3
3
  * http://www.eyecon.ro/bootstrap-datepicker
4
4
  * =========================================================
5
5
  * Copyright 2012 Stefan Petre
6
+ * Improvements by Andrew Rowls
6
7
  *
7
8
  * Licensed under the Apache License, Version 2.0 (the "License");
8
9
  * you may not use this file except in compliance with the License.
@@ -37,7 +38,8 @@
37
38
  this.element.on({
38
39
  focus: $.proxy(this.show, this),
39
40
  blur: $.proxy(this._hide, this),
40
- keyup: $.proxy(this.update, this)
41
+ keyup: $.proxy(this.update, this),
42
+ keydown: $.proxy(this.keydown, this)
41
43
  });
42
44
  } else {
43
45
  if (this.component){
@@ -113,7 +115,7 @@
113
115
  }
114
116
  },
115
117
 
116
- hide: function(){
118
+ hide: function(e){
117
119
  this.picker.hide();
118
120
  $(window).off('resize', this.place);
119
121
  this.viewMode = 0;
@@ -121,7 +123,8 @@
121
123
  if (!this.isInput) {
122
124
  $(document).off('mousedown', this.hide);
123
125
  }
124
- this.setValue();
126
+ if (e && e.currentTarget.value)
127
+ this.setValue();
125
128
  this.element.trigger({
126
129
  type: 'hide',
127
130
  date: this.date
@@ -398,6 +401,103 @@
398
401
  e.stopPropagation();
399
402
  e.preventDefault();
400
403
  },
404
+
405
+ moveMonth: function(date, dir){
406
+ if (!dir) return date;
407
+ var new_date = new Date(date.valueOf()),
408
+ day = new_date.getDate(),
409
+ month = new_date.getMonth(),
410
+ mag = Math.abs(dir),
411
+ new_month, test;
412
+ dir = dir > 0 ? 1 : -1;
413
+ if (mag == 1){
414
+ test = dir == -1
415
+ // If going back one month, make sure month is not current month
416
+ // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)
417
+ ? function(){ return new_date.getMonth() == month; }
418
+ // If going forward one month, make sure month is as expected
419
+ // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)
420
+ : function(){ return new_date.getMonth() != new_month; };
421
+ new_month = month + dir;
422
+ new_date.setMonth(new_month);
423
+ // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11
424
+ if (new_month < 0 || new_month > 11)
425
+ new_month = (new_month + 12) % 12;
426
+ } else {
427
+ // For magnitudes >1, move one month at a time...
428
+ for (var i=0; i<mag; i++)
429
+ // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...
430
+ new_date = this.moveMonth(new_date, dir);
431
+ // ...then reset the day, keeping it in the new month
432
+ new_month = new_date.getMonth();
433
+ new_date.setDate(day);
434
+ test = function(){ return new_month != new_date.getMonth(); };
435
+ }
436
+ // Common date-resetting loop -- if date is beyond end of month, make it
437
+ // end of month
438
+ while (test()){
439
+ new_date.setDate(--day);
440
+ new_date.setMonth(new_month);
441
+ }
442
+ return new_date;
443
+ },
444
+
445
+ moveYear: function(date, dir){
446
+ return this.moveMonth(date, dir*12);
447
+ },
448
+
449
+ keydown: function(e){
450
+ if (this.picker.is(':not(:visible)')){
451
+ if (e.keyCode == 27) // allow escape to hide and re-show picker
452
+ this.show();
453
+ return;
454
+ }
455
+ var dir, day, month;
456
+ switch(e.keyCode){
457
+ case 27: // escape
458
+ this.hide();
459
+ e.preventDefault();
460
+ break;
461
+ case 37: // left
462
+ case 39: // right
463
+ dir = e.keyCode == 37 ? -1 : 1;
464
+ if (e.ctrlKey){
465
+ this.date = this.moveYear(this.date, dir);
466
+ this.viewDate = this.moveYear(this.viewDate, dir);
467
+ } else if (e.shiftKey){
468
+ this.date = this.moveMonth(this.date, dir);
469
+ this.viewDate = this.moveMonth(this.viewDate, dir);
470
+ } else {
471
+ this.date.setDate(this.date.getDate() + dir);
472
+ this.viewDate.setDate(this.viewDate.getDate() + dir);
473
+ }
474
+ this.setValue();
475
+ this.update();
476
+ e.preventDefault();
477
+ break;
478
+ case 38: // up
479
+ case 40: // down
480
+ dir = e.keyCode == 38 ? -1 : 1;
481
+ if (e.ctrlKey){
482
+ this.date = this.moveYear(this.date, dir);
483
+ this.viewDate = this.moveYear(this.viewDate, dir);
484
+ } else if (e.shiftKey){
485
+ this.date = this.moveMonth(this.date, dir);
486
+ this.viewDate = this.moveMonth(this.viewDate, dir);
487
+ } else {
488
+ this.date.setDate(this.date.getDate() + dir * 7);
489
+ this.viewDate.setDate(this.viewDate.getDate() + dir * 7);
490
+ }
491
+ this.setValue();
492
+ this.update();
493
+ e.preventDefault();
494
+ break;
495
+ case 13: // enter
496
+ this.hide();
497
+ e.preventDefault();
498
+ break;
499
+ }
500
+ },
401
501
 
402
502
  showMode: function(dir) {
403
503
  if (dir) {
@@ -466,9 +566,10 @@
466
566
  },
467
567
  parseDate: function(date, format) {
468
568
  if (date instanceof Date) return date;
469
- var parts = date.split(format.separator),
470
- date = new Date(1970, 1, 1, 0, 0, 0),
569
+ var parts = date ? date.split(format.separator) : [],
570
+ date = new Date(),
471
571
  val, filtered;
572
+ date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
472
573
  if (parts.length == format.parts.length) {
473
574
  for (var i=0, cnt = format.parts.length; i < cnt; i++) {
474
575
  val = parseInt(parts[i], 10)||1;
@@ -2,6 +2,7 @@
2
2
  * Datepicker for Bootstrap
3
3
  *
4
4
  * Copyright 2012 Stefan Petre
5
+ * Improvements by Andrew Rowls
5
6
  * Licensed under the Apache License v2.0
6
7
  * http://www.apache.org/licenses/LICENSE-2.0
7
8
  *
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootstrap-datepicker-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.4'
4
+ version: '0.5'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-21 00:00:00.000000000 Z
12
+ date: 2012-03-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
16
- requirement: &70298307018260 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70298307018260
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: bundler
27
- requirement: &70298307021480 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '1.0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70298307021480
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '1.0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rake
38
- requirement: &70298306700540 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,7 +53,12 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70298306700540
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  description: A date picker for Twitter Bootstrap
48
63
  email:
49
64
  - siotopo@gmail.com
@@ -52,6 +67,7 @@ extensions: []
52
67
  extra_rdoc_files: []
53
68
  files:
54
69
  - .gitignore
70
+ - .rvmrc
55
71
  - Gemfile
56
72
  - README.md
57
73
  - Rakefile
@@ -76,7 +92,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
92
  version: '0'
77
93
  segments:
78
94
  - 0
79
- hash: 601702732678368938
95
+ hash: -3256137021559220675
80
96
  required_rubygems_version: !ruby/object:Gem::Requirement
81
97
  none: false
82
98
  requirements:
@@ -85,10 +101,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
101
  version: '0'
86
102
  segments:
87
103
  - 0
88
- hash: 601702732678368938
104
+ hash: -3256137021559220675
89
105
  requirements: []
90
106
  rubyforge_project:
91
- rubygems_version: 1.8.17
107
+ rubygems_version: 1.8.19
92
108
  signing_key:
93
109
  specification_version: 3
94
110
  summary: A date picker for Twitter Bootstrap