summaryrefslogtreecommitdiff
path: root/source/bower_components/foundation/js/foundation/foundation.slider.js
diff options
context:
space:
mode:
Diffstat (limited to 'source/bower_components/foundation/js/foundation/foundation.slider.js')
-rw-r--r--source/bower_components/foundation/js/foundation/foundation.slider.js239
1 files changed, 239 insertions, 0 deletions
diff --git a/source/bower_components/foundation/js/foundation/foundation.slider.js b/source/bower_components/foundation/js/foundation/foundation.slider.js
new file mode 100644
index 0000000..3c9f51b
--- /dev/null
+++ b/source/bower_components/foundation/js/foundation/foundation.slider.js
@@ -0,0 +1,239 @@
+;(function ($, window, document, undefined) {
+ 'use strict';
+
+ Foundation.libs.slider = {
+ name : 'slider',
+
+ version : '5.4.3',
+
+ settings: {
+ start: 0,
+ end: 100,
+ step: 1,
+ initial: null,
+ display_selector: '',
+ vertical: false,
+ on_change: function(){}
+ },
+
+ cache : {},
+
+ init : function (scope, method, options) {
+ Foundation.inherit(this,'throttle');
+ this.bindings(method, options);
+ this.reflow();
+ },
+
+ events : function() {
+ var self = this;
+
+ $(this.scope)
+ .off('.slider')
+ .on('mousedown.fndtn.slider touchstart.fndtn.slider pointerdown.fndtn.slider',
+ '[' + self.attr_name() + ']:not(.disabled, [disabled]) .range-slider-handle', function(e) {
+ if (!self.cache.active) {
+ e.preventDefault();
+ self.set_active_slider($(e.target));
+ }
+ })
+ .on('mousemove.fndtn.slider touchmove.fndtn.slider pointermove.fndtn.slider', function(e) {
+ if (!!self.cache.active) {
+ e.preventDefault();
+ if ($.data(self.cache.active[0], 'settings').vertical) {
+ var scroll_offset = 0;
+ if (!e.pageY) {
+ scroll_offset = window.scrollY;
+ }
+ self.calculate_position(self.cache.active, (e.pageY ||
+ e.originalEvent.clientY ||
+ e.originalEvent.touches[0].clientY ||
+ e.currentPoint.y)
+ + scroll_offset);
+ } else {
+ self.calculate_position(self.cache.active, e.pageX ||
+ e.originalEvent.clientX ||
+ e.originalEvent.touches[0].clientX ||
+ e.currentPoint.x);
+ }
+ }
+ })
+ .on('mouseup.fndtn.slider touchend.fndtn.slider pointerup.fndtn.slider', function(e) {
+ self.remove_active_slider();
+ })
+ .on('change.fndtn.slider', function(e) {
+ self.settings.on_change();
+ });
+
+ self.S(window)
+ .on('resize.fndtn.slider', self.throttle(function(e) {
+ self.reflow();
+ }, 300));
+ },
+
+ set_active_slider : function($handle) {
+ this.cache.active = $handle;
+ },
+
+ remove_active_slider : function() {
+ this.cache.active = null;
+ },
+
+ calculate_position : function($handle, cursor_x) {
+ var self = this,
+ settings = $.data($handle[0], 'settings'),
+ handle_l = $.data($handle[0], 'handle_l'),
+ handle_o = $.data($handle[0], 'handle_o'),
+ bar_l = $.data($handle[0], 'bar_l'),
+ bar_o = $.data($handle[0], 'bar_o');
+
+ requestAnimationFrame(function(){
+ var pct;
+
+ if (Foundation.rtl && !settings.vertical) {
+ pct = self.limit_to(((bar_o+bar_l-cursor_x)/bar_l),0,1);
+ } else {
+ pct = self.limit_to(((cursor_x-bar_o)/bar_l),0,1);
+ }
+
+ pct = settings.vertical ? 1-pct : pct;
+
+ var norm = self.normalized_value(pct, settings.start, settings.end, settings.step);
+
+ self.set_ui($handle, norm);
+ });
+ },
+
+ set_ui : function($handle, value) {
+ var settings = $.data($handle[0], 'settings'),
+ handle_l = $.data($handle[0], 'handle_l'),
+ bar_l = $.data($handle[0], 'bar_l'),
+ norm_pct = this.normalized_percentage(value, settings.start, settings.end),
+ handle_offset = norm_pct*(bar_l-handle_l)-1,
+ progress_bar_length = norm_pct*100;
+
+ if (Foundation.rtl && !settings.vertical) {
+ handle_offset = -handle_offset;
+ }
+
+ handle_offset = settings.vertical ? -handle_offset + bar_l - handle_l + 1 : handle_offset;
+ this.set_translate($handle, handle_offset, settings.vertical);
+
+ if (settings.vertical) {
+ $handle.siblings('.range-slider-active-segment').css('height', progress_bar_length + '%');
+ } else {
+ $handle.siblings('.range-slider-active-segment').css('width', progress_bar_length + '%');
+ }
+
+ $handle.parent().attr(this.attr_name(), value).trigger('change').trigger('change.fndtn.slider');
+
+ $handle.parent().children('input[type=hidden]').val(value);
+
+ if (!$handle[0].hasAttribute('aria-valuemin')) {
+ $handle.attr({
+ 'aria-valuemin': settings.start,
+ 'aria-valuemax': settings.end,
+ });
+ }
+ $handle.attr('aria-valuenow', value);
+
+ // if (settings.input_id != '') {
+ // $(settings.display_selector).each(function(){
+ // if (this.hasOwnProperty('value')) {
+ // $(this).val(value);
+ // } else {
+ // $(this).text(value);
+ // }
+ // });
+ // }
+
+ },
+
+ normalized_percentage : function(val, start, end) {
+ return Math.min(1, (val - start)/(end - start));
+ },
+
+ normalized_value : function(val, start, end, step) {
+ var range = end - start,
+ point = val*range,
+ mod = (point-(point%step)) / step,
+ rem = point % step,
+ round = ( rem >= step*0.5 ? step : 0);
+ return (mod*step + round) + start;
+ },
+
+ set_translate : function(ele, offset, vertical) {
+ if (vertical) {
+ $(ele)
+ .css('-webkit-transform', 'translateY('+offset+'px)')
+ .css('-moz-transform', 'translateY('+offset+'px)')
+ .css('-ms-transform', 'translateY('+offset+'px)')
+ .css('-o-transform', 'translateY('+offset+'px)')
+ .css('transform', 'translateY('+offset+'px)');
+ } else {
+ $(ele)
+ .css('-webkit-transform', 'translateX('+offset+'px)')
+ .css('-moz-transform', 'translateX('+offset+'px)')
+ .css('-ms-transform', 'translateX('+offset+'px)')
+ .css('-o-transform', 'translateX('+offset+'px)')
+ .css('transform', 'translateX('+offset+'px)');
+ }
+ },
+
+ limit_to : function(val, min, max) {
+ return Math.min(Math.max(val, min), max);
+ },
+
+ initialize_settings : function(handle) {
+ var settings = $.extend({}, this.settings, this.data_options($(handle).parent()));
+
+ if (settings.vertical) {
+ $.data(handle, 'bar_o', $(handle).parent().offset().top);
+ $.data(handle, 'bar_l', $(handle).parent().outerHeight());
+ $.data(handle, 'handle_o', $(handle).offset().top);
+ $.data(handle, 'handle_l', $(handle).outerHeight());
+ } else {
+ $.data(handle, 'bar_o', $(handle).parent().offset().left);
+ $.data(handle, 'bar_l', $(handle).parent().outerWidth());
+ $.data(handle, 'handle_o', $(handle).offset().left);
+ $.data(handle, 'handle_l', $(handle).outerWidth());
+ }
+
+ $.data(handle, 'bar', $(handle).parent());
+ $.data(handle, 'settings', settings);
+ },
+
+ set_initial_position : function($ele) {
+ var settings = $.data($ele.children('.range-slider-handle')[0], 'settings'),
+ initial = (!!settings.initial ? settings.initial : Math.floor((settings.end-settings.start)*0.5/settings.step)*settings.step+settings.start),
+ $handle = $ele.children('.range-slider-handle');
+ this.set_ui($handle, initial);
+ },
+
+ set_value : function(value) {
+ var self = this;
+ $('[' + self.attr_name() + ']', this.scope).each(function(){
+ $(this).attr(self.attr_name(), value);
+ });
+ if (!!$(this.scope).attr(self.attr_name())) {
+ $(this.scope).attr(self.attr_name(), value);
+ }
+ self.reflow();
+ },
+
+ reflow : function() {
+ var self = this;
+ self.S('[' + this.attr_name() + ']').each(function() {
+ var handle = $(this).children('.range-slider-handle')[0],
+ val = $(this).attr(self.attr_name());
+ self.initialize_settings(handle);
+
+ if (val) {
+ self.set_ui($(handle), parseFloat(val));
+ } else {
+ self.set_initial_position($(this));
+ }
+ });
+ }
+ };
+
+}(jQuery, window, window.document));