annotate webapp/src/main/webapp/jquery/jquery.range.js @ 1040:59fa7b6ae9f7

fixed 2 tiny bugs in TinyRange
author hertzhaft
date Thu, 22 Mar 2012 16:38:32 +0100
parents ef94924cc0c4
children e7733df2e2c4
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
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
73 if(options.snap && p !== boundR){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
74 var snapPx = valueToPx(options.snap);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
75 p = Math.round(p/snapPx) * snapPx;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
76 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
77
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
78 $h.css({'left': p, 'position': 'absolute'});
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
79 if(options.range) updateSelection();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
80 if(update !== false) updateValues();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
81 }
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 var dragStart = function(ev){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
84 ev.stopPropagation();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
85 ev.preventDefault();
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 $dragging = $(this);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
88 };
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 var drag = function(ev){
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 if($dragging){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
93 ev.preventDefault();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
94 var pos = ev.pageX - $input.offset().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
95
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
96 moveHandle($dragging, pos);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
97 }
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 var updateSelection = function(){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
101
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
102 var p = $handle.position().left;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
103 var w = $handle2.position().left-p;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
104 $selection.css({
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
105 'left': p,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
106 'width': w,
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
107 'position': 'absolute'
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
108 });
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 var dragEnd = function(ev){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
112 if($dragging){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
113 $dragging = null;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
114 if (options.blur == null) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
115 // send original blur event
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
116 $original.blur();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
117 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
118 options.blur(options.values);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
119 }
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 var updateValues = function(){
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 var prev;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
126 if(options.range){
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 prev = options.values.slice(); // clone
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
129 options.values[0] = pxToValue($handle);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
130 options.values[1] = pxToValue($handle2);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
131
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
132 // set value on original element
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
133 $original.val(options.values[0] +','+options.values[1]);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
134 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
135
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
136 prev = options.values;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
137 options.values = pxToValue($handle);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
138
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
139 // set value on original element
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
140 $original.val(options.values);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
141 }
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 if(options.values !== prev) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
144 if (options.change == null) {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
145 // trigger original change event
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
146 $original.change();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
147 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
148 options.change(options.values);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
149 }
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 var updateHandles = function(){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
154
1040
59fa7b6ae9f7 fixed 2 tiny bugs in TinyRange
hertzhaft
parents: 1030
diff changeset
155 if (options.values != null) {
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
156 if (options.range){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
157 moveHandle($handle2, valueToPx(options.values[1]), false);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
158 moveHandle($handle, valueToPx(options.values[0]), false);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
159 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
160 moveHandle($handle, valueToPx(options.values), false);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
161 }
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 updateValues();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
165 };
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 var pxToValue = function($h){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
168 var w = $input.width()-size;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
169 var p = $h.position().left;
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
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
172 if(options.snap) return Math.floor(v/options.snap) * options.snap;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
173
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
174 return Math.round(v);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
175 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
176
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
177 var valueToPx = function(val){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
178 var w = $input.width();
1040
59fa7b6ae9f7 fixed 2 tiny bugs in TinyRange
hertzhaft
parents: 1030
diff changeset
179 var valspan = options.max - options.min;
59fa7b6ae9f7 fixed 2 tiny bugs in TinyRange
hertzhaft
parents: 1030
diff changeset
180 var valpos = val - options.min;
59fa7b6ae9f7 fixed 2 tiny bugs in TinyRange
hertzhaft
parents: 1030
diff changeset
181 var v = valpos * w / valspan;
1030
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
182
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
183 return v;
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
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
186 var bound = function(input){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
187 return Math.max(Math.min(input, options.max), options.min);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
188 };
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
189
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
190 var methods = {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
191 init : function(o){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
192
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
193 // element already replaced
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
194 if($(this).data('TinyRange')) return this;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
195
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
196 // options
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
197 defaults.min = parseFloat($(this).attr('min'));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
198 defaults.max = parseFloat($(this).attr('max'));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
199 defaults.snap = parseFloat($(this).attr('step'));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
200
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
201 // options passed into plugin override input attributes
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
202 options = $.extend(defaults, o);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
203
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
204 if(options.values){
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 } else if(options.range){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
207 options.values = [0, options.max];
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
208 } else {
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
209 options.values = parseFloat($(this).attr('value'));
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
210 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
211
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
212 // how far do handles jump on click, default to step value
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
213 jump = options.snap ? options.snap : options.max/10;
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
214
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
215 // create dom elements
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
216 $input = $('<div/>', {'class': 'range-input'}).mousedown(jumpHandle);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
217 $rail = $('<div/>', {'class': 'range-rail'}).appendTo($input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
218 if(options.range) $selection = $('<div/>', {'class': 'range-selection'}).appendTo($input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
219 $handle = $('<a/>', {'class': 'range-handle'}).appendTo($input).mousedown(dragStart);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
220 if(options.range) $handle2 = $handle.clone(true).appendTo($input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
221
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
222 // replace dom element
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
223 $(this).after($input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
224 $(this).hide();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
225 $original = $(this);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
226
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
227 // attach events
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
228 $(document).bind('mouseup', dragEnd);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
229 $(document).bind('mousemove', drag);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
230
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
231 // position handles
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
232 size = $handle.width();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
233 updateHandles();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
234
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
235 return this;
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 set: function(input){
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 if(typeof input === 'string'){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
240 options.values = bound(input);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
241 } else if(typeof input === 'object' && input.length === 2){
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
242 options.values[0] = bound(input[0]);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
243 options.values[1] = bound(input[1]);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
244 }
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
245
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
246 updateHandles();
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 destroy : function(){
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 $input.remove();
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
251 $(this).show().data('TinyRange', false);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
252 $(document).unbind('mouseup', dragEnd);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
253 $(document).unbind('mousemove', drag);
ef94924cc0c4 experiment with jquery.range.js for brightness slider.
robcast
parents:
diff changeset
254
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);