annotate webapp/src/main/webapp/jquery/jquery.range.js @ 1044:2d04f160ce09

move slider handle when a new value is entered
author hertzhaft
date Fri, 23 Mar 2012 12:17:15 +0100
parents e7733df2e2c4
children b67f388df888
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
1 /*
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
2 * jQuery.range - A tiny, easily styleable range selector
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
3 * Tom Moor, http://tommoor.com
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
4 * Copyright (c) 2011 Tom Moor
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
5 * MIT Licensed
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
6 * @version 1.0
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
7 */
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
8
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
9 (function($){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
10
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
11 var TinyRange = function(){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
12 // locals
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
13 var options;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
14 var $input;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
15 var $rail;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
16 var $handle;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
17 var $handle2;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
18 var $selection;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
19 var $dragging;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
20 var $original;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
21 var jump;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
22 var size;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
23 var defaults = {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
24 orientation: 'horizontal', // todo
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
25 range: false,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
26 values: false,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
27 snap: false,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
28 change: null,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
29 blur: null
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
30 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
31
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
32 var jumpHandle = function(ev) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
33 ev.pageX = ev.pageX - $input.offset().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
34
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
35 // get closest handle
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
36 var x1 = $handle.position().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
37 var dist = ev.pageX - x1;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
38
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
39 if($handle2){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
40 var x2 = $handle2.position().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
41 var dist2 = ev.pageX - x2;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
42 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
43
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
44 // move towards click
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
45 if(!$handle2 || Math.abs(dist) < Math.abs(dist2) ){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
46 if(dist > 0) moveHandle($handle, valueToPx(jump)+x1);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
47 if(dist < 0) moveHandle($handle, -valueToPx(jump)+x1);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
48 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
49 if(dist2 > 0) moveHandle($handle2, valueToPx(jump)+x2);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
50 if(dist2 < 0) moveHandle($handle2, -valueToPx(jump)+x2);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
51 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
52 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
53
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
54 var moveHandle = function($h, p, update){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
55
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
56 var boundR = $input.width()-size;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
57 var boundL = 0;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
58
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
59 if(options.range){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
60 if($h[0] === $handle[0]){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
61 boundR = $handle2.position().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
62 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
63 boundL = $handle.position().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
64 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
65 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
66
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
67 if(p >= boundR){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
68 p = boundR;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
69 } else if(p <= boundL){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
70 p = boundL;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
71 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
72
1043
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
73 // leads to erratic behaviour with "step" attribute
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
74 // if(options.snap && p !== boundR){
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
75 // var snapPx = valueToPx(options.snap);
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
76 // p = Math.round(p/snapPx) * snapPx;
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
77 // }
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
78
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
79 $h.css({'left': p, 'position': 'absolute'});
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
80 if(options.range) updateSelection();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
81 if(update !== false) updateValues();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
82 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
83
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
84 var dragStart = function(ev){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
85 ev.stopPropagation();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
86 ev.preventDefault();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
87
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
88 $dragging = $(this);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
89 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
90
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
91 var drag = function(ev){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
92
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
93 if($dragging){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
94 ev.preventDefault();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
95 var pos = ev.pageX - $input.offset().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
96
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
97 moveHandle($dragging, pos);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
98 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
99 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
100
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
101 var updateSelection = function(){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
102
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
103 var p = $handle.position().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
104 var w = $handle2.position().left-p;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
105 $selection.css({
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
106 'left': p,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
107 'width': w,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
108 'position': 'absolute'
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
109 });
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
110 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
111
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
112 var dragEnd = function(ev){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
113 if($dragging){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
114 $dragging = null;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
115 if (options.blur == null) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
116 // send original blur event
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
117 $original.blur();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
118 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
119 options.blur(options.values);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
120 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
121 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
122 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
123
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
124 var updateValues = function(){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
125
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
126 var prev;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
127 if(options.range){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
128
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
129 prev = options.values.slice(); // clone
1043
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
130 options.values[0] = pxToValue($handle.position().left);
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
131 options.values[1] = pxToValue($handle2.position().left);
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
132
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
133 // set value on original element
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
134 $original.val(options.values[0] +','+options.values[1]);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
135 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
136
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
137 prev = options.values;
1043
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
138 options.values = pxToValue($handle.position().left);
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
139
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
140 // set value on original element
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
141 $original.val(options.values);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
142 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
143
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
144 if(options.values !== prev) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
145 if (options.change == null) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
146 // trigger original change event
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
147 $original.change();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
148 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
149 options.change(options.values);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
150 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
151 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
152 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
153
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
154 var updateHandles = function(){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
155
1040
59fa7b6ae9f7 fixed 2 tiny bugs in TinyRange
hertzhaft
parents: 1030
diff changeset
156 if (options.values != null) {
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
157 if (options.range){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
158 moveHandle($handle2, valueToPx(options.values[1]), false);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
159 moveHandle($handle, valueToPx(options.values[0]), false);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
160 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
161 moveHandle($handle, valueToPx(options.values), false);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
162 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
163 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
164
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
165 updateValues();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
166 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
167
1043
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
168 var pxToValue = function(p){
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
169 var w = $input.width()-size;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
170 var v = (p/(w/(options.max-options.min)))+options.min;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
171
1043
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
172 if(options.snap) {
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
173 v = Math.floor(v/options.snap) * options.snap;
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
174 return v;
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
175 }
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
176 return Math.round(v);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
177 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
178
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
179 var valueToPx = function(val){
1044
2d04f160ce09 move slider handle when a new value is entered
hertzhaft
parents: 1043
diff changeset
180 var w = $input.width()-size;
1040
59fa7b6ae9f7 fixed 2 tiny bugs in TinyRange
hertzhaft
parents: 1030
diff changeset
181 var valspan = options.max - options.min;
59fa7b6ae9f7 fixed 2 tiny bugs in TinyRange
hertzhaft
parents: 1030
diff changeset
182 var valpos = val - options.min;
59fa7b6ae9f7 fixed 2 tiny bugs in TinyRange
hertzhaft
parents: 1030
diff changeset
183 var v = valpos * w / valspan;
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
184
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
185 return v;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
186 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
187
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
188 var bound = function(input){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
189 return Math.max(Math.min(input, options.max), options.min);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
190 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
191
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
192 var methods = {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
193 init : function(o){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
194
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
195 // element already replaced
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
196 if($(this).data('TinyRange')) return this;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
197
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
198 // options
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
199 defaults.min = parseFloat($(this).attr('min'));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
200 defaults.max = parseFloat($(this).attr('max'));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
201 defaults.snap = parseFloat($(this).attr('step'));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
202
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
203 // options passed into plugin override input attributes
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
204 options = $.extend(defaults, o);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
205
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
206 if(options.values){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
207 //
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
208 } else if(options.range){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
209 options.values = [0, options.max];
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
210 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
211 options.values = parseFloat($(this).attr('value'));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
212 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
213
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
214 // how far do handles jump on click, default to step value
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
215 jump = options.snap ? options.snap : options.max/10;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
216
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
217 // create dom elements
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
218 $input = $('<div/>', {'class': 'range-input'}).mousedown(jumpHandle);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
219 $rail = $('<div/>', {'class': 'range-rail'}).appendTo($input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
220 if(options.range) $selection = $('<div/>', {'class': 'range-selection'}).appendTo($input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
221 $handle = $('<a/>', {'class': 'range-handle'}).appendTo($input).mousedown(dragStart);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
222 if(options.range) $handle2 = $handle.clone(true).appendTo($input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
223
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
224 // replace dom element
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
225 $(this).after($input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
226 $(this).hide();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
227 $original = $(this);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
228
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
229 // attach events
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
230 $(document).bind('mouseup', dragEnd);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
231 $(document).bind('mousemove', drag);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
232
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
233 // position handles
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
234 size = $handle.width();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
235 updateHandles();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
236
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
237 return this;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
238 },
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
239 set: function(input){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
240
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
241 if(typeof input === 'string'){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
242 options.values = bound(input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
243 } else if(typeof input === 'object' && input.length === 2){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
244 options.values[0] = bound(input[0]);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
245 options.values[1] = bound(input[1]);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
246 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
247
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
248 updateHandles();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
249 },
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
250 destroy : function(){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
251
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
252 $input.remove();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
253 $(this).show().data('TinyRange', false);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
254 $(document).unbind('mouseup', dragEnd);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
255 $(document).unbind('mousemove', drag);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
256
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
257 return this;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
258 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
259 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
260
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
261 return methods;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
262 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
263
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
264 $.fn.range = function(method) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
265
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
266 // so that arguments are accessible within each closure
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
267 var args = arguments;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
268
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
269 return this.each(function(){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
270 var state = $(this).data('TinyRange');
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
271
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
272 // Method calling logic
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
273 if (state && state[method] ) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
274 state[ method ].apply( this, Array.prototype.slice.call( args, 1 ));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
275 } else if ( typeof method === 'object' || ! method ) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
276
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
277 // create new tinyrange
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
278 var tr = (new TinyRange(this));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
279 tr.init.apply( this, args );
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
280
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
281 // save state in jquery data
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
282 $(this).data('TinyRange', tr);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
283
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
284 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
285 $.error( 'Method ' + method + ' does not exist on jQuery.range' );
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
286 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
287 });
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
288 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
289 })(jQuery);