paint-rails 0.6.7 → 0.7.24

Sign up to get free protection for your applications and to get access to all the features.
Files changed (136) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -4
  3. data/lib/paint-rails/version.rb +1 -1
  4. data/paint-rails.gemspec +2 -2
  5. data/vendor/assets/stylesheets/Brocfile.js +3 -0
  6. data/vendor/assets/stylesheets/Gemfile +3 -0
  7. data/vendor/assets/stylesheets/Gemfile.lock +14 -0
  8. data/vendor/assets/stylesheets/bin/ci +6 -0
  9. data/vendor/assets/stylesheets/bin/lint +5 -0
  10. data/vendor/assets/stylesheets/bin/setup +7 -0
  11. data/vendor/assets/stylesheets/bower_components/fontawesome/.bower.json +5 -5
  12. data/vendor/assets/stylesheets/bower_components/fontawesome/.gitignore +1 -0
  13. data/vendor/assets/stylesheets/bower_components/fontawesome/bower.json +1 -1
  14. data/vendor/assets/stylesheets/bower_components/fontawesome/css/font-awesome.css +133 -4
  15. data/vendor/assets/stylesheets/bower_components/fontawesome/css/font-awesome.css.map +7 -0
  16. data/vendor/assets/stylesheets/bower_components/fontawesome/css/font-awesome.min.css +2 -2
  17. data/vendor/assets/stylesheets/bower_components/fontawesome/fonts/FontAwesome.otf +0 -0
  18. data/vendor/assets/stylesheets/bower_components/fontawesome/fonts/fontawesome-webfont.eot +0 -0
  19. data/vendor/assets/stylesheets/bower_components/fontawesome/fonts/fontawesome-webfont.svg +53 -8
  20. data/vendor/assets/stylesheets/bower_components/fontawesome/fonts/fontawesome-webfont.ttf +0 -0
  21. data/vendor/assets/stylesheets/bower_components/fontawesome/fonts/fontawesome-webfont.woff +0 -0
  22. data/vendor/assets/stylesheets/bower_components/fontawesome/fonts/fontawesome-webfont.woff2 +0 -0
  23. data/vendor/assets/stylesheets/bower_components/fontawesome/less/{spinning.less → animated.less} +6 -1
  24. data/vendor/assets/stylesheets/bower_components/fontawesome/less/core.less +3 -1
  25. data/vendor/assets/stylesheets/bower_components/fontawesome/less/font-awesome.less +2 -2
  26. data/vendor/assets/stylesheets/bower_components/fontawesome/less/icons.less +45 -1
  27. data/vendor/assets/stylesheets/bower_components/fontawesome/less/mixins.less +3 -1
  28. data/vendor/assets/stylesheets/bower_components/fontawesome/less/path.less +1 -0
  29. data/vendor/assets/stylesheets/bower_components/fontawesome/less/variables.less +47 -2
  30. data/vendor/assets/stylesheets/bower_components/fontawesome/scss/{_spinning.scss → _animated.scss} +5 -0
  31. data/vendor/assets/stylesheets/bower_components/fontawesome/scss/_core.scss +3 -1
  32. data/vendor/assets/stylesheets/bower_components/fontawesome/scss/_icons.scss +45 -1
  33. data/vendor/assets/stylesheets/bower_components/fontawesome/scss/_mixins.scss +3 -1
  34. data/vendor/assets/stylesheets/bower_components/fontawesome/scss/_path.scss +2 -1
  35. data/vendor/assets/stylesheets/bower_components/fontawesome/scss/_variables.scss +47 -2
  36. data/vendor/assets/stylesheets/bower_components/fontawesome/scss/font-awesome.scss +2 -2
  37. data/vendor/assets/stylesheets/bower_components/foundation/.bower.json +5 -5
  38. data/vendor/assets/stylesheets/bower_components/foundation/bower.json +1 -1
  39. data/vendor/assets/stylesheets/bower_components/foundation/css/foundation.css +1855 -1667
  40. data/vendor/assets/stylesheets/bower_components/foundation/css/foundation.css.map +7 -0
  41. data/vendor/assets/stylesheets/bower_components/foundation/css/foundation.min.css +1 -0
  42. data/vendor/assets/stylesheets/bower_components/foundation/css/normalize.css +11 -12
  43. data/vendor/assets/stylesheets/bower_components/foundation/css/normalize.css.map +7 -0
  44. data/vendor/assets/stylesheets/bower_components/foundation/css/normalize.min.css +1 -0
  45. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.abide.js +156 -62
  46. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.accordion.js +35 -13
  47. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.alert.js +8 -8
  48. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.clearing.js +93 -65
  49. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.dropdown.js +203 -66
  50. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.equalizer.js +57 -27
  51. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.interchange.js +61 -46
  52. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.joyride.js +93 -78
  53. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.js +177 -77
  54. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.magellan.js +81 -55
  55. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.offcanvas.js +28 -28
  56. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.orbit.js +135 -131
  57. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.reveal.js +119 -65
  58. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.slider.js +113 -71
  59. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.tab.js +67 -35
  60. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.tooltip.js +76 -37
  61. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation/foundation.topbar.js +71 -58
  62. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation.js +1570 -919
  63. data/vendor/assets/stylesheets/bower_components/foundation/js/foundation.min.js +5 -4
  64. data/vendor/assets/stylesheets/bower_components/foundation/js/vendor/fastclick.js +8 -9
  65. data/vendor/assets/stylesheets/bower_components/foundation/js/vendor/jquery.js +10 -9
  66. data/vendor/assets/stylesheets/bower_components/foundation/js/vendor/modernizr.js +1 -1
  67. data/vendor/assets/stylesheets/bower_components/foundation/js/vendor/placeholder.js +2 -2
  68. data/vendor/assets/stylesheets/bower_components/foundation/package.json +53 -0
  69. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/_functions.scss +76 -22
  70. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/_settings.scss +152 -107
  71. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_accordion.scss +8 -8
  72. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_alert-boxes.scss +12 -12
  73. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_block-grid.scss +14 -13
  74. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_breadcrumbs.scss +18 -19
  75. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_button-groups.scss +35 -25
  76. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_buttons.scss +16 -19
  77. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_clearing.scss +60 -47
  78. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_dropdown-buttons.scss +15 -15
  79. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_dropdown.scss +42 -36
  80. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_flex-video.scss +7 -7
  81. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_forms.scss +103 -79
  82. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_global.scss +95 -53
  83. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_grid.scss +42 -25
  84. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_icon-bar.scss +371 -204
  85. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_inline-lists.scss +8 -8
  86. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_joyride.scss +40 -42
  87. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_keystrokes.scss +2 -3
  88. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_labels.scss +7 -7
  89. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_magellan.scss +2 -2
  90. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_offcanvas.scss +184 -179
  91. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_orbit.scss +90 -70
  92. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_pagination.scss +15 -15
  93. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_panels.scss +27 -15
  94. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_pricing-tables.scss +16 -16
  95. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_progress-bars.scss +4 -4
  96. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_range-slider.scss +28 -19
  97. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_reveal.scss +37 -50
  98. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_side-nav.scss +15 -11
  99. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_split-buttons.scss +26 -14
  100. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_sub-nav.scss +14 -12
  101. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_switches.scss +32 -21
  102. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_tables.scss +8 -8
  103. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_tabs.scss +50 -31
  104. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_thumbs.scss +8 -8
  105. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_tooltips.scss +25 -25
  106. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_top-bar.scss +197 -145
  107. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_type.scss +20 -81
  108. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_visibility.scss +99 -15
  109. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation.scss +37 -38
  110. data/vendor/assets/stylesheets/bower_components/foundation/scss/normalize.scss +8 -11
  111. data/vendor/assets/stylesheets/bower_components/jquery/.bower.json +5 -4
  112. data/vendor/assets/stylesheets/bower_components/jquery/bower.json +2 -1
  113. data/vendor/assets/stylesheets/bower_components/jquery/dist/jquery.js +9 -4
  114. data/vendor/assets/stylesheets/bower_components/jquery/dist/jquery.min.js +4 -4
  115. data/vendor/assets/stylesheets/bower_components/jquery/dist/jquery.min.map +1 -1
  116. data/vendor/assets/stylesheets/bower_components/jquery/src/core.js +6 -1
  117. data/vendor/assets/stylesheets/circle.yml +17 -0
  118. data/vendor/assets/stylesheets/components/_button.scss +120 -21
  119. data/vendor/assets/stylesheets/components/_dropdown.scss +316 -14
  120. data/vendor/assets/stylesheets/components/_flip-panel.scss +191 -0
  121. data/vendor/assets/stylesheets/components/_form.scss +346 -0
  122. data/vendor/assets/stylesheets/components/_layout.scss +261 -121
  123. data/vendor/assets/stylesheets/components/_panel.scss +91 -0
  124. data/vendor/assets/stylesheets/components/_quick-jump.scss +267 -0
  125. data/vendor/assets/stylesheets/components/_side-panel.scss +154 -0
  126. data/vendor/assets/stylesheets/components/_table.scss +105 -0
  127. data/vendor/assets/stylesheets/components/_typography.scss +34 -3
  128. data/vendor/assets/stylesheets/components/_vertical-align.scss +9 -0
  129. data/vendor/assets/stylesheets/globals/_functions.scss +69 -0
  130. data/vendor/assets/stylesheets/globals/_mixins.scss +23 -1
  131. data/vendor/assets/stylesheets/globals/_settings.scss +35 -36
  132. data/vendor/assets/stylesheets/paint.scss +22 -14
  133. metadata +29 -8
  134. data/vendor/assets/stylesheets/bower_components/fontawesome/less/extras.less +0 -2
  135. data/vendor/assets/stylesheets/bower_components/fontawesome/scss/_extras.scss +0 -44
  136. data/vendor/assets/stylesheets/bower_components/foundation/scss/foundation/components/_toolbar.scss +0 -70
