foundation-rails 5.5.3.2 → 6.1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +2 -8
  4. data/Rakefile +23 -0
  5. data/app/views/foundation/rails/styleguide/show.html.erb +2 -5
  6. data/bower.json +2 -2
  7. data/lib/foundation/rails/version.rb +1 -1
  8. data/lib/generators/foundation/install_generator.rb +6 -3
  9. data/lib/generators/foundation/templates/_settings.scss +546 -0
  10. data/lib/generators/foundation/templates/application.html.erb +0 -1
  11. data/lib/generators/foundation/templates/application.html.haml +0 -2
  12. data/lib/generators/foundation/templates/application.html.slim +0 -2
  13. data/lib/generators/foundation/templates/foundation_and_overrides.scss +51 -0
  14. data/vendor/assets/js/foundation.abide.js +418 -0
  15. data/vendor/assets/js/foundation.accordion.js +229 -0
  16. data/vendor/assets/js/foundation.accordionMenu.js +262 -0
  17. data/vendor/assets/js/foundation.core.js +378 -0
  18. data/vendor/assets/js/foundation.drilldown.js +321 -0
  19. data/vendor/assets/js/foundation.dropdown.js +390 -0
  20. data/vendor/assets/js/foundation.dropdownMenu.js +391 -0
  21. data/vendor/assets/js/foundation.equalizer.js +274 -0
  22. data/vendor/assets/js/foundation.interchange.js +184 -0
  23. data/vendor/assets/js/foundation.js +28 -0
  24. data/vendor/assets/js/foundation.magellan.js +212 -0
  25. data/vendor/assets/js/foundation.offcanvas.js +371 -0
  26. data/vendor/assets/js/foundation.orbit.js +419 -0
  27. data/vendor/assets/js/foundation.responsiveMenu.js +145 -0
  28. data/vendor/assets/js/foundation.responsiveToggle.js +106 -0
  29. data/vendor/assets/js/foundation.reveal.js +478 -0
  30. data/vendor/assets/js/foundation.slider.js +484 -0
  31. data/vendor/assets/js/foundation.sticky.js +436 -0
  32. data/vendor/assets/js/foundation.tabs.js +306 -0
  33. data/vendor/assets/js/foundation.toggler.js +147 -0
  34. data/vendor/assets/js/foundation.tooltip.js +429 -0
  35. data/vendor/assets/js/foundation.util.box.js +169 -0
  36. data/vendor/assets/js/foundation.util.keyboard.js +115 -0
  37. data/vendor/assets/js/foundation.util.mediaQuery.js +210 -0
  38. data/vendor/assets/js/foundation.util.motion.js +89 -0
  39. data/vendor/assets/js/foundation.util.nest.js +64 -0
  40. data/vendor/assets/js/foundation.util.timerAndImageLoader.js +78 -0
  41. data/vendor/assets/js/foundation.util.touch.js +339 -0
  42. data/vendor/assets/js/foundation.util.triggers.js +222 -0
  43. data/vendor/assets/scss/_global.scss +626 -0
  44. data/vendor/assets/scss/components/_accordion-menu.scss +32 -0
  45. data/vendor/assets/scss/components/_accordion.scss +113 -0
  46. data/vendor/assets/scss/components/_badge.scss +55 -0
  47. data/vendor/assets/scss/components/_breadcrumbs.scss +94 -0
  48. data/vendor/assets/scss/components/_button-group.scss +130 -0
  49. data/vendor/assets/scss/components/_button.scss +265 -0
  50. data/vendor/assets/scss/components/_callout.scss +105 -0
  51. data/vendor/assets/scss/components/_close-button.scss +61 -0
  52. data/vendor/assets/scss/components/_drilldown.scss +75 -0
  53. data/vendor/assets/scss/components/_dropdown-menu.scss +148 -0
  54. data/vendor/assets/scss/components/_dropdown.scss +64 -0
  55. data/vendor/assets/scss/components/_flex-video.scss +63 -0
  56. data/vendor/assets/scss/components/_float.scss +27 -0
  57. data/vendor/assets/scss/components/_label.scss +56 -0
  58. data/vendor/assets/scss/components/_media-object.scss +74 -0
  59. data/vendor/assets/scss/components/_menu.scss +209 -0
  60. data/vendor/assets/scss/components/_off-canvas.scss +180 -0
  61. data/vendor/assets/scss/components/_orbit.scss +193 -0
  62. data/vendor/assets/scss/components/_pagination.scss +158 -0
  63. data/vendor/assets/scss/components/_progress-bar.scss +83 -0
  64. data/vendor/assets/scss/components/_reveal.scss +156 -0
  65. data/vendor/assets/scss/components/_slider.scss +158 -0
  66. data/vendor/assets/scss/components/_sticky.scss +38 -0
  67. data/vendor/assets/scss/components/_switch.scss +232 -0
  68. data/vendor/assets/scss/components/_table.scss +213 -0
  69. data/vendor/assets/scss/components/_tabs.scss +170 -0
  70. data/vendor/assets/scss/components/_thumbnail.scss +54 -0
  71. data/vendor/assets/scss/components/_title-bar.scss +68 -0
  72. data/vendor/assets/scss/components/_tooltip.scss +100 -0
  73. data/vendor/assets/scss/components/_top-bar.scss +89 -0
  74. data/vendor/assets/scss/components/_visibility.scss +131 -0
  75. data/vendor/assets/scss/forms/_checkbox.scss +36 -0
  76. data/vendor/assets/scss/forms/_error.scss +82 -0
  77. data/vendor/assets/scss/forms/_fieldset.scss +53 -0
  78. data/vendor/assets/scss/forms/_forms.scss +32 -0
  79. data/vendor/assets/scss/forms/_help-text.scss +30 -0
  80. data/vendor/assets/scss/forms/_input-group.scss +91 -0
  81. data/vendor/assets/scss/forms/_label.scss +48 -0
  82. data/vendor/assets/scss/forms/_select.scss +63 -0
  83. data/vendor/assets/scss/forms/_text.scss +154 -0
  84. data/vendor/assets/scss/foundation.scss +91 -0
  85. data/vendor/assets/scss/grid/_classes.scss +153 -0
  86. data/vendor/assets/scss/grid/_column.scss +124 -0
  87. data/vendor/assets/scss/grid/_flex-grid.scss +281 -0
  88. data/vendor/assets/scss/grid/_grid.scss +48 -0
  89. data/vendor/assets/scss/grid/_gutter.scss +34 -0
  90. data/vendor/assets/scss/grid/_layout.scss +33 -0
  91. data/vendor/assets/scss/grid/_position.scss +72 -0
  92. data/vendor/assets/scss/grid/_row.scss +97 -0
  93. data/vendor/assets/scss/grid/_size.scss +24 -0
  94. data/vendor/assets/scss/settings/_settings.scss +547 -0
  95. data/vendor/assets/scss/typography/_alignment.scss +22 -0
  96. data/vendor/assets/scss/typography/_base.scss +439 -0
  97. data/vendor/assets/scss/typography/_helpers.scss +77 -0
  98. data/vendor/assets/scss/typography/_print.scss +73 -0
  99. data/vendor/assets/scss/typography/_typography.scss +28 -0
  100. data/vendor/assets/scss/util/_breakpoint.scss +266 -0
  101. data/vendor/assets/scss/util/_color.scss +41 -0
  102. data/vendor/assets/scss/util/_mixins.scss +223 -0
  103. data/vendor/assets/scss/util/_selector.scss +40 -0
  104. data/vendor/assets/scss/util/_unit.scss +90 -0
  105. data/vendor/assets/scss/util/_util.scss +15 -0
  106. data/vendor/assets/scss/util/_value.scss +126 -0
  107. metadata +97 -64
  108. data/update-gem.sh +0 -20
  109. data/vendor/assets/javascripts/foundation.js +0 -17
  110. data/vendor/assets/javascripts/foundation/foundation.abide.js +0 -426
  111. data/vendor/assets/javascripts/foundation/foundation.accordion.js +0 -125
  112. data/vendor/assets/javascripts/foundation/foundation.alert.js +0 -43
  113. data/vendor/assets/javascripts/foundation/foundation.clearing.js +0 -586
  114. data/vendor/assets/javascripts/foundation/foundation.dropdown.js +0 -468
  115. data/vendor/assets/javascripts/foundation/foundation.equalizer.js +0 -104
  116. data/vendor/assets/javascripts/foundation/foundation.interchange.js +0 -360
  117. data/vendor/assets/javascripts/foundation/foundation.joyride.js +0 -935
  118. data/vendor/assets/javascripts/foundation/foundation.js +0 -732
  119. data/vendor/assets/javascripts/foundation/foundation.magellan.js +0 -214
  120. data/vendor/assets/javascripts/foundation/foundation.offcanvas.js +0 -225
  121. data/vendor/assets/javascripts/foundation/foundation.orbit.js +0 -476
  122. data/vendor/assets/javascripts/foundation/foundation.reveal.js +0 -522
  123. data/vendor/assets/javascripts/foundation/foundation.slider.js +0 -296
  124. data/vendor/assets/javascripts/foundation/foundation.tab.js +0 -247
  125. data/vendor/assets/javascripts/foundation/foundation.tooltip.js +0 -348
  126. data/vendor/assets/javascripts/foundation/foundation.topbar.js +0 -458
  127. data/vendor/assets/javascripts/vendor/modernizr.js +0 -1406
  128. data/vendor/assets/stylesheets/foundation.scss +0 -42
  129. data/vendor/assets/stylesheets/foundation/_functions.scss +0 -156
  130. data/vendor/assets/stylesheets/foundation/_settings.scss +0 -1489
  131. data/vendor/assets/stylesheets/foundation/components/_accordion.scss +0 -161
  132. data/vendor/assets/stylesheets/foundation/components/_alert-boxes.scss +0 -128
  133. data/vendor/assets/stylesheets/foundation/components/_block-grid.scss +0 -133
  134. data/vendor/assets/stylesheets/foundation/components/_breadcrumbs.scss +0 -132
  135. data/vendor/assets/stylesheets/foundation/components/_button-groups.scss +0 -208
  136. data/vendor/assets/stylesheets/foundation/components/_buttons.scss +0 -261
  137. data/vendor/assets/stylesheets/foundation/components/_clearing.scss +0 -260
  138. data/vendor/assets/stylesheets/foundation/components/_dropdown-buttons.scss +0 -130
  139. data/vendor/assets/stylesheets/foundation/components/_dropdown.scss +0 -269
  140. data/vendor/assets/stylesheets/foundation/components/_flex-video.scss +0 -51
  141. data/vendor/assets/stylesheets/foundation/components/_forms.scss +0 -607
  142. data/vendor/assets/stylesheets/foundation/components/_global.scss +0 -566
  143. data/vendor/assets/stylesheets/foundation/components/_grid.scss +0 -292
  144. data/vendor/assets/stylesheets/foundation/components/_icon-bar.scss +0 -460
  145. data/vendor/assets/stylesheets/foundation/components/_inline-lists.scss +0 -58
  146. data/vendor/assets/stylesheets/foundation/components/_joyride.scss +0 -220
  147. data/vendor/assets/stylesheets/foundation/components/_keystrokes.scss +0 -60
  148. data/vendor/assets/stylesheets/foundation/components/_labels.scss +0 -106
  149. data/vendor/assets/stylesheets/foundation/components/_magellan.scss +0 -34
  150. data/vendor/assets/stylesheets/foundation/components/_offcanvas.scss +0 -606
  151. data/vendor/assets/stylesheets/foundation/components/_orbit.scss +0 -388
  152. data/vendor/assets/stylesheets/foundation/components/_pagination.scss +0 -163
  153. data/vendor/assets/stylesheets/foundation/components/_panels.scss +0 -107
  154. data/vendor/assets/stylesheets/foundation/components/_pricing-tables.scss +0 -150
  155. data/vendor/assets/stylesheets/foundation/components/_progress-bars.scss +0 -85
  156. data/vendor/assets/stylesheets/foundation/components/_range-slider.scss +0 -177
  157. data/vendor/assets/stylesheets/foundation/components/_reveal.scss +0 -212
  158. data/vendor/assets/stylesheets/foundation/components/_side-nav.scss +0 -120
  159. data/vendor/assets/stylesheets/foundation/components/_split-buttons.scss +0 -203
  160. data/vendor/assets/stylesheets/foundation/components/_sub-nav.scss +0 -125
  161. data/vendor/assets/stylesheets/foundation/components/_switches.scss +0 -241
  162. data/vendor/assets/stylesheets/foundation/components/_tables.scss +0 -135
  163. data/vendor/assets/stylesheets/foundation/components/_tabs.scss +0 -142
  164. data/vendor/assets/stylesheets/foundation/components/_thumbs.scss +0 -66
  165. data/vendor/assets/stylesheets/foundation/components/_tooltips.scss +0 -142
  166. data/vendor/assets/stylesheets/foundation/components/_top-bar.scss +0 -745
  167. data/vendor/assets/stylesheets/foundation/components/_type.scss +0 -525
  168. data/vendor/assets/stylesheets/foundation/components/_visibility.scss +0 -425
  169. data/vendor/assets/stylesheets/normalize.scss +0 -424
