Mercurial > hg > digilib-old
annotate webapp/src/main/webapp/jquery/jquery.digilib.sliders.js @ 1062:41991d1598f1
rgb slider: reset now functional, minor refactoring
author | hertzhaft |
---|---|
date | Sun, 01 Apr 2012 18:43:42 +0200 |
parents | 4f5c5c578aa4 |
children | fb4d550869c8 |
rev | line source |
---|---|
1022 | 1 /** |
2 digilib sliders plugin | |
3 */ | |
4 // TODO: | |
5 // - steps | |
6 // - additional input element for numeric value | |
7 | |
8 (function($) { | |
9 // plugin object with digilib data | |
10 var digilib = null; | |
11 // the functions made available by digilib | |
12 var fn = null; | |
13 // affine geometry plugin | |
14 var geom = null; | |
15 | |
1057 | 16 var defaults = {}; |
1022 | 17 |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
18 var sliderOptions = { |
1022 | 19 rot : { |
20 label : "Rotation angle", | |
21 tooltip : "rotate image", | |
22 icon : "rotate.png", | |
23 'min' : 0, | |
24 'max' : 360, | |
1043 | 25 'step' : 0.1, |
1022 | 26 'start' : 90 |
27 }, | |
28 brgt : { | |
29 label : "Brightness", | |
30 tooltip : "set numeric value to be added", | |
31 icon : "brightness.png", | |
32 'min' : -255, | |
33 'max' : 255, | |
1043 | 34 'step' : 10, |
1022 | 35 'start' : 0 |
36 }, | |
37 cont : { | |
38 label : "Contrast", | |
39 tooltip : "set numeric value to be multiplied", | |
40 icon : "contrast.png", | |
41 'min' : -4, | |
42 'max' : 4, | |
1043 | 43 'step' : 0.01, |
1022 | 44 'start' : 0 |
1057 | 45 } |
1022 | 46 }; |
47 | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
48 var primaryColors = ['r', 'g', 'b']; |
1057 | 49 var rgb = { |
50 r : { | |
51 label : "red", | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
52 color : "#800000", |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
53 a : 0, |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
54 m : 0 |
1057 | 55 }, |
56 g : { | |
57 label : "green", | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
58 color : "#008000", |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
59 a : 0, |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
60 m : 0 |
1057 | 61 }, |
62 b : { | |
63 label : "blue", | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
64 color : "#000080", |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
65 a : 0, |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
66 m : 0 |
1057 | 67 } |
68 } | |
1022 | 69 var actions = { |
1038 | 70 // shows brightness slider |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
71 tinySliderBrgt : function (data) { |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
72 var onSubmit = function(val) { |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
73 digilib.actions.brightness(data, val); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
74 }; |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
75 singleSlider(data, 'brgt', onSubmit); |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
76 }, |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
77 |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
78 // shows contrast slider |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
79 tinySliderCont : function (data) { |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
80 var onSubmit = function(val) { |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
81 digilib.actions.contrast(data, val, true); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
82 }; |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
83 singleSlider(data, 'cont', onSubmit); |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
84 }, |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
85 |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
86 // shows rotate slider |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
87 tinySliderRot : function (data) { |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
88 var onSubmit = function(val) { |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
89 digilib.actions.rotate(data, val); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
90 }; |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
91 singleSlider(data, 'rot', onSubmit); |
1057 | 92 }, |
1022 | 93 |
1057 | 94 // shows RGB sliders |
95 tinySliderRGB : function (data) { | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
96 var onSubmit = function(m, a) { |
1057 | 97 digilib.actions.setRGB(data, m, a); |
98 }; | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
99 rgbSlider(data, onSubmit); |
1057 | 100 } |
1022 | 101 }; |
102 | |
1045 | 103 // assign button actions to sliders (rotate, brightness, contrast) |
104 var setButtonActions = function () { | |
105 if (fn.setButtonAction == null) { | |
106 console.debug('sliders: could not assign button actions. Maybe jquery.digilib.buttons.js was not loaded?'); | |
1022 | 107 return; |
108 } | |
1045 | 109 console.debug('sliders: assign new button actions. digilib:', digilib); |
110 fn.setButtonAction('brgt', 'tinySliderBrgt'); | |
111 fn.setButtonAction('cont', 'tinySliderCont'); | |
112 fn.setButtonAction('rot', 'tinySliderRot'); | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
113 fn.setButtonAction('rgb', 'tinySliderRGB'); |
1022 | 114 }; |
115 | |
116 // plugin installation called by digilib on plugin object. | |
117 var install = function (plugin) { | |
118 digilib = plugin; | |
119 console.debug('installing sliders plugin. digilib:', digilib); | |
120 fn = digilib.fn; | |
121 // import geometry classes | |
122 geom = fn.geometry; | |
123 // add defaults, actions, buttons | |
124 $.extend(true, digilib.defaults, defaults); // make deep copy | |
125 $.extend(digilib.actions, actions); | |
1038 | 126 setButtonActions(digilib.buttons); |
1022 | 127 // export functions |
128 }; | |
129 | |
130 // plugin initialization | |
131 var init = function (data) { | |
132 console.debug('initialising sliders plugin. data:', data); | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
133 var $data = $(data); |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
134 $data.bind('update', handleUpdate); |
1022 | 135 }; |
136 | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
137 // get rgba/rgbm params (color brightness/contrast) |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
138 var handleUpdate = function (evt) { |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
139 console.debug("sliders: handleUpdate"); |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
140 var data = this; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
141 setStartValues(data, 'a'); |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
142 setStartValues(data, 'm'); |
1059
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
143 var sliderSelector = '#'+ data.settings.cssPrefix + 'slider'; |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
144 fn.centerOnScreen(data, fn.find(data, sliderSelector)); |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
145 }; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
146 |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
147 // set m/a start values for sliders |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
148 var setStartValues = function (data, code) { |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
149 var colorparts = data.settings['rgb'+code]; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
150 if (colorparts == null) return; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
151 var values = colorparts.split("/"); |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
152 rgb.r[code] = values[0] || 0; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
153 rgb.g[code] = values[1] || 0; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
154 rgb.b[code] = values[2] || 0; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
155 }; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
156 |
1057 | 157 /** creates a div with a form, setup events and callback |
1022 | 158 */ |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
159 var setupFormDiv = function (data, $content, cssSuffix, onSubmit) { |
1057 | 160 var cssPrefix = data.settings.cssPrefix; |
161 var cls = cssPrefix + cssSuffix; | |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
162 var tiny = cssPrefix + 'tinyslider'; |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
163 var $elem = data.$elem; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
164 var sliderSelector = '#'+cssPrefix+'slider'; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
165 if (fn.isOnScreen(data, sliderSelector)) return; // already onscreen |
1026 | 166 var html = '\ |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
167 <div id="'+cssPrefix+'slider" class="'+cls+'">\ |
1057 | 168 <form class="'+cls+'">\ |
169 <input class="'+cls+'cancel" type="button" value="Cancel"/>\ | |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
170 <input class="'+cls+'reset" type="button" value="Reset"/>\ |
1057 | 171 <input type="submit" name="sub" value="Ok"/>\ |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
172 </form>\ |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
173 </div>'; |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
174 $div = $(html).appendTo($elem); |
1057 | 175 var $form = $div.find('form'); |
176 $form.prepend($content); | |
177 // handle submit | |
178 $form.on('submit', function () { | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
179 onSubmit(); |
1057 | 180 fn.withdraw($div); |
181 return false; | |
182 }); | |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
183 // handle reset |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
184 $form.find('.'+cls+'reset').on('click', function () { |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
185 var sliders = $form.find('div.'+tiny); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
186 sliders.each(function () { |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
187 var reset = $(this).data('reset'); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
188 reset(); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
189 }); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
190 // TODO: update indicator |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
191 }); |
1057 | 192 // handle cancel |
193 $form.find('.'+cls+'cancel').on('click', function () { | |
194 fn.withdraw($div); | |
195 }); | |
196 // show div | |
197 $div.fadeIn(); | |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
198 // fix non-HTML5 slider |
1057 | 199 var $range = $form.find('input.'+tiny+'range'); |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
200 var HTML5 = $range.prop('type') === 'range'; |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
201 if (!HTML5) { |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
202 console.debug('fix input type=range'); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
203 $range.range({change: function (val) { |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
204 $range.trigger('change'); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
205 }}); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
206 } |
1057 | 207 fn.centerOnScreen(data, $div); |
208 return $div; | |
209 }; | |
210 | |
211 /** creates a TinyRangeSlider | |
212 */ | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
213 var tinySlider = function (data, paramname, onChange, startval) { |
1057 | 214 var $elem = data.$elem; |
215 var opts = sliderOptions[paramname]; | |
216 var param = startval || data.settings[paramname] || opts.start; | |
217 var cssPrefix = data.settings.cssPrefix; | |
218 var cls = cssPrefix + 'tinyslider'; | |
219 var html = '\ | |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
220 <div class="'+cls+'">\ |
1057 | 221 <span>'+opts.label+'</span>\ |
222 <input type="range" class="'+cls+'range" name="'+paramname+'" step="'+opts.step+'" min="'+opts.min+'" max="'+opts.max+'" value="'+param+'"/>\ | |
223 <input type="text" class="'+cls+'text" name="'+paramname+'" size="4" value="'+param+'"/>\ | |
224 </div>'; | |
225 var $slider = $(html); | |
226 var $range = $slider.find('input.'+cls+'range'); | |
227 var $text = $slider.find('input.'+cls+'text'); | |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
228 var rangeChange = function () { |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
229 // crop floating point imprecision |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
230 var val = parseFloat($range.val()).toFixed(4); |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
231 $text.val(parseFloat(val)); |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
232 if ($.isFunction(onChange)) { |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
233 onChange($slider, val); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
234 } |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
235 }; |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
236 var textChange = function () { |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
237 var val = $text.val(); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
238 $range.val(val); |
1057 | 239 // val doesn't change the slider handle position in Tinyrange |
240 // can't use a jQuery "valHook" here because input type is reported as "text" (???) | |
241 var HTML5 = $range.prop('type') === 'range'; | |
1044 | 242 if (!HTML5) { |
243 $range.range('set', val); | |
244 } | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
245 if ($.isFunction(onChange)) { |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
246 onChange($slider, val); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
247 } |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
248 }; |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
249 var reset = function () { |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
250 $text.val(param); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
251 textChange(); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
252 }; |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
253 // connect slider and input |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
254 $range.on('change', rangeChange); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
255 $text.on('change', textChange); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
256 $slider.data({ |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
257 '$text' : $text, |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
258 '$range' : $range, |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
259 'reset' : reset |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
260 }); |
1057 | 261 return $slider; |
262 }; | |
263 | |
264 /** creates a single TinyRangeSlider for param "paramname", | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
265 the new value is passed to the "onSubmit" function. |
1057 | 266 */ |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
267 var singleSlider = function (data, paramname, onSubmit) { |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
268 var onChange = null; |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
269 var $slider = tinySlider(data, paramname, onChange); |
1057 | 270 var getValue = function () { |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
271 // get the new value and do something with it |
1057 | 272 var val = $slider.data('$text').val(); |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
273 onSubmit(val); |
1057 | 274 }; |
275 setupFormDiv(data, $slider, 'singleslider', getValue); | |
276 }; | |
277 | |
278 /** creates a compound RGB slider | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
279 the new values are passed to the "onSubmit" function. |
1057 | 280 */ |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
281 var rgbSlider = function (data, onSubmit) { |
1059
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
282 var css = data.settings.cssPrefix; |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
283 var cls = css + 'rgbslider'; |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
284 var html = '\ |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
285 <div>\ |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
286 <table class="'+cls+'" />\ |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
287 <div class="'+cls+'indicator">\ |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
288 <table class="'+cls+'grey">\ |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
289 <tr>\ |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
290 <td/><td/><td/><td/><td/><td/><td/><td/><td/>\ |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
291 </tr>\ |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
292 </table>\ |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
293 <table class="'+cls+'indicator">\ |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
294 <tr>\ |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
295 <td/><td/><td/><td/><td/><td/><td/><td/><td/>\ |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
296 </tr>\ |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
297 </table>\ |
1059
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
298 </div>\ |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
299 </div>'; |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
300 var $div = $(html); |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
301 var $table = $div.find('table.'+cls); |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
302 var onChange = function () { |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
303 // show effects of color brightness/contrast on a grey scale |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
304 var input = $table.data(); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
305 var ra = parseFloat(input['ra'].val()); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
306 var ga = parseFloat(input['ga'].val()); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
307 var ba = parseFloat(input['ba'].val()); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
308 var rm = parseFloat(input['rm'].val()); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
309 var gm = parseFloat(input['gm'].val()); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
310 var bm = parseFloat(input['bm'].val()); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
311 var setRGBValue = function (index) { |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
312 var val = index * 32; |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
313 var r = Math.min(Math.max(Math.round(Math.pow(2, rm) * val + ra), 0), 255); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
314 var g = Math.min(Math.max(Math.round(Math.pow(2, gm) * val + ga), 0), 255); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
315 var b = Math.min(Math.max(Math.round(Math.pow(2, bm) * val + ba), 0), 255); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
316 $(this).css('background-color', 'rgb('+r+','+g+','+b+')'); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
317 }; |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
318 $div.find('table.'+cls+'indicator td').each(setRGBValue); |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
319 }; |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
320 var insertTableRow = function(index, value) { |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
321 var color = rgb[value]; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
322 // start values are set in "handleSetup" |
1059
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
323 var $tr = $('<tr/>').appendTo($table); |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
324 var html = '\ |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
325 <td class="'+css+'color '+css+value+'">\ |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
326 <div>'+color.label+'</div>\ |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
327 </td>'; |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
328 $(html).appendTo($tr); |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
329 var $brgt = tinySlider(data, 'brgt', onChange, color.a); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
330 var $cont = tinySlider(data, 'cont', onChange, color.m); |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
331 $table.data(value+'a', $brgt.data('$text')); |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
332 $table.data(value+'m', $cont.data('$text')); |
1059
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
333 $('<td class="'+css+'rgb"/>').append($brgt).appendTo($tr); |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
334 $('<td class="'+css+'rgb"/>').append($cont).appendTo($tr); |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
335 }; |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
336 var setGreyScale = function (index) { |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
337 // set a series of grey values |
1059
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
338 var val = index * 32; |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
339 $(this).css('background-color', 'rgb('+val+','+val+','+val+')'); |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
340 }; |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
341 var getValues = function () { |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
342 // get values from sliders |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
343 var input = $table.data(); |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
344 var rgba = input['ra'].val() + '/' + input['ga'].val() + '/' + input['ba'].val(); |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
345 var rgbm = input['rm'].val() + '/' + input['gm'].val() + '/' + input['bm'].val(); |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
346 onSubmit(rgbm, rgba); |
1057 | 347 }; |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
348 $.each(primaryColors, insertTableRow); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
349 $div.find('table.'+cls+'grey td').each(setGreyScale); |
1059
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
350 setupFormDiv(data, $div, 'rgbslider', getValues); |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
351 onChange(); |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
352 }; |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
353 |
1022 | 354 // plugin object with name and init |
355 // shared objects filled by digilib on registration | |
356 var plugin = { | |
357 name : 'sliders', | |
358 install : install, | |
359 init : init, | |
360 buttons : {}, | |
361 actions : {}, | |
362 fn : {}, | |
363 plugins : {} | |
364 }; | |
365 | |
366 if ($.fn.digilib == null) { | |
367 $.error("jquery.digilib.sliders must be loaded after jquery.digilib!"); | |
368 } else { | |
369 $.fn.digilib('plugin', plugin); | |
370 } | |
371 })(jQuery); |