balmet.com

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

redux-slider.js (6925B)


      1 /*global redux_change, redux, jQuery*/
      2 
      3 (function( $ ) {
      4 	'use strict';
      5 
      6 	redux.field_objects        = redux.field_objects || {};
      7 	redux.field_objects.slider = redux.field_objects.slider || {};
      8 
      9 	redux.field_objects.slider.init = function( selector ) {
     10 		selector = $.redux.getSelector( selector, 'slider' );
     11 
     12 		$( selector ).each(
     13 			function() {
     14 				var el     = $( this );
     15 				var parent = el;
     16 
     17 				if ( ! el.hasClass( 'redux-field-container' ) ) {
     18 					parent = el.parents( '.redux-field-container:first' );
     19 				}
     20 
     21 				if ( parent.is( ':hidden' ) ) {
     22 					return;
     23 				}
     24 
     25 				if ( parent.hasClass( 'redux-field-init' ) ) {
     26 					parent.removeClass( 'redux-field-init' );
     27 				} else {
     28 					return;
     29 				}
     30 
     31 				el.find( 'div.redux-slider-container' ).each(
     32 					function() {
     33 						var start;
     34 						var toClass;
     35 						var defClassOne;
     36 						var defClassTwo;
     37 						var connectVal;
     38 						var range;
     39 						var startOne;
     40 						var startTwo;
     41 						var inputOne;
     42 						var inputTwo;
     43 						var classOne;
     44 						var classTwo;
     45 						var x;
     46 						var y;
     47 						var slider;
     48 						var inpSliderVal;
     49 
     50 						var DISPLAY_NONE   = 0;
     51 						var DISPLAY_LABEL  = 1;
     52 						var DISPLAY_TEXT   = 2;
     53 						var DISPLAY_SELECT = 3;
     54 
     55 						var mainID       = $( this ).data( 'id' );
     56 						var minVal       = $( this ).data( 'min' );
     57 						var maxVal       = $( this ).data( 'max' );
     58 						var stepVal      = $( this ).data( 'step' );
     59 						var handles      = $( this ).data( 'handles' );
     60 						var defValOne    = $( this ).data( 'default-one' );
     61 						var defValTwo    = $( this ).data( 'default-two' );
     62 						var resVal       = $( this ).data( 'resolution' );
     63 						var displayValue = parseInt( ( $( this ).data( 'display' ) ) );
     64 						var rtlVal       = Boolean( $( this ).data( 'rtl' ) );
     65 						var floatMark    = ( $( this ).data( 'float-mark' ) );
     66 
     67 						var rtl;
     68 						if ( true === rtlVal ) {
     69 							rtl = 'rtl';
     70 						} else {
     71 							rtl = 'ltr';
     72 						}
     73 
     74 						// Range array.
     75 						range = [minVal, maxVal];
     76 
     77 						// Set default values for dual slides.
     78 						startTwo = [defValOne, defValTwo];
     79 
     80 						// Set default value for single slide.
     81 						startOne = [defValOne];
     82 
     83 						if ( displayValue === DISPLAY_TEXT ) {
     84 							defClassOne = el.find( '.redux-slider-input-one-' + mainID );
     85 							defClassTwo = el.find( '.redux-slider-input-two-' + mainID );
     86 
     87 							inputOne = defClassOne;
     88 							inputTwo = defClassTwo;
     89 						} else if ( displayValue === DISPLAY_SELECT ) {
     90 							defClassOne = el.find( '.redux-slider-select-one-' + mainID );
     91 							defClassTwo = el.find( '.redux-slider-select-two-' + mainID );
     92 
     93 							redux.field_objects.slider.loadSelect( defClassOne, minVal, maxVal, resVal, stepVal );
     94 
     95 							if ( 2 === handles ) {
     96 								redux.field_objects.slider.loadSelect( defClassTwo, minVal, maxVal, resVal, stepVal );
     97 							}
     98 
     99 						} else if ( displayValue === DISPLAY_LABEL ) {
    100 							defClassOne = el.find( '#redux-slider-label-one-' + mainID );
    101 							defClassTwo = el.find( '#redux-slider-label-two-' + mainID );
    102 						} else if ( displayValue === DISPLAY_NONE ) {
    103 							defClassOne = el.find( '.redux-slider-value-one-' + mainID );
    104 							defClassTwo = el.find( '.redux-slider-value-two-' + mainID );
    105 						}
    106 
    107 						if ( displayValue === DISPLAY_LABEL ) {
    108 							x = [defClassOne, 'html'];
    109 							y = [defClassTwo, 'html'];
    110 
    111 							classOne = [x];
    112 							classTwo = [x, y];
    113 						} else {
    114 							classOne = [defClassOne];
    115 							classTwo = [defClassOne, defClassTwo];
    116 						}
    117 
    118 						if ( 2 === handles ) {
    119 							start      = startTwo;
    120 							toClass    = classTwo;
    121 							connectVal = true;
    122 						} else {
    123 							start      = startOne;
    124 							toClass    = classOne;
    125 							connectVal = 'lower';
    126 						}
    127 
    128 						slider = $( this ).reduxNoUiSlider(
    129 							{
    130 								range: range,
    131 								start: start,
    132 								handles: handles,
    133 								step: stepVal,
    134 								connect: connectVal,
    135 								behaviour: 'tap-drag',
    136 								direction: rtl,
    137 								serialization: {
    138 									resolution: resVal,
    139 									to: toClass,
    140 									mark: floatMark
    141 								},
    142 								slide: function() {
    143 									if ( displayValue === DISPLAY_LABEL ) {
    144 										if ( 2 === handles ) {
    145 											inpSliderVal = slider.val();
    146 											el.find( 'input.redux-slider-value-one-' + mainID ).attr( 'value', inpSliderVal[0] );
    147 											el.find( 'input.redux-slider-value-two-' + mainID ).attr( 'value', inpSliderVal[1] );
    148 										} else {
    149 											el.find( 'input.redux-slider-value-one-' + mainID ).attr( 'value', slider.val() );
    150 										}
    151 									}
    152 
    153 									if ( displayValue === DISPLAY_SELECT ) {
    154 										if ( 2 === handles ) {
    155 											el.find( '.redux-slider-select-one' ).val( slider.val()[0] ).trigger( 'change' );
    156 											el.find( '.redux-slider-select-two' ).val( slider.val()[1] ).trigger( 'change' );
    157 										} else {
    158 											el.find( '.redux-slider-select-one' ).val( slider.val() );
    159 										}
    160 									}
    161 
    162 									redux_change( $( this ) );
    163 								}
    164 							}
    165 						);
    166 
    167 						if ( displayValue === DISPLAY_TEXT ) {
    168 							inputOne.on(
    169 								'keydown',
    170 								function( e ) {
    171 									var sliderOne = slider.val();
    172 									var value     = parseInt( sliderOne[0] );
    173 
    174 									switch ( e.which ) {
    175 										case 38:
    176 											slider.val( [value + 1, null] );
    177 											break;
    178 										case 40:
    179 											slider.val( [value - 1, null] );
    180 											break;
    181 										case 13:
    182 											e.preventDefault();
    183 											break;
    184 									}
    185 								}
    186 							);
    187 
    188 							if ( 2 === handles ) {
    189 								inputTwo.on(
    190 									'keydown',
    191 									function( e ) {
    192 										var sliderTwo = slider.val();
    193 										var value     = parseInt( sliderTwo[1] );
    194 
    195 										switch ( e.which ) {
    196 											case 38:
    197 												slider.val( [null, value + 1] );
    198 												break;
    199 											case 40:
    200 												slider.val( [null, value - 1] );
    201 												break;
    202 											case 13:
    203 												e.preventDefault();
    204 												break;
    205 										}
    206 									}
    207 								);
    208 							}
    209 						}
    210 					}
    211 				);
    212 
    213 				el.find( 'select.redux-slider-select-one, select.redux-slider-select-two' ).select2();
    214 			}
    215 		);
    216 	};
    217 
    218 	// Return true for float value, false otherwise.
    219 	redux.field_objects.slider.isFloat = function( mixed_var ) {
    220 		return + mixed_var === mixed_var && ( ! ( isFinite( mixed_var ) ) ) || Boolean( ( mixed_var % 1 ) );
    221 	};
    222 
    223 	// Return number of integers after the decimal point.
    224 	redux.field_objects.slider.decimalCount = function( res ) {
    225 		var q = res.toString().split( '.' );
    226 		return q[1].length;
    227 	};
    228 
    229 	redux.field_objects.slider.loadSelect = function( myClass, min, max, res ) {
    230 		var decCount;
    231 		var i;
    232 		var n;
    233 
    234 		for ( i = min; i <= max; i = i + res ) {
    235 			n = i;
    236 
    237 			if ( redux.field_objects.slider.isFloat( res ) ) {
    238 				decCount = redux.field_objects.slider.decimalCount( res );
    239 				n        = i.toFixed( decCount );
    240 			}
    241 
    242 			$( myClass ).append( '<option value="' + n + '">' + n + '</option>' );
    243 		}
    244 	};
    245 })( jQuery );