annotate webapp/src/main/webapp/jquery/jquery.range.js @ 1061:4f5c5c578aa4

rgb slider: color indicator functional, reset works only partially
author hertzhaft
date Sat, 31 Mar 2012 22:34:50 +0200
parents 4f17420392a9
children
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
1061
4f5c5c578aa4 rgb slider: color indicator functional, reset works only partially
hertzhaft
parents: 1047
diff changeset
9 /*
4f5c5c578aa4 rgb slider: color indicator functional, reset works only partially
hertzhaft
parents: 1047
diff changeset
10 * minor bug fixes (c) 2012 Martin Raspe (hertzhaft@biblhertz.it)
4f5c5c578aa4 rgb slider: color indicator functional, reset works only partially
hertzhaft
parents: 1047
diff changeset
11 */
4f5c5c578aa4 rgb slider: color indicator functional, reset works only partially
hertzhaft
parents: 1047
diff changeset
12
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
13 (function($){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
14
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
15 var TinyRange = function(){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
16 // locals
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
17 var options;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
18 var $input;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
19 var $rail;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
20 var $handle;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
21 var $handle2;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
22 var $selection;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
23 var $dragging;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
24 var $original;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
25 var jump;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
26 var size;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
27 var defaults = {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
28 orientation: 'horizontal', // todo
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
29 range: false,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
30 values: false,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
31 snap: false,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
32 change: null,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
33 blur: null
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
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
36 var jumpHandle = function(ev) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
37 ev.pageX = ev.pageX - $input.offset().left;
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 // get closest handle
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
40 var x1 = $handle.position().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
41 var dist = ev.pageX - x1;
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 if($handle2){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
44 var x2 = $handle2.position().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
45 var dist2 = ev.pageX - x2;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
46 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
47
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
48 // move towards click
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
49 if(!$handle2 || Math.abs(dist) < Math.abs(dist2) ){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
50 if(dist > 0) moveHandle($handle, valueToPx(jump)+x1);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
51 if(dist < 0) moveHandle($handle, -valueToPx(jump)+x1);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
52 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
53 if(dist2 > 0) moveHandle($handle2, valueToPx(jump)+x2);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
54 if(dist2 < 0) moveHandle($handle2, -valueToPx(jump)+x2);
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 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
57
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
58 var moveHandle = function($h, p, update){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
59
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
60 var boundR = $input.width()-size;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
61 var boundL = 0;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
62
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
63 if(options.range){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
64 if($h[0] === $handle[0]){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
65 boundR = $handle2.position().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
66 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
67 boundL = $handle.position().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
68 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
69 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
70
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
71 if(p >= boundR){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
72 p = boundR;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
73 } else if(p <= boundL){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
74 p = boundL;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
75 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
76
1043
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
77 // leads to erratic behaviour with "step" attribute
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
78 // if(options.snap && p !== boundR){
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
79 // var snapPx = valueToPx(options.snap);
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
80 // p = Math.round(p/snapPx) * snapPx;
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
81 // }
1030
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 $h.css({'left': p, 'position': 'absolute'});
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
84 if(options.range) updateSelection();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
85 if(update !== false) updateValues();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
86 }
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 var dragStart = function(ev){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
89 ev.stopPropagation();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
90 ev.preventDefault();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
91
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
92 $dragging = $(this);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
93 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
94
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
95 var drag = function(ev){
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 if($dragging){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
98 ev.preventDefault();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
99 var pos = ev.pageX - $input.offset().left;
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 moveHandle($dragging, pos);
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 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
104
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
105 var updateSelection = function(){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
106
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
107 var p = $handle.position().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
108 var w = $handle2.position().left-p;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
109 $selection.css({
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
110 'left': p,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
111 'width': w,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
112 'position': 'absolute'
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
113 });
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
114 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
115
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
116 var dragEnd = function(ev){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
117 if($dragging){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
118 $dragging = null;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
119 if (options.blur == null) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
120 // send original blur event
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
121 $original.blur();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
122 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
123 options.blur(options.values);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
124 }
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 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
127
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
128 var updateValues = function(){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
129
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
130 var prev;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
131 if(options.range){
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 prev = options.values.slice(); // clone
1047
4f17420392a9 factor out calibration/scalemode to new dialogs plugin
hertzhaft
parents: 1046
diff changeset
134 options.values[0] = bound(pxToValue($handle.position().left));
4f17420392a9 factor out calibration/scalemode to new dialogs plugin
hertzhaft
parents: 1046
diff changeset
135 options.values[1] = bound(pxToValue($handle2.position().left));
1030
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 // set value on original element
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
138 $original.val(options.values[0] +','+options.values[1]);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
139 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
140
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
141 prev = options.values;
1047
4f17420392a9 factor out calibration/scalemode to new dialogs plugin
hertzhaft
parents: 1046
diff changeset
142 options.values = bound(pxToValue($handle.position().left));
1030
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 // set value on original element
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
145 $original.val(options.values);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
146 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
147
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
148 if(options.values !== prev) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
149 if (options.change == null) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
150 // trigger original change event
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
151 $original.change();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
152 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
153 options.change(options.values);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
154 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
155 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
156 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
157
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
158 var updateHandles = function(){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
159
1040
59fa7b6ae9f7 fixed 2 tiny bugs in TinyRange
hertzhaft
parents: 1030
diff changeset
160 if (options.values != null) {
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
161 if (options.range){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
162 moveHandle($handle2, valueToPx(options.values[1]), false);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
163 moveHandle($handle, valueToPx(options.values[0]), false);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
164 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
165 moveHandle($handle, valueToPx(options.values), false);
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 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
168
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
169 updateValues();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
170 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
171
1046
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
172 var pxToValue = function (px) {
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
173 var w = $input.width() - size;
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
174 var valspan = options.max - options.min;
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
175 var v = px * valspan / w + options.min;
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
176 if (options.snap) {
1047
4f17420392a9 factor out calibration/scalemode to new dialogs plugin
hertzhaft
parents: 1046
diff changeset
177 var tmp = v < 0
4f17420392a9 factor out calibration/scalemode to new dialogs plugin
hertzhaft
parents: 1046
diff changeset
178 ? Math.floor(v / options.snap) * options.snap
4f17420392a9 factor out calibration/scalemode to new dialogs plugin
hertzhaft
parents: 1046
diff changeset
179 : Math.round(v / options.snap) * options.snap;
1046
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
180 // hack to cut off floating point imprecision
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
181 var result = parseFloat(tmp.toFixed(4));
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
182 return result;
1043
e7733df2e2c4 fix buggy behaviour with step
hertzhaft
parents: 1040
diff changeset
183 }
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
184 return Math.round(v);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
185 };
1046
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
186
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
187 var valueToPx = function (val) {
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
188 var w = $input.width() - size;
1040
59fa7b6ae9f7 fixed 2 tiny bugs in TinyRange
hertzhaft
parents: 1030
diff changeset
189 var valspan = options.max - options.min;
59fa7b6ae9f7 fixed 2 tiny bugs in TinyRange
hertzhaft
parents: 1030
diff changeset
190 var valpos = val - options.min;
59fa7b6ae9f7 fixed 2 tiny bugs in TinyRange
hertzhaft
parents: 1030
diff changeset
191 var v = valpos * w / valspan;
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
192 return v;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
193 };
1046
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
194
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
195 var bound = function(input){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
196 return Math.max(Math.min(input, options.max), options.min);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
197 };
1046
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
198
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
199 var methods = {
1046
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
200 init : function (o) {
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
201 // element already replaced
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
202 if($(this).data('TinyRange')) return this;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
203 // options
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
204 defaults.min = parseFloat($(this).attr('min'));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
205 defaults.max = parseFloat($(this).attr('max'));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
206 defaults.snap = parseFloat($(this).attr('step'));
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 // options passed into plugin override input attributes
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
209 options = $.extend(defaults, o);
1046
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
210
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
211 if(options.values){
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 } else if(options.range){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
214 options.values = [0, options.max];
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
215 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
216 options.values = parseFloat($(this).attr('value'));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
217 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
218 // how far do handles jump on click, default to step value
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
219 jump = options.snap ? options.snap : options.max/10;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
220 // create dom elements
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
221 $input = $('<div/>', {'class': 'range-input'}).mousedown(jumpHandle);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
222 $rail = $('<div/>', {'class': 'range-rail'}).appendTo($input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
223 if(options.range) $selection = $('<div/>', {'class': 'range-selection'}).appendTo($input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
224 $handle = $('<a/>', {'class': 'range-handle'}).appendTo($input).mousedown(dragStart);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
225 if(options.range) $handle2 = $handle.clone(true).appendTo($input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
226 // replace dom element
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
227 $(this).after($input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
228 $(this).hide();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
229 $original = $(this);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
230 // attach events
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
231 $(document).bind('mouseup', dragEnd);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
232 $(document).bind('mousemove', drag);
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 return this;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
237 },
1046
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
238
1030
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 updateHandles();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
248 },
1046
b67f388df888 cut off floating point imprecision
hertzhaft
parents: 1044
diff changeset
249
1030
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 $input.remove();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
252 $(this).show().data('TinyRange', false);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
253 $(document).unbind('mouseup', dragEnd);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
254 $(document).unbind('mousemove', drag);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
255 return this;
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 };
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 return methods;
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
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
262 $.fn.range = function(method) {
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 // so that arguments are accessible within each closure
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
265 var args = arguments;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
266
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
267 return this.each(function(){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
268 var state = $(this).data('TinyRange');
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
269
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
270 // Method calling logic
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
271 if (state && state[method] ) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
272 state[ method ].apply( this, Array.prototype.slice.call( args, 1 ));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
273 } else if ( typeof method === 'object' || ! method ) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
274
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
275 // create new tinyrange
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
276 var tr = (new TinyRange(this));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
277 tr.init.apply( this, args );
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
278
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
279 // save state in jquery data
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
280 $(this).data('TinyRange', tr);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
281
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
282 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
283 $.error( 'Method ' + method + ' does not exist on jQuery.range' );
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
284 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
285 });
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 })(jQuery);