@@ -0,0 +1,484 @@
1
+ /**
2
+ * Slider module.
3
+ * @module foundation.slider
4
+ * @requires foundation.util.motion
5
+ * @requires foundation.util.triggers
6
+ * @requires foundation.util.keyboard
7
+ * @requires foundation.util.touch
8
+ */
9
+ !function($, Foundation){
10
+ 'use strict';
11
+
12
+ /**
13
+ * Creates a new instance of a drilldown menu.
14
+ * @class
15
+ * @param {jQuery} element - jQuery object to make into an accordion menu.
16
+ * @param {Object} options - Overrides to the default plugin settings.
17
+ */
18
+ function Slider(element, options){
19
+ this.$element = element;
20
+ this.options = $.extend({}, Slider.defaults, this.$element.data(), options);
21
+
22
+ this._init();
23
+
24
+ Foundation.registerPlugin(this, 'Slider');
25
+ Foundation.Keyboard.register('Slider', {
26
+ 'ltr': {
27
+ 'ARROW_RIGHT': 'increase',
28
+ 'ARROW_UP': 'increase',
29
+ 'ARROW_DOWN': 'decrease',
30
+ 'ARROW_LEFT': 'decrease',
31
+ 'SHIFT_ARROW_RIGHT': 'increase_fast',
32
+ 'SHIFT_ARROW_UP': 'increase_fast',
33
+ 'SHIFT_ARROW_DOWN': 'decrease_fast',
34
+ 'SHIFT_ARROW_LEFT': 'decrease_fast'
35
+ },
36
+ 'rtl': {
37
+ 'ARROW_LEFT': 'increase',
38
+ 'ARROW_RIGHT': 'decrease',
39
+ 'SHIFT_ARROW_LEFT': 'increase_fast',
40
+ 'SHIFT_ARROW_RIGHT': 'decrease_fast'
41
+ }
42
+ });
43
+ }
44
+
45
+ Slider.defaults = {
46
+ /**
47
+ * Minimum value for the slider scale.
48
+ * @option
49
+ * @example 0
50
+ */
51
+ start: 0,
52
+ /**
53
+ * Maximum value for the slider scale.
54
+ * @option
55
+ * @example 100
56
+ */
57
+ end: 100,
58
+ /**
59
+ * Minimum value change per change event. Not Currently Implemented!
60
+
61
+ */
62
+ step: 1,
63
+ /**
64
+ * Value at which the handle/input *(left handle/first input)* should be set to on initialization.
65
+ * @option
66
+ * @example 0
67
+ */
68
+ initialStart: 0,
69
+ /**
70
+ * Value at which the right handle/second input should be set to on initialization.
71
+ * @option
72
+ * @example 100
73
+ */
74
+ initialEnd: 100,
75
+ /**
76
+ * Allows the input to be located outside the container and visible. Set to by the JS
77
+ * @option
78
+ * @example false
79
+ */
80
+ binding: false,
81
+ /**
82
+ * Allows the user to click/tap on the slider bar to select a value.
83
+ * @option
84
+ * @example true
85
+ */
86
+ clickSelect: true,
87
+ /**
88
+ * Set to true and use the `vertical` class to change alignment to vertical.
89
+ * @option
90
+ * @example false
91
+ */
92
+ vertical: false,
93
+ /**
94
+ * Allows the user to drag the slider handle(s) to select a value.
95
+ * @option
96
+ * @example true
97
+ */
98
+ draggable: true,
99
+ /**
100
+ * Disables the slider and prevents event listeners from being applied. Double checked by JS with `disabledClass`.
101
+ * @option
102
+ * @example false
103
+ */
104
+ disabled: false,
105
+ /**
106
+ * Allows the use of two handles. Double checked by the JS. Changes some logic handling.
107
+ * @option
108
+ * @example false
109
+ */
110
+ doubleSided: false,
111
+ /**
112
+ * Potential future feature.
113
+ */
114
+ // steps: 100,
115
+ /**
116
+ * Number of decimal places the plugin should go to for floating point precision.
117
+ * @option
118
+ * @example 2
119
+ */
120
+ decimal: 2,
121
+ /**
122
+ * Time delay for dragged elements.
123
+ */
124
+ // dragDelay: 0,
125
+ /**
126
+ * Time, in ms, to animate the movement of a slider handle if user clicks/taps on the bar. Needs to be manually set if updating the transition time in the Sass settings.
127
+ * @option
128
+ * @example 200
129
+ */
130
+ moveTime: 200,//update this if changing the transition time in the sass
131
+ /**
132
+ * Class applied to disabled sliders.
133
+ * @option
134
+ * @example 'disabled'
135
+ */
136
+ disabledClass: 'disabled'
137
+ };
138
+ /**
139
+ * Initilizes the plugin by reading/setting attributes, creating collections and setting the initial position of the handle(s).
140
+ * @function
141
+ * @private
142
+ */
143
+ Slider.prototype._init = function(){
144
+ this.inputs = this.$element.find('input');
145
+ this.handles = this.$element.find('[data-slider-handle]');
146
+
147
+ this.$handle = this.handles.eq(0);
148
+ this.$input = this.inputs.length ? this.inputs.eq(0) : $('#' + this.$handle.attr('aria-controls'));
149
+ this.$fill = this.$element.find('[data-slider-fill]').css(this.options.vertical ? 'height' : 'width', 0);
150
+
151
+ var isDbl = false,
152
+ _this = this;
153
+ if(this.options.disabled || this.$element.hasClass(this.options.disabledClass)){
154
+ this.options.disabled = true;
155
+ this.$element.addClass(this.options.disabledClass);
156
+ }
157
+ if(!this.inputs.length){
158
+ this.inputs = $().add(this.$input);
159
+ this.options.binding = true;
160
+ }
161
+ this._setInitAttr(0);
162
+ this._events(this.$handle);
163
+
164
+ if(this.handles[1]){
165
+ this.options.doubleSided = true;
166
+ this.$handle2 = this.handles.eq(1);
167
+ this.$input2 = this.inputs.length > 1 ? this.inputs.eq(1) : $('#' + this.$handle2.attr('aria-controls'));
168
+
169
+ if(!this.inputs[1]){
170
+ this.inputs = this.inputs.add(this.$input2);
171
+ }
172
+ isDbl = true;
173
+
174
+ this._setHandlePos(this.$handle, this.options.initialStart, true, function(){
175
+
176
+ _this._setHandlePos(_this.$handle2, _this.options.initialEnd);
177
+ });
178
+ // this.$handle.triggerHandler('click.zf.slider');
179
+ this._setInitAttr(1);
180
+ this._events(this.$handle2);
181
+ }
182
+
183
+ if(!isDbl){
184
+ this._setHandlePos(this.$handle, this.options.initialStart, true);
185
+ }
186
+ };
187
+ /**
188
+ * Sets the position of the selected handle and fill bar.
189
+ * @function
190
+ * @private
191
+ * @param {jQuery} $hndl - the selected handle to move.
192
+ * @param {Number} location - floating point between the start and end values of the slider bar.
193
+ * @param {Function} cb - callback function to fire on completion.
194
+ * @fires Slider#moved
195
+ */
196
+ Slider.prototype._setHandlePos = function($hndl, location, noInvert, cb){
197
+ //might need to alter that slightly for bars that will have odd number selections.
198
+ location = parseFloat(location);//on input change events, convert string to number...grumble.
199
+ // prevent slider from running out of bounds
200
+ if(location < this.options.start){ location = this.options.start; }
201
+ else if(location > this.options.end){ location = this.options.end; }
202
+
203
+ var isDbl = this.options.doubleSided,
204
+ callback = cb || null;
205
+
206
+ if(isDbl){
207
+ if(this.handles.index($hndl) === 0){
208
+ var h2Val = parseFloat(this.$handle2.attr('aria-valuenow'));
209
+ location = location >= h2Val ? h2Val - this.options.step : location;
210
+ }else{
211
+ var h1Val = parseFloat(this.$handle.attr('aria-valuenow'));
212
+ location = location <= h1Val ? h1Val + this.options.step : location;
213
+ }
214
+ }
215
+
216
+ if(this.options.vertical && !noInvert){
217
+ location = this.options.end - location;
218
+ }
219
+ var _this = this,
220
+ vert = this.options.vertical,
221
+ hOrW = vert ? 'height' : 'width',
222
+ lOrT = vert ? 'top' : 'left',
223
+ halfOfHandle = $hndl[0].getBoundingClientRect()[hOrW] / 2,
224
+ elemDim = this.$element[0].getBoundingClientRect()[hOrW],
225
+ pctOfBar = percent(location, this.options.end).toFixed(2),
226
+ pxToMove = (elemDim - halfOfHandle) * pctOfBar,
227
+ movement = (percent(pxToMove, elemDim) * 100).toFixed(this.options.decimal),
228
+ location = location > 0 ? parseFloat(location.toFixed(this.options.decimal)) : 0,
229
+ anim, prog, start = null, css = {};
230
+
231
+ this._setValues($hndl, location);
232
+
233
+ if(this.options.doubleSided){//update to calculate based on values set to respective inputs??
234
+ var isLeftHndl = this.handles.index($hndl) === 0,
235
+ dim,
236
+ idx = this.handles.index($hndl);
237
+
238
+ if(isLeftHndl){
239
+ css[lOrT] = (pctOfBar > 0 ? pctOfBar * 100 : 0) + '%';//
240
+ dim = /*Math.abs*/((percent(this.$handle2.position()[lOrT] + halfOfHandle, elemDim) - parseFloat(pctOfBar)) * 100).toFixed(this.options.decimal) + '%';
241
+ css['min-' + hOrW] = dim;
242
+ if(cb && typeof cb === 'function'){ cb(); }
243
+ }else{
244
+ var handleLeft = parseFloat(this.$handle[0].style.left);
245
+ location = (location < 100 ? location : 100) - (!isNaN(handleLeft) ? handleLeft : this.options.end - location);
246
+ css['min-' + hOrW] = location + '%';
247
+ }
248
+ }
249
+
250
+ this.$element.one('finished.zf.animate', function(){
251
+ _this.animComplete = true;
252
+ /**
253
+ * Fires when the handle is done moving.
254
+ * @event Slider#moved
255
+ */
256
+ _this.$element.trigger('moved.zf.slider', [$hndl]);
257
+ });
258
+ var moveTime = _this.$element.data('dragging') ? 1000/60 : _this.options.moveTime;
259
+ /*var move = new */Foundation.Move(moveTime, $hndl, function(){
260
+ $hndl.css(lOrT, movement + '%');
261
+ if(!_this.options.doubleSided){
262
+ _this.$fill.css(hOrW, pctOfBar * 100 + '%');
263
+ }else{
264
+ _this.$fill.css(css);
265
+ }
266
+ });
267
+ // move.do();
268
+ };
269
+ /**
270
+ * Sets the initial attribute for the slider element.
271
+ * @function
272
+ * @private
273
+ * @param {Number} idx - index of the current handle/input to use.
274
+ */
275
+ Slider.prototype._setInitAttr = function(idx){
276
+ var id = this.inputs.eq(idx).attr('id') || Foundation.GetYoDigits(6, 'slider');
277
+ this.inputs.eq(idx).attr({
278
+ 'id': id,
279
+ 'max': this.options.end,
280
+ 'min': this.options.start
281
+
282
+ });
283
+ this.handles.eq(idx).attr({
284
+ 'role': 'slider',
285
+ 'aria-controls': id,
286
+ 'aria-valuemax': this.options.end,
287
+ 'aria-valuemin': this.options.start,
288
+ 'aria-valuenow': idx === 0 ? this.options.initialStart : this.options.initialEnd,
289
+ 'aria-orientation': this.options.vertical ? 'vertical' : 'horizontal',
290
+ 'tabindex': 0
291
+ });
292
+ };
293
+ /**
294
+ * Sets the input and `aria-valuenow` values for the slider element.
295
+ * @function
296
+ * @private
297
+ * @param {jQuery} $handle - the currently selected handle.
298
+ * @param {Number} val - floating point of the new value.
299
+ */
300
+ Slider.prototype._setValues = function($handle, val){
301
+ var idx = this.options.doubleSided ? this.handles.index($handle) : 0;
302
+ this.inputs.eq(idx).val(val);
303
+ $handle.attr('aria-valuenow', val);
304
+ };
305
+ /**
306
+ * Handles events on the slider element.
307
+ * Calculates the new location of the current handle.
308
+ * If there are two handles and the bar was clicked, it determines which handle to move.
309
+ * @function
310
+ * @private
311
+ * @param {Object} e - the `event` object passed from the listener.
312
+ * @param {jQuery} $handle - the current handle to calculate for, if selected.
313
+ * @param {Number} val - floating point number for the new value of the slider.
314
+ */
315
+ Slider.prototype._handleEvent = function(e, $handle, val){
316
+ var value, hasVal;
317
+ if(!val){//click or drag events
318
+ e.preventDefault();
319
+ var _this = this,
320
+ vertical = this.options.vertical,
321
+ param = vertical ? 'height' : 'width',
322
+ direction = vertical ? 'top' : 'left',
323
+ pageXY = vertical ? e.pageY : e.pageX,
324
+ halfOfHandle = this.$handle[0].getBoundingClientRect()[param] / 2,
325
+ barDim = this.$element[0].getBoundingClientRect()[param],
326
+ barOffset = (this.$element.offset()[direction] - pageXY),
327
+ barXY = barOffset > 0 ? -halfOfHandle : (barOffset - halfOfHandle) < -barDim ? barDim : Math.abs(barOffset),//if the cursor position is less than or greater than the elements bounding coordinates, set coordinates within those bounds
328
+ // eleDim = this.$element[0].getBoundingClientRect()[param],
329
+ offsetPct = percent(barXY, barDim);
330
+ value = (this.options.end - this.options.start) * offsetPct;
331
+ hasVal = false;
332
+
333
+ if(!$handle){//figure out which handle it is, pass it to the next function.
334
+ var firstHndlPos = absPosition(this.$handle, direction, barXY, param),
335
+ secndHndlPos = absPosition(this.$handle2, direction, barXY, param);
336
+ $handle = firstHndlPos <= secndHndlPos ? this.$handle : this.$handle2;
337
+ }
338
+
339
+ }else{//change event on input
340
+ value = val;
341
+ hasVal = true;
342
+ }
343
+
344
+ this._setHandlePos($handle, value, hasVal);
345
+ };
346
+ /**
347
+ * Adds event listeners to the slider elements.
348
+ * @function
349
+ * @private
350
+ * @param {jQuery} $handle - the current handle to apply listeners to.
351
+ */
352
+ Slider.prototype._events = function($handle){
353
+ if(this.options.disabled){ return false; }
354
+
355
+ var _this = this,
356
+ curHandle,
357
+ timer;
358
+
359
+ this.inputs.off('change.zf.slider').on('change.zf.slider', function(e){
360
+ var idx = _this.inputs.index($(this));
361
+ _this._handleEvent(e, _this.handles.eq(idx), $(this).val());
362
+ });
363
+
364
+ if(this.options.clickSelect){
365
+ this.$element.off('click.zf.slider').on('click.zf.slider', function(e){
366
+ if(_this.$element.data('dragging')){ return false; }
367
+ _this.animComplete = false;
368
+ if(_this.options.doubleSided){
369
+ _this._handleEvent(e);
370
+ }else{
371
+ _this._handleEvent(e, _this.$handle);
372
+ }
373
+ });
374
+ }
375
+
376
+ if(this.options.draggable){
377
+ this.handles.addTouch();
378
+ // var curHandle,
379
+ // timer,
380
+ var $body = $('body');
381
+ $handle
382
+ .off('mousedown.zf.slider')
383
+ .on('mousedown.zf.slider', function(e){
384
+ $handle.addClass('is-dragging');
385
+ _this.$fill.addClass('is-dragging');//
386
+ _this.$element.data('dragging', true);
387
+ _this.animComplete = false;
388
+ curHandle = $(e.currentTarget);
389
+
390
+ $body.on('mousemove.zf.slider', function(e){
391
+ e.preventDefault();
392
+
393
+ // timer = setTimeout(function(){
394
+ _this._handleEvent(e, curHandle);
395
+ // }, _this.options.dragDelay);
396
+ }).on('mouseup.zf.slider', function(e){
397
+ // clearTimeout(timer);
398
+ _this.animComplete = true;
399
+ _this._handleEvent(e, curHandle);
400
+ $handle.removeClass('is-dragging');
401
+ _this.$fill.removeClass('is-dragging');
402
+ _this.$element.data('dragging', false);
403
+ // Foundation.reflow(_this.$element, 'slider');
404
+ $body.off('mousemove.zf.slider mouseup.zf.slider');
405
+ });
406
+ });
407
+ }
408
+ $handle.off('keydown.zf.slider').on('keydown.zf.slider', function(e){
409
+ var idx = _this.options.doubleSided ? _this.handles.index($(this)) : 0,
410
+ oldValue = parseFloat(_this.inputs.eq(idx).val()),
411
+ newValue;
412
+
413
+ var _$handle = $(this);
414
+
415
+ // handle keyboard event with keyboard util
416
+ Foundation.Keyboard.handleKey(e, 'Slider', {
417
+ decrease: function() {
418
+ newValue = oldValue - _this.options.step;
419
+ },
420
+ increase: function() {
421
+ newValue = oldValue + _this.options.step;
422
+ },
423
+ decrease_fast: function() {
424
+ newValue = oldValue - _this.options.step * 10;
425
+ },
426
+ increase_fast: function() {
427
+ newValue = oldValue + _this.options.step * 10;
428
+ },
429
+ handled: function() { // only set handle pos when event was handled specially
430
+ e.preventDefault();
431
+ _this._setHandlePos(_$handle, newValue, true);
432
+ }
433
+ });
434
+ /*if (newValue) { // if pressed key has special function, update value
435
+ e.preventDefault();
436
+ _this._setHandlePos(_$handle, newValue);
437
+ }*/
438
+ });
439
+ };
440
+ /**
441
+ * Destroys the slider plugin.
442
+ */
443
+ Slider.prototype.destroy = function(){
444
+ this.handles.off('.zf.slider');
445
+ this.inputs.off('.zf.slider');
446
+ this.$element.off('.zf.slider');
447
+
448
+ Foundation.unregisterPlugin(this);
449
+ };
450
+
451
+ Foundation.plugin(Slider, 'Slider');
452
+
453
+ function percent(frac, num){
454
+ return (frac / num);
455
+ }
456
+ function absPosition($handle, dir, clickPos, param){
457
+ return Math.abs(($handle.position()[dir] + ($handle[param]() / 2)) - clickPos);
458
+ }
459
+ }(jQuery, window.Foundation);
460
+
461
+ //*********this is in case we go to static, absolute positions instead of dynamic positioning********
462
+ // this.setSteps(function(){
463
+ // _this._events();
464
+ // var initStart = _this.options.positions[_this.options.initialStart - 1] || null;
465
+ // var initEnd = _this.options.initialEnd ? _this.options.position[_this.options.initialEnd - 1] : null;
466
+ // if(initStart || initEnd){
467
+ // _this._handleEvent(initStart, initEnd);
468
+ // }
469
+ // });
470
+
471
+ //***********the other part of absolute positions*************
472
+ // Slider.prototype.setSteps = function(cb){
473
+ // var posChange = this.$element.outerWidth() / this.options.steps;
474
+ // var counter = 0
475
+ // while(counter < this.options.steps){
476
+ // if(counter){
477
+ // this.options.positions.push(this.options.positions[counter - 1] + posChange);
478
+ // }else{
479
+ // this.options.positions.push(posChange);
480
+ // }
481
+ // counter++;
482
+ // }
483
+ // cb();
484
+ // };