@@ -4,39 +4,41 @@
4
4
  Foundation.libs.slider = {
5
5
  name : 'slider',
6
6
 
7
- version : '5.4.7',
8
-
9
- settings: {
10
- start: 0,
11
- end: 100,
12
- step: 1,
13
- initial: null,
14
- display_selector: '',
15
- vertical: false,
16
- on_change: function(){}
7
+ version : '5.5.2',
8
+
9
+ settings : {
10
+ start : 0,
11
+ end : 100,
12
+ step : 1,
13
+ precision : null,
14
+ initial : null,
15
+ display_selector : '',
16
+ vertical : false,
17
+ trigger_input_change : false,
18
+ on_change : function () {}
17
19
  },
18
20
 
19
21
  cache : {},
20
22
 
21
23
  init : function (scope, method, options) {
22
- Foundation.inherit(this,'throttle');
24
+ Foundation.inherit(this, 'throttle');
23
25
  this.bindings(method, options);
24
26
  this.reflow();
25
27
  },
26
28
 
27
- events : function() {
29
+ events : function () {
28
30
  var self = this;
29
31
 
30
32
  $(this.scope)
31
33
  .off('.slider')
32
34
  .on('mousedown.fndtn.slider touchstart.fndtn.slider pointerdown.fndtn.slider',
33
- '[' + self.attr_name() + ']:not(.disabled, [disabled]) .range-slider-handle', function(e) {
35
+ '[' + self.attr_name() + ']:not(.disabled, [disabled]) .range-slider-handle', function (e) {
34
36
  if (!self.cache.active) {
35
37
  e.preventDefault();
36
38
  self.set_active_slider($(e.target));
37
39
  }
38
40
  })
39
- .on('mousemove.fndtn.slider touchmove.fndtn.slider pointermove.fndtn.slider', function(e) {
41
+ .on('mousemove.fndtn.slider touchmove.fndtn.slider pointermove.fndtn.slider', function (e) {
40
42
  if (!!self.cache.active) {
41
43
  e.preventDefault();
42
44
  if ($.data(self.cache.active[0], 'settings').vertical) {
@@ -44,41 +46,70 @@
44
46
  if (!e.pageY) {
45
47
  scroll_offset = window.scrollY;
46
48
  }
47
- self.calculate_position(self.cache.active, (e.pageY ||
48
- e.originalEvent.clientY ||
49
- e.originalEvent.touches[0].clientY ||
50
- e.currentPoint.y)
51
- + scroll_offset);
49
+ self.calculate_position(self.cache.active, self.get_cursor_position(e, 'y') + scroll_offset);
52
50
  } else {
53
- self.calculate_position(self.cache.active, e.pageX ||
54
- e.originalEvent.clientX ||
55
- e.originalEvent.touches[0].clientX ||
56
- e.currentPoint.x);
51
+ self.calculate_position(self.cache.active, self.get_cursor_position(e, 'x'));
57
52
  }
58
53
  }
59
54
  })
60
- .on('mouseup.fndtn.slider touchend.fndtn.slider pointerup.fndtn.slider', function(e) {
55
+ .on('mouseup.fndtn.slider touchend.fndtn.slider pointerup.fndtn.slider', function (e) {
61
56
  self.remove_active_slider();
62
57
  })
63
- .on('change.fndtn.slider', function(e) {
58
+ .on('change.fndtn.slider', function (e) {
64
59
  self.settings.on_change();
65
60
  });
66
61
 
67
62
  self.S(window)
68
- .on('resize.fndtn.slider', self.throttle(function(e) {
63
+ .on('resize.fndtn.slider', self.throttle(function (e) {
69
64
  self.reflow();
70
65
  }, 300));
66
+
67
+ // update slider value as users change input value
68
+ this.S('[' + this.attr_name() + ']').each(function () {
69
+ var slider = $(this),
70
+ handle = slider.children('.range-slider-handle')[0],
71
+ settings = self.initialize_settings(handle);
72
+
73
+ if (settings.display_selector != '') {
74
+ $(settings.display_selector).each(function(){
75
+ if (this.hasOwnProperty('value')) {
76
+ $(this).change(function(){
77
+ // is there a better way to do this?
78
+ slider.foundation("slider", "set_value", $(this).val());
79
+ });
80
+ }
81
+ });
82
+ }
83
+ });
71
84
  },
72
85
 
73
- set_active_slider : function($handle) {
86
+ get_cursor_position : function (e, xy) {
87
+ var pageXY = 'page' + xy.toUpperCase(),
88
+ clientXY = 'client' + xy.toUpperCase(),
89
+ position;
90
+
91
+ if (typeof e[pageXY] !== 'undefined') {
92
+ position = e[pageXY];
93
+ } else if (typeof e.originalEvent[clientXY] !== 'undefined') {
94
+ position = e.originalEvent[clientXY];
95
+ } else if (e.originalEvent.touches && e.originalEvent.touches[0] && typeof e.originalEvent.touches[0][clientXY] !== 'undefined') {
96
+ position = e.originalEvent.touches[0][clientXY];
97
+ } else if (e.currentPoint && typeof e.currentPoint[xy] !== 'undefined') {
98
+ position = e.currentPoint[xy];
99
+ }
100
+
101
+ return position;
102
+ },
103
+
104
+ set_active_slider : function ($handle) {
74
105
  this.cache.active = $handle;
75
106
  },
76
107
 
77
- remove_active_slider : function() {
108
+ remove_active_slider : function () {
78
109
  this.cache.active = null;
79
110
  },
80
111
 
81
- calculate_position : function($handle, cursor_x) {
112
+ calculate_position : function ($handle, cursor_x) {
82
113
  var self = this,
83
114
  settings = $.data($handle[0], 'settings'),
84
115
  handle_l = $.data($handle[0], 'handle_l'),
@@ -86,30 +117,32 @@
86
117
  bar_l = $.data($handle[0], 'bar_l'),
87
118
  bar_o = $.data($handle[0], 'bar_o');
88
119
 
89
- requestAnimationFrame(function(){
120
+ requestAnimationFrame(function () {
90
121
  var pct;
91
122
 
92
123
  if (Foundation.rtl && !settings.vertical) {
93
- pct = self.limit_to(((bar_o+bar_l-cursor_x)/bar_l),0,1);
124
+ pct = self.limit_to(((bar_o + bar_l - cursor_x) / bar_l), 0, 1);
94
125
  } else {
95
- pct = self.limit_to(((cursor_x-bar_o)/bar_l),0,1);
126
+ pct = self.limit_to(((cursor_x - bar_o) / bar_l), 0, 1);
96
127
  }
97
128
 
98
- pct = settings.vertical ? 1-pct : pct;
129
+ pct = settings.vertical ? 1 - pct : pct;
99
130
 
100
- var norm = self.normalized_value(pct, settings.start, settings.end, settings.step);
131
+ var norm = self.normalized_value(pct, settings.start, settings.end, settings.step, settings.precision);
101
132
 
102
133
  self.set_ui($handle, norm);
103
134
  });
104
135
  },
105
136
 
106
- set_ui : function($handle, value) {
137
+ set_ui : function ($handle, value) {
107
138
  var settings = $.data($handle[0], 'settings'),
108
139
  handle_l = $.data($handle[0], 'handle_l'),
109
140
  bar_l = $.data($handle[0], 'bar_l'),
110
141
  norm_pct = this.normalized_percentage(value, settings.start, settings.end),
111
- handle_offset = norm_pct*(bar_l-handle_l)-1,
112
- progress_bar_length = norm_pct*100;
142
+ handle_offset = norm_pct * (bar_l - handle_l) - 1,
143
+ progress_bar_length = norm_pct * 100,
144
+ $handle_parent = $handle.parent(),
145
+ $hidden_inputs = $handle.parent().children('input[type=hidden]');
113
146
 
114
147
  if (Foundation.rtl && !settings.vertical) {
115
148
  handle_offset = -handle_offset;
@@ -124,21 +157,24 @@
124
157
  $handle.siblings('.range-slider-active-segment').css('width', progress_bar_length + '%');
125
158
  }
126
159
 
127
- $handle.parent().attr(this.attr_name(), value).trigger('change').trigger('change.fndtn.slider');
160
+ $handle_parent.attr(this.attr_name(), value).trigger('change.fndtn.slider');
128
161
 
129
- $handle.parent().children('input[type=hidden]').val(value);
162
+ $hidden_inputs.val(value);
163
+ if (settings.trigger_input_change) {
164
+ $hidden_inputs.trigger('change.fndtn.slider');
165
+ }
130
166
 
131
167
  if (!$handle[0].hasAttribute('aria-valuemin')) {
132
168
  $handle.attr({
133
- 'aria-valuemin': settings.start,
134
- 'aria-valuemax': settings.end,
169
+ 'aria-valuemin' : settings.start,
170
+ 'aria-valuemax' : settings.end
135
171
  });
136
172
  }
137
173
  $handle.attr('aria-valuenow', value);
138
174
 
139
175
  if (settings.display_selector != '') {
140
- $(settings.display_selector).each(function(){
141
- if (this.hasOwnProperty('value')) {
176
+ $(settings.display_selector).each(function () {
177
+ if (this.hasAttribute('value')) {
142
178
  $(this).val(value);
143
179
  } else {
144
180
  $(this).text(value);
@@ -148,43 +184,49 @@
148
184
 
149
185
  },
150
186
 
151
- normalized_percentage : function(val, start, end) {
152
- return Math.min(1, (val - start)/(end - start));
187
+ normalized_percentage : function (val, start, end) {
188
+ return Math.min(1, (val - start) / (end - start));
153
189
  },
154
190
 
155
- normalized_value : function(val, start, end, step) {
191
+ normalized_value : function (val, start, end, step, precision) {
156
192
  var range = end - start,
157
- point = val*range,
158
- mod = (point-(point%step)) / step,
193
+ point = val * range,
194
+ mod = (point - (point % step)) / step,
159
195
  rem = point % step,
160
- round = ( rem >= step*0.5 ? step : 0);
161
- return (mod*step + round) + start;
196
+ round = ( rem >= step * 0.5 ? step : 0);
197
+ return ((mod * step + round) + start).toFixed(precision);
162
198
  },
163
199
 
164
- set_translate : function(ele, offset, vertical) {
200
+ set_translate : function (ele, offset, vertical) {
165
201
  if (vertical) {
166
202
  $(ele)
167
- .css('-webkit-transform', 'translateY('+offset+'px)')
168
- .css('-moz-transform', 'translateY('+offset+'px)')
169
- .css('-ms-transform', 'translateY('+offset+'px)')
170
- .css('-o-transform', 'translateY('+offset+'px)')
171
- .css('transform', 'translateY('+offset+'px)');
203
+ .css('-webkit-transform', 'translateY(' + offset + 'px)')
204
+ .css('-moz-transform', 'translateY(' + offset + 'px)')
205
+ .css('-ms-transform', 'translateY(' + offset + 'px)')
206
+ .css('-o-transform', 'translateY(' + offset + 'px)')
207
+ .css('transform', 'translateY(' + offset + 'px)');
172
208
  } else {
173
209
  $(ele)
174
- .css('-webkit-transform', 'translateX('+offset+'px)')
175
- .css('-moz-transform', 'translateX('+offset+'px)')
176
- .css('-ms-transform', 'translateX('+offset+'px)')
177
- .css('-o-transform', 'translateX('+offset+'px)')
178
- .css('transform', 'translateX('+offset+'px)');
210
+ .css('-webkit-transform', 'translateX(' + offset + 'px)')
211
+ .css('-moz-transform', 'translateX(' + offset + 'px)')
212
+ .css('-ms-transform', 'translateX(' + offset + 'px)')
213
+ .css('-o-transform', 'translateX(' + offset + 'px)')
214
+ .css('transform', 'translateX(' + offset + 'px)');
179
215
  }
180
216
  },
181
217
 
182
- limit_to : function(val, min, max) {
218
+ limit_to : function (val, min, max) {
183
219
  return Math.min(Math.max(val, min), max);
184
220
  },
185
221
 
186
- initialize_settings : function(handle) {
187
- var settings = $.extend({}, this.settings, this.data_options($(handle).parent()));
222
+ initialize_settings : function (handle) {
223
+ var settings = $.extend({}, this.settings, this.data_options($(handle).parent())),
224
+ decimal_places_match_result;
225
+
226
+ if (settings.precision === null) {
227
+ decimal_places_match_result = ('' + settings.step).match(/\.([\d]*)/);
228
+ settings.precision = decimal_places_match_result && decimal_places_match_result[1] ? decimal_places_match_result[1].length : 0;
229
+ }
188
230
 
189
231
  if (settings.vertical) {
190
232
  $.data(handle, 'bar_o', $(handle).parent().offset().top);
@@ -199,19 +241,19 @@
199
241
  }
200
242
 
201
243
  $.data(handle, 'bar', $(handle).parent());
202
- $.data(handle, 'settings', settings);
244
+ return $.data(handle, 'settings', settings);
203
245
  },
204
246
 
205
- set_initial_position : function($ele) {
247
+ set_initial_position : function ($ele) {
206
248
  var settings = $.data($ele.children('.range-slider-handle')[0], 'settings'),
207
- initial = (!!settings.initial ? settings.initial : Math.floor((settings.end-settings.start)*0.5/settings.step)*settings.step+settings.start),
249
+ initial = ((typeof settings.initial == 'number' && !isNaN(settings.initial)) ? settings.initial : Math.floor((settings.end - settings.start) * 0.5 / settings.step) * settings.step + settings.start),
208
250
  $handle = $ele.children('.range-slider-handle');
209
251
  this.set_ui($handle, initial);
210
252
  },
211
253
 
212
- set_value : function(value) {
254
+ set_value : function (value) {
213
255
  var self = this;
214
- $('[' + self.attr_name() + ']', this.scope).each(function(){
256
+ $('[' + self.attr_name() + ']', this.scope).each(function () {
215
257
  $(this).attr(self.attr_name(), value);
216
258
  });
217
259
  if (!!$(this.scope).attr(self.attr_name())) {
@@ -220,9 +262,9 @@
220
262
  self.reflow();
221
263
  },
222
264
 
223
- reflow : function() {
265
+ reflow : function () {
224
266
  var self = this;
225
- self.S('[' + this.attr_name() + ']').each(function() {
267
+ self.S('[' + this.attr_name() + ']').each(function () {
226
268
  var handle = $(this).children('.range-slider-handle')[0],
227
269
  val = $(this).attr(self.attr_name());
228
270
  self.initialize_settings(handle);
@@ -4,55 +4,74 @@
4
4
  Foundation.libs.tab = {
5
5
  name : 'tab',
6
6
 
7
- version : '5.4.7',
7
+ version : '5.5.2',
8
8
 
9
9
  settings : {
10
- active_class: 'active',
10
+ active_class : 'active',
11
11
  callback : function () {},
12
- deep_linking: false,
13
- scroll_to_content: true,
14
- is_hover: false
12
+ deep_linking : false,
13
+ scroll_to_content : true,
14
+ is_hover : false
15
15
  },
16
16
 
17
- default_tab_hashes: [],
17
+ default_tab_hashes : [],
18
18
 
19
19
  init : function (scope, method, options) {
20
20
  var self = this,
21
21
  S = this.S;
22
22
 
23
+ // Store the default active tabs which will be referenced when the
24
+ // location hash is absent, as in the case of navigating the tabs and
25
+ // returning to the first viewing via the browser Back button.
26
+ S('[' + this.attr_name() + '] > .active > a', this.scope).each(function () {
27
+ self.default_tab_hashes.push(this.hash);
28
+ });
29
+
30
+ // store the initial href, which is used to allow correct behaviour of the
31
+ // browser back button when deep linking is turned on.
32
+ self.entry_location = window.location.href;
33
+
23
34
  this.bindings(method, options);
24
35
  this.handle_location_hash_change();
25
-
26
- // Store the default active tabs which will be referenced when the
27
- // location hash is absent, as in the case of navigating the tabs and
28
- // returning to the first viewing via the browser Back button.
29
- S('[' + this.attr_name() + '] > .active > a', this.scope).each(function () {
30
- self.default_tab_hashes.push(this.hash);
31
- });
32
36
  },
33
37
 
34
38
  events : function () {
35
39
  var self = this,
36
40
  S = this.S;
37
41
 
38
- var usual_tab_behavior = function (e) {
39
- var settings = S(this).closest('[' + self.attr_name() +']').data(self.attr_name(true) + '-init');
42
+ var usual_tab_behavior = function (e, target) {
43
+ var settings = S(target).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
40
44
  if (!settings.is_hover || Modernizr.touch) {
41
45
  e.preventDefault();
42
46
  e.stopPropagation();
43
- self.toggle_active_tab(S(this).parent());
47
+ self.toggle_active_tab(S(target).parent());
44
48
  }
45
49
  };
46
50
 
47
51
  S(this.scope)
48
52
  .off('.tab')
53
+ // Key event: focus/tab key
54
+ .on('keydown.fndtn.tab', '[' + this.attr_name() + '] > * > a', function(e) {
55
+ var el = this;
56
+ var keyCode = e.keyCode || e.which;
57
+ // if user pressed tab key
58
+ if (keyCode == 9) {
59
+ e.preventDefault();
60
+ // TODO: Change usual_tab_behavior into accessibility function?
61
+ usual_tab_behavior(e, el);
62
+ }
63
+ })
49
64
  // Click event: tab title
50
- .on('focus.fndtn.tab', '[' + this.attr_name() + '] > * > a', usual_tab_behavior )
51
- .on('click.fndtn.tab', '[' + this.attr_name() + '] > * > a', usual_tab_behavior )
65
+ .on('click.fndtn.tab', '[' + this.attr_name() + '] > * > a', function(e) {
66
+ var el = this;
67
+ usual_tab_behavior(e, el);
68
+ })
52
69
  // Hover event: tab title
53
70
  .on('mouseenter.fndtn.tab', '[' + this.attr_name() + '] > * > a', function (e) {
54
- var settings = S(this).closest('[' + self.attr_name() +']').data(self.attr_name(true) + '-init');
55
- if (settings.is_hover) self.toggle_active_tab(S(this).parent());
71
+ var settings = S(this).closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');
72
+ if (settings.is_hover) {
73
+ self.toggle_active_tab(S(this).parent());
74
+ }
56
75
  });
57
76
 
58
77
  // Location hash change event
@@ -103,8 +122,9 @@
103
122
  });
104
123
  },
105
124
 
106
- toggle_active_tab: function (tab, location_hash) {
107
- var S = this.S,
125
+ toggle_active_tab : function (tab, location_hash) {
126
+ var self = this,
127
+ S = self.S,
108
128
  tabs = tab.closest('[' + this.attr_name() + ']'),
109
129
  tab_link = tab.find('a'),
110
130
  anchor = tab.children('a').first(),
@@ -112,7 +132,7 @@
112
132
  target = S(target_hash),
113
133
  siblings = tab.siblings(),
114
134
  settings = tabs.data(this.attr_name(true) + '-init'),
115
- interpret_keyup_action = function(e) {
135
+ interpret_keyup_action = function (e) {
116
136
  // Light modification of Heydon Pickering's Practical ARIA Examples: http://heydonworks.com/practical_aria_examples/js/a11y.js
117
137
 
118
138
  // define current, previous and next (possible) tabs
@@ -157,19 +177,31 @@
157
177
  $('#' + $(document.activeElement).attr('href').substring(1))
158
178
  .attr('aria-hidden', null);
159
179
 
180
+ },
181
+ go_to_hash = function(hash) {
182
+ // This function allows correct behaviour of the browser's back button when deep linking is enabled. Without it
183
+ // the user would get continually redirected to the default hash.
184
+ var is_entry_location = window.location.href === self.entry_location,
185
+ default_hash = settings.scroll_to_content ? self.default_tab_hashes[0] : is_entry_location ? window.location.hash :'fndtn-' + self.default_tab_hashes[0].replace('#', '')
186
+
187
+ if (!(is_entry_location && hash === default_hash)) {
188
+ window.location.hash = hash;
189
+ }
160
190
  };
161
191
 
162
192
  // allow usage of data-tab-content attribute instead of href
163
- if (S(this).data(this.data_attr('tab-content'))) {
164
- target_hash = '#' + S(this).data(this.data_attr('tab-content')).split('#')[1];
193
+ if (anchor.data('tab-content')) {
194
+ target_hash = '#' + anchor.data('tab-content').split('#')[1];
165
195
  target = S(target_hash);
166
196
  }
167
197
 
168
198
  if (settings.deep_linking) {
169
199
 
170
200
  if (settings.scroll_to_content) {
201
+
171
202
  // retain current hash to scroll to content
172
- window.location.hash = location_hash || target_hash;
203
+ go_to_hash(location_hash || target_hash);
204
+
173
205
  if (location_hash == undefined || location_hash == target_hash) {
174
206
  tab.parent()[0].scrollIntoView();
175
207
  } else {
@@ -178,9 +210,9 @@
178
210
  } else {
179
211
  // prefix the hashes so that the browser doesn't scroll down
180
212
  if (location_hash != undefined) {
181
- window.location.hash = 'fndtn-' + location_hash.replace('#', '');
213
+ go_to_hash('fndtn-' + location_hash.replace('#', ''));
182
214
  } else {
183
- window.location.hash = 'fndtn-' + target_hash.replace('#', '');
215
+ go_to_hash('fndtn-' + target_hash.replace('#', ''));
184
216
  }
185
217
  }
186
218
  }
@@ -190,19 +222,19 @@
190
222
  // window (notably in Chrome).
191
223
  // Clean up multiple attr instances to done once
192
224
  tab.addClass(settings.active_class).triggerHandler('opened');
193
- tab_link.attr({"aria-selected": "true", tabindex: 0});
225
+ tab_link.attr({'aria-selected' : 'true', tabindex : 0});
194
226
  siblings.removeClass(settings.active_class)
195
- siblings.find('a').attr({"aria-selected": "false", tabindex: -1});
196
- target.siblings().removeClass(settings.active_class).attr({"aria-hidden": "true", tabindex: -1});
197
- target.addClass(settings.active_class).attr('aria-hidden', 'false').removeAttr("tabindex");
227
+ siblings.find('a').attr({'aria-selected' : 'false', tabindex : -1});
228
+ target.siblings().removeClass(settings.active_class).attr({'aria-hidden' : 'true', tabindex : -1});
229
+ target.addClass(settings.active_class).attr('aria-hidden', 'false').removeAttr('tabindex');
198
230
  settings.callback(tab);
199
- target.triggerHandler('toggled', [tab]);
200
- tabs.triggerHandler('toggled', [target]);
231
+ target.triggerHandler('toggled', [target]);
232
+ tabs.triggerHandler('toggled', [tab]);
201
233
 
202
234
  tab_link.off('keydown').on('keydown', interpret_keyup_action );
203
235
  },
204
236
 
205
- data_attr: function (str) {
237
+ data_attr : function (str) {
206
238
  if (this.namespace.length > 0) {
207
239
  return this.namespace + '-' + str;
208
240
  }