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.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +2 -8
- data/Rakefile +23 -0
- data/app/views/foundation/rails/styleguide/show.html.erb +2 -5
- data/bower.json +2 -2
- data/lib/foundation/rails/version.rb +1 -1
- data/lib/generators/foundation/install_generator.rb +6 -3
- data/lib/generators/foundation/templates/_settings.scss +546 -0
- data/lib/generators/foundation/templates/application.html.erb +0 -1
- data/lib/generators/foundation/templates/application.html.haml +0 -2
- data/lib/generators/foundation/templates/application.html.slim +0 -2
- data/lib/generators/foundation/templates/foundation_and_overrides.scss +51 -0
- data/vendor/assets/js/foundation.abide.js +418 -0
- data/vendor/assets/js/foundation.accordion.js +229 -0
- data/vendor/assets/js/foundation.accordionMenu.js +262 -0
- data/vendor/assets/js/foundation.core.js +378 -0
- data/vendor/assets/js/foundation.drilldown.js +321 -0
- data/vendor/assets/js/foundation.dropdown.js +390 -0
- data/vendor/assets/js/foundation.dropdownMenu.js +391 -0
- data/vendor/assets/js/foundation.equalizer.js +274 -0
- data/vendor/assets/js/foundation.interchange.js +184 -0
- data/vendor/assets/js/foundation.js +28 -0
- data/vendor/assets/js/foundation.magellan.js +212 -0
- data/vendor/assets/js/foundation.offcanvas.js +371 -0
- data/vendor/assets/js/foundation.orbit.js +419 -0
- data/vendor/assets/js/foundation.responsiveMenu.js +145 -0
- data/vendor/assets/js/foundation.responsiveToggle.js +106 -0
- data/vendor/assets/js/foundation.reveal.js +478 -0
- data/vendor/assets/js/foundation.slider.js +484 -0
- data/vendor/assets/js/foundation.sticky.js +436 -0
- data/vendor/assets/js/foundation.tabs.js +306 -0
- data/vendor/assets/js/foundation.toggler.js +147 -0
- data/vendor/assets/js/foundation.tooltip.js +429 -0
- data/vendor/assets/js/foundation.util.box.js +169 -0
- data/vendor/assets/js/foundation.util.keyboard.js +115 -0
- data/vendor/assets/js/foundation.util.mediaQuery.js +210 -0
- data/vendor/assets/js/foundation.util.motion.js +89 -0
- data/vendor/assets/js/foundation.util.nest.js +64 -0
- data/vendor/assets/js/foundation.util.timerAndImageLoader.js +78 -0
- data/vendor/assets/js/foundation.util.touch.js +339 -0
- data/vendor/assets/js/foundation.util.triggers.js +222 -0
- data/vendor/assets/scss/_global.scss +626 -0
- data/vendor/assets/scss/components/_accordion-menu.scss +32 -0
- data/vendor/assets/scss/components/_accordion.scss +113 -0
- data/vendor/assets/scss/components/_badge.scss +55 -0
- data/vendor/assets/scss/components/_breadcrumbs.scss +94 -0
- data/vendor/assets/scss/components/_button-group.scss +130 -0
- data/vendor/assets/scss/components/_button.scss +265 -0
- data/vendor/assets/scss/components/_callout.scss +105 -0
- data/vendor/assets/scss/components/_close-button.scss +61 -0
- data/vendor/assets/scss/components/_drilldown.scss +75 -0
- data/vendor/assets/scss/components/_dropdown-menu.scss +148 -0
- data/vendor/assets/scss/components/_dropdown.scss +64 -0
- data/vendor/assets/scss/components/_flex-video.scss +63 -0
- data/vendor/assets/scss/components/_float.scss +27 -0
- data/vendor/assets/scss/components/_label.scss +56 -0
- data/vendor/assets/scss/components/_media-object.scss +74 -0
- data/vendor/assets/scss/components/_menu.scss +209 -0
- data/vendor/assets/scss/components/_off-canvas.scss +180 -0
- data/vendor/assets/scss/components/_orbit.scss +193 -0
- data/vendor/assets/scss/components/_pagination.scss +158 -0
- data/vendor/assets/scss/components/_progress-bar.scss +83 -0
- data/vendor/assets/scss/components/_reveal.scss +156 -0
- data/vendor/assets/scss/components/_slider.scss +158 -0
- data/vendor/assets/scss/components/_sticky.scss +38 -0
- data/vendor/assets/scss/components/_switch.scss +232 -0
- data/vendor/assets/scss/components/_table.scss +213 -0
- data/vendor/assets/scss/components/_tabs.scss +170 -0
- data/vendor/assets/scss/components/_thumbnail.scss +54 -0
- data/vendor/assets/scss/components/_title-bar.scss +68 -0
- data/vendor/assets/scss/components/_tooltip.scss +100 -0
- data/vendor/assets/scss/components/_top-bar.scss +89 -0
- data/vendor/assets/scss/components/_visibility.scss +131 -0
- data/vendor/assets/scss/forms/_checkbox.scss +36 -0
- data/vendor/assets/scss/forms/_error.scss +82 -0
- data/vendor/assets/scss/forms/_fieldset.scss +53 -0
- data/vendor/assets/scss/forms/_forms.scss +32 -0
- data/vendor/assets/scss/forms/_help-text.scss +30 -0
- data/vendor/assets/scss/forms/_input-group.scss +91 -0
- data/vendor/assets/scss/forms/_label.scss +48 -0
- data/vendor/assets/scss/forms/_select.scss +63 -0
- data/vendor/assets/scss/forms/_text.scss +154 -0
- data/vendor/assets/scss/foundation.scss +91 -0
- data/vendor/assets/scss/grid/_classes.scss +153 -0
- data/vendor/assets/scss/grid/_column.scss +124 -0
- data/vendor/assets/scss/grid/_flex-grid.scss +281 -0
- data/vendor/assets/scss/grid/_grid.scss +48 -0
- data/vendor/assets/scss/grid/_gutter.scss +34 -0
- data/vendor/assets/scss/grid/_layout.scss +33 -0
- data/vendor/assets/scss/grid/_position.scss +72 -0
- data/vendor/assets/scss/grid/_row.scss +97 -0
- data/vendor/assets/scss/grid/_size.scss +24 -0
- data/vendor/assets/scss/settings/_settings.scss +547 -0
- data/vendor/assets/scss/typography/_alignment.scss +22 -0
- data/vendor/assets/scss/typography/_base.scss +439 -0
- data/vendor/assets/scss/typography/_helpers.scss +77 -0
- data/vendor/assets/scss/typography/_print.scss +73 -0
- data/vendor/assets/scss/typography/_typography.scss +28 -0
- data/vendor/assets/scss/util/_breakpoint.scss +266 -0
- data/vendor/assets/scss/util/_color.scss +41 -0
- data/vendor/assets/scss/util/_mixins.scss +223 -0
- data/vendor/assets/scss/util/_selector.scss +40 -0
- data/vendor/assets/scss/util/_unit.scss +90 -0
- data/vendor/assets/scss/util/_util.scss +15 -0
- data/vendor/assets/scss/util/_value.scss +126 -0
- metadata +97 -64
- data/update-gem.sh +0 -20
- data/vendor/assets/javascripts/foundation.js +0 -17
- data/vendor/assets/javascripts/foundation/foundation.abide.js +0 -426
- data/vendor/assets/javascripts/foundation/foundation.accordion.js +0 -125
- data/vendor/assets/javascripts/foundation/foundation.alert.js +0 -43
- data/vendor/assets/javascripts/foundation/foundation.clearing.js +0 -586
- data/vendor/assets/javascripts/foundation/foundation.dropdown.js +0 -468
- data/vendor/assets/javascripts/foundation/foundation.equalizer.js +0 -104
- data/vendor/assets/javascripts/foundation/foundation.interchange.js +0 -360
- data/vendor/assets/javascripts/foundation/foundation.joyride.js +0 -935
- data/vendor/assets/javascripts/foundation/foundation.js +0 -732
- data/vendor/assets/javascripts/foundation/foundation.magellan.js +0 -214
- data/vendor/assets/javascripts/foundation/foundation.offcanvas.js +0 -225
- data/vendor/assets/javascripts/foundation/foundation.orbit.js +0 -476
- data/vendor/assets/javascripts/foundation/foundation.reveal.js +0 -522
- data/vendor/assets/javascripts/foundation/foundation.slider.js +0 -296
- data/vendor/assets/javascripts/foundation/foundation.tab.js +0 -247
- data/vendor/assets/javascripts/foundation/foundation.tooltip.js +0 -348
- data/vendor/assets/javascripts/foundation/foundation.topbar.js +0 -458
- data/vendor/assets/javascripts/vendor/modernizr.js +0 -1406
- data/vendor/assets/stylesheets/foundation.scss +0 -42
- data/vendor/assets/stylesheets/foundation/_functions.scss +0 -156
- data/vendor/assets/stylesheets/foundation/_settings.scss +0 -1489
- data/vendor/assets/stylesheets/foundation/components/_accordion.scss +0 -161
- data/vendor/assets/stylesheets/foundation/components/_alert-boxes.scss +0 -128
- data/vendor/assets/stylesheets/foundation/components/_block-grid.scss +0 -133
- data/vendor/assets/stylesheets/foundation/components/_breadcrumbs.scss +0 -132
- data/vendor/assets/stylesheets/foundation/components/_button-groups.scss +0 -208
- data/vendor/assets/stylesheets/foundation/components/_buttons.scss +0 -261
- data/vendor/assets/stylesheets/foundation/components/_clearing.scss +0 -260
- data/vendor/assets/stylesheets/foundation/components/_dropdown-buttons.scss +0 -130
- data/vendor/assets/stylesheets/foundation/components/_dropdown.scss +0 -269
- data/vendor/assets/stylesheets/foundation/components/_flex-video.scss +0 -51
- data/vendor/assets/stylesheets/foundation/components/_forms.scss +0 -607
- data/vendor/assets/stylesheets/foundation/components/_global.scss +0 -566
- data/vendor/assets/stylesheets/foundation/components/_grid.scss +0 -292
- data/vendor/assets/stylesheets/foundation/components/_icon-bar.scss +0 -460
- data/vendor/assets/stylesheets/foundation/components/_inline-lists.scss +0 -58
- data/vendor/assets/stylesheets/foundation/components/_joyride.scss +0 -220
- data/vendor/assets/stylesheets/foundation/components/_keystrokes.scss +0 -60
- data/vendor/assets/stylesheets/foundation/components/_labels.scss +0 -106
- data/vendor/assets/stylesheets/foundation/components/_magellan.scss +0 -34
- data/vendor/assets/stylesheets/foundation/components/_offcanvas.scss +0 -606
- data/vendor/assets/stylesheets/foundation/components/_orbit.scss +0 -388
- data/vendor/assets/stylesheets/foundation/components/_pagination.scss +0 -163
- data/vendor/assets/stylesheets/foundation/components/_panels.scss +0 -107
- data/vendor/assets/stylesheets/foundation/components/_pricing-tables.scss +0 -150
- data/vendor/assets/stylesheets/foundation/components/_progress-bars.scss +0 -85
- data/vendor/assets/stylesheets/foundation/components/_range-slider.scss +0 -177
- data/vendor/assets/stylesheets/foundation/components/_reveal.scss +0 -212
- data/vendor/assets/stylesheets/foundation/components/_side-nav.scss +0 -120
- data/vendor/assets/stylesheets/foundation/components/_split-buttons.scss +0 -203
- data/vendor/assets/stylesheets/foundation/components/_sub-nav.scss +0 -125
- data/vendor/assets/stylesheets/foundation/components/_switches.scss +0 -241
- data/vendor/assets/stylesheets/foundation/components/_tables.scss +0 -135
- data/vendor/assets/stylesheets/foundation/components/_tabs.scss +0 -142
- data/vendor/assets/stylesheets/foundation/components/_thumbs.scss +0 -66
- data/vendor/assets/stylesheets/foundation/components/_tooltips.scss +0 -142
- data/vendor/assets/stylesheets/foundation/components/_top-bar.scss +0 -745
- data/vendor/assets/stylesheets/foundation/components/_type.scss +0 -525
- data/vendor/assets/stylesheets/foundation/components/_visibility.scss +0 -425
- 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
|
+
// };
|