Mercurial > hg > digilib-old
annotate webapp/src/main/webapp/jquery/jquery.digilib.sliders.js @ 1069:788c757d7f70
made contrast slider perview look like contrast action.
author | robcast |
---|---|
date | Fri, 13 Apr 2012 18:41:47 +0200 |
parents | 555f6f0d6be5 |
children | 27ee06879f14 |
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", | |
1063 | 23 indicator : false, |
1022 | 24 'min' : 0, |
25 'max' : 360, | |
1043 | 26 'step' : 0.1, |
1022 | 27 'start' : 90 |
28 }, | |
29 brgt : { | |
30 label : "Brightness", | |
31 tooltip : "set numeric value to be added", | |
32 icon : "brightness.png", | |
1063 | 33 indicator : true, |
1022 | 34 'min' : -255, |
35 'max' : 255, | |
1043 | 36 'step' : 10, |
1022 | 37 'start' : 0 |
38 }, | |
39 cont : { | |
40 label : "Contrast", | |
41 tooltip : "set numeric value to be multiplied", | |
42 icon : "contrast.png", | |
1063 | 43 indicator : true, |
1022 | 44 'min' : -4, |
45 'max' : 4, | |
1043 | 46 'step' : 0.01, |
1022 | 47 'start' : 0 |
1057 | 48 } |
1022 | 49 }; |
50 | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
51 var primaryColors = ['r', 'g', 'b']; |
1057 | 52 var rgb = { |
53 r : { | |
54 label : "red", | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
55 color : "#800000", |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
56 a : 0, |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
57 m : 0 |
1057 | 58 }, |
59 g : { | |
60 label : "green", | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
61 color : "#008000", |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
62 a : 0, |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
63 m : 0 |
1057 | 64 }, |
65 b : { | |
66 label : "blue", | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
67 color : "#000080", |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
68 a : 0, |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
69 m : 0 |
1057 | 70 } |
71 } | |
1022 | 72 var actions = { |
1038 | 73 // shows brightness slider |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
74 tinySliderBrgt : function (data) { |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
75 var onSubmit = function(val) { |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
76 digilib.actions.brightness(data, val); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
77 }; |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
78 singleSlider(data, 'brgt', onSubmit); |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
79 }, |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
80 |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
81 // shows contrast slider |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
82 tinySliderCont : function (data) { |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
83 var onSubmit = function(val) { |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
84 digilib.actions.contrast(data, val, true); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
85 }; |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
86 singleSlider(data, 'cont', onSubmit); |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
87 }, |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
88 |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
89 // shows rotate slider |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
90 tinySliderRot : function (data) { |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
91 var onSubmit = function(val) { |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
92 digilib.actions.rotate(data, val); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
93 }; |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
94 singleSlider(data, 'rot', onSubmit); |
1057 | 95 }, |
1022 | 96 |
1057 | 97 // shows RGB sliders |
98 tinySliderRGB : function (data) { | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
99 var onSubmit = function(m, a) { |
1057 | 100 digilib.actions.setRGB(data, m, a); |
101 }; | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
102 rgbSlider(data, onSubmit); |
1057 | 103 } |
1022 | 104 }; |
105 | |
1063 | 106 var indicators = { |
107 brgt : function ($slider, value) { | |
1066
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
108 // TODO: replace with call to setIndicatorValues() |
1063 | 109 var brgt = parseFloat(value); |
110 var cls = $slider.data('cls'); | |
111 var $ind = $slider.data('indicator'); | |
112 var $td = $ind.find('table.'+cls+'indicator td'); | |
113 var setBgColor = function (index) { | |
114 var val = index * 32; | |
115 var grey = Math.min(Math.max(Math.round(val + brgt), 0), 255); | |
116 $(this).css('background-color', 'rgb('+grey+','+grey+','+grey+')'); | |
117 }; | |
118 $td.each(setBgColor); | |
1066
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
119 }, |
1063 | 120 |
121 cont : function ($slider, value) { | |
1066
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
122 // TODO: replace with call to setIndicatorValues() |
1063 | 123 var cont = parseFloat(value); |
124 var cls = $slider.data('cls'); | |
125 var $ind = $slider.data('indicator'); | |
126 var $td = $ind.find('table.'+cls+'indicator td'); | |
127 var setBgColor = function (index) { | |
128 var val = index * 32; | |
1069
788c757d7f70
made contrast slider perview look like contrast action.
robcast
parents:
1066
diff
changeset
|
129 var m = Math.pow(2, cont); |
788c757d7f70
made contrast slider perview look like contrast action.
robcast
parents:
1066
diff
changeset
|
130 var grey = Math.min(Math.max(Math.round(m * val + (127 - 127 * m)), 0), 255); |
1063 | 131 $(this).css('background-color', 'rgb('+grey+','+grey+','+grey+')'); |
132 }; | |
133 $td.each(setBgColor); | |
1066
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
134 }, |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
135 |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
136 rgb : function ($slider, value) { |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
137 // TODO: replace with call to setIndicatorValues() |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
138 var val = parseFloat(value); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
139 var cls = $slider.data('cls'); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
140 var $ind = $slider.data('indicator'); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
141 var $td = $ind.find('table.'+cls+'indicator td'); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
142 var setRGBValue = function (index) { |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
143 var val = index * 32; |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
144 var r = Math.min(Math.max(Math.round(Math.pow(2, rm) * val + ra), 0), 255); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
145 var g = Math.min(Math.max(Math.round(Math.pow(2, gm) * val + ga), 0), 255); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
146 var b = Math.min(Math.max(Math.round(Math.pow(2, bm) * val + ba), 0), 255); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
147 $(this).css('background-color', 'rgb('+r+','+g+','+b+')'); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
148 }; |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
149 $td.each(setRGBValue); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
150 } |
1063 | 151 }; |
1066
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
152 |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
153 // set indicator values |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
154 var setIndicatorValues = function ($slider) { |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
155 var cls = $slider.data('cls'); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
156 var $ind = $slider.data('indicator'); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
157 var $td1 = $div.find('table.'+cls+'grey td'); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
158 var $td2 = $ind.find('table.'+cls+'indicator td'); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
159 var setGreyScale = function (index) { |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
160 // sets a series of grey values |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
161 var val = index * 32; |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
162 $(this).css('background-color', 'rgb('+val+','+val+','+val+')'); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
163 }; |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
164 // TODO: account for current brgt/cont/rgbm/rgba values |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
165 var setRGBValue = function (index) { |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
166 var val = index * 32; |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
167 var r = Math.min(Math.max(Math.round(Math.pow(2, rm) * val + ra), 0), 255); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
168 var g = Math.min(Math.max(Math.round(Math.pow(2, gm) * val + ga), 0), 255); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
169 var b = Math.min(Math.max(Math.round(Math.pow(2, bm) * val + ba), 0), 255); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
170 $(this).css('background-color', 'rgb('+r+','+g+','+b+')'); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
171 }; |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
172 $td1.each(setGreyScale); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
173 $td2.each(setRGBValue); |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
174 }; |
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
175 |
1045 | 176 // assign button actions to sliders (rotate, brightness, contrast) |
177 var setButtonActions = function () { | |
178 if (fn.setButtonAction == null) { | |
179 console.debug('sliders: could not assign button actions. Maybe jquery.digilib.buttons.js was not loaded?'); | |
1022 | 180 return; |
181 } | |
1045 | 182 console.debug('sliders: assign new button actions. digilib:', digilib); |
183 fn.setButtonAction('brgt', 'tinySliderBrgt'); | |
184 fn.setButtonAction('cont', 'tinySliderCont'); | |
185 fn.setButtonAction('rot', 'tinySliderRot'); | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
186 fn.setButtonAction('rgb', 'tinySliderRGB'); |
1022 | 187 }; |
188 | |
189 // plugin installation called by digilib on plugin object. | |
190 var install = function (plugin) { | |
191 digilib = plugin; | |
192 console.debug('installing sliders plugin. digilib:', digilib); | |
193 fn = digilib.fn; | |
194 // import geometry classes | |
195 geom = fn.geometry; | |
196 // add defaults, actions, buttons | |
197 $.extend(true, digilib.defaults, defaults); // make deep copy | |
198 $.extend(digilib.actions, actions); | |
1038 | 199 setButtonActions(digilib.buttons); |
1022 | 200 // export functions |
201 }; | |
202 | |
203 // plugin initialization | |
204 var init = function (data) { | |
205 console.debug('initialising sliders plugin. data:', data); | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
206 var $data = $(data); |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
207 $data.bind('update', handleUpdate); |
1022 | 208 }; |
209 | |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
210 // get rgba/rgbm params (color brightness/contrast) |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
211 var handleUpdate = function (evt) { |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
212 console.debug("sliders: handleUpdate"); |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
213 var data = this; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
214 setStartValues(data, 'a'); |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
215 setStartValues(data, 'm'); |
1059
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
216 var sliderSelector = '#'+ data.settings.cssPrefix + 'slider'; |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
217 fn.centerOnScreen(data, fn.find(data, sliderSelector)); |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
218 }; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
219 |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
220 // set m/a start values for sliders |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
221 var setStartValues = function (data, code) { |
1065 | 222 var colorparts = data.settings['rgb'+code] || '0/0/0'; |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
223 var values = colorparts.split("/"); |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
224 rgb.r[code] = values[0] || 0; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
225 rgb.g[code] = values[1] || 0; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
226 rgb.b[code] = values[2] || 0; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
227 }; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
228 |
1057 | 229 /** creates a div with a form, setup events and callback |
1022 | 230 */ |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
231 var setupFormDiv = function (data, $content, cssSuffix, onSubmit) { |
1057 | 232 var cssPrefix = data.settings.cssPrefix; |
233 var cls = cssPrefix + cssSuffix; | |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
234 var tiny = cssPrefix + 'tinyslider'; |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
235 var $elem = data.$elem; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
236 var sliderSelector = '#'+cssPrefix+'slider'; |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
237 if (fn.isOnScreen(data, sliderSelector)) return; // already onscreen |
1026 | 238 var html = '\ |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
239 <div id="'+cssPrefix+'slider" class="'+cls+'">\ |
1057 | 240 <form class="'+cls+'">\ |
241 <input class="'+cls+'cancel" type="button" value="Cancel"/>\ | |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
242 <input class="'+cls+'reset" type="button" value="Reset"/>\ |
1057 | 243 <input type="submit" name="sub" value="Ok"/>\ |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
244 </form>\ |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
245 </div>'; |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
246 $div = $(html).appendTo($elem); |
1057 | 247 var $form = $div.find('form'); |
248 $form.prepend($content); | |
249 // handle submit | |
250 $form.on('submit', function () { | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
251 onSubmit(); |
1057 | 252 fn.withdraw($div); |
253 return false; | |
254 }); | |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
255 // handle reset |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
256 $form.find('.'+cls+'reset').on('click', function () { |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
257 var sliders = $form.find('div.'+tiny); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
258 sliders.each(function () { |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
259 var reset = $(this).data('reset'); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
260 reset(); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
261 }); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
262 }); |
1057 | 263 // handle cancel |
264 $form.find('.'+cls+'cancel').on('click', function () { | |
265 fn.withdraw($div); | |
266 }); | |
267 // show div | |
268 $div.fadeIn(); | |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
269 // fix non-HTML5 slider |
1057 | 270 var $range = $form.find('input.'+tiny+'range'); |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
271 var HTML5 = $range.prop('type') === 'range'; |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
272 if (!HTML5) { |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
273 console.debug('fix input type=range'); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
274 $range.range({change: function (val) { |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
275 $range.trigger('change'); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
276 }}); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
277 } |
1057 | 278 fn.centerOnScreen(data, $div); |
279 return $div; | |
280 }; | |
281 | |
282 /** creates a TinyRangeSlider | |
283 */ | |
1063 | 284 var tinySlider = function (data, paramname, startvalue) { |
1057 | 285 var $elem = data.$elem; |
286 var opts = sliderOptions[paramname]; | |
287 var cssPrefix = data.settings.cssPrefix; | |
288 var cls = cssPrefix + 'tinyslider'; | |
289 var html = '\ | |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
290 <div class="'+cls+'">\ |
1057 | 291 <span>'+opts.label+'</span>\ |
1063 | 292 <input type="range" class="'+cls+'range" name="'+paramname+'" step="'+opts.step+'" min="'+opts.min+'" max="'+opts.max+'" value="'+startvalue+'"/>\ |
293 <input type="text" class="'+cls+'text" name="'+paramname+'" size="4" value="'+startvalue+'"/>\ | |
1057 | 294 </div>'; |
295 var $slider = $(html); | |
296 var $range = $slider.find('input.'+cls+'range'); | |
297 var $text = $slider.find('input.'+cls+'text'); | |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
298 var rangeChange = function () { |
1058
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
299 // crop floating point imprecision |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
300 var val = parseFloat($range.val()).toFixed(4); |
95d28c6ad018
rgb slider now gets/sets values, plus some refactoring
hertzhaft
parents:
1057
diff
changeset
|
301 $text.val(parseFloat(val)); |
1063 | 302 var update = $slider.data('update'); |
303 if ($.isFunction(update)) { | |
304 update($slider, val); | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
305 } |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
306 }; |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
307 var textChange = function () { |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
308 var val = $text.val(); |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
309 $range.val(val); |
1057 | 310 // val doesn't change the slider handle position in Tinyrange |
311 // can't use a jQuery "valHook" here because input type is reported as "text" (???) | |
312 var HTML5 = $range.prop('type') === 'range'; | |
1044 | 313 if (!HTML5) { |
314 $range.range('set', val); | |
315 } | |
1063 | 316 var update = $slider.data('update'); |
317 if ($.isFunction(update)) { | |
318 update($slider, val); | |
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 }; |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
321 var reset = function () { |
1063 | 322 $text.val(startvalue); |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
323 textChange(); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
324 }; |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
325 // connect slider and input |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
326 $range.on('change', rangeChange); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
327 $text.on('change', textChange); |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
328 $slider.data({ |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
329 '$text' : $text, |
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
330 '$range' : $range, |
1063 | 331 'reset' : reset, |
332 'update' : null | |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
333 }); |
1057 | 334 return $slider; |
335 }; | |
336 | |
337 /** creates a single TinyRangeSlider for param "paramname", | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
338 the new value is passed to the "onSubmit" function. |
1057 | 339 */ |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
340 var singleSlider = function (data, paramname, onSubmit) { |
1063 | 341 var classname = 'singleslider'; |
342 var $div = $('<div/>'); | |
343 var opts = sliderOptions[paramname]; | |
344 var startvalue = data.settings[paramname] || opts.start; | |
345 var $slider = tinySlider(data, paramname, startvalue); | |
1057 | 346 var getValue = function () { |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
347 // get the new value and do something with it |
1057 | 348 var val = $slider.data('$text').val(); |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
349 onSubmit(val); |
1057 | 350 }; |
1063 | 351 $div.append($slider); |
352 setupFormDiv(data, $div, classname, getValue); | |
353 var hasIndicator = opts.indicator; | |
354 if (hasIndicator) { | |
355 var cls = data.settings.cssPrefix + classname; | |
356 var $ind = indicator(cls); | |
357 $div.append($ind); | |
358 update = indicators[paramname]; | |
359 $slider.data({ | |
360 'cls' : cls, | |
361 'indicator' : $ind, | |
362 'update' : update | |
363 }); | |
364 update($slider, startvalue); | |
365 } | |
1057 | 366 }; |
367 | |
368 /** creates a compound RGB slider | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
369 the new values are passed to the "onSubmit" function. |
1057 | 370 */ |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
371 var rgbSlider = function (data, onSubmit) { |
1059
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
372 var css = data.settings.cssPrefix; |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
373 var cls = css + 'rgbslider'; |
1063 | 374 var $div = $('<div/>'); |
375 var $table = $('<table class="'+cls+'" />'); | |
376 var $ind = indicator(cls); | |
377 $div.append($table); | |
378 $div.append($ind); | |
379 var insertTableRow = function(index, value) { | |
380 var color = rgb[value]; | |
381 // start values are set in "handleSetup" | |
382 var $tr = $('<tr/>').appendTo($table); | |
383 var html = '\ | |
384 <td class="'+css+'color '+css+value+'">\ | |
385 <div>'+color.label+'</div>\ | |
386 </td>'; | |
387 $(html).appendTo($tr); | |
388 var $brgt = tinySlider(data, 'brgt', color.a); | |
389 var $cont = tinySlider(data, 'cont', color.m); | |
390 $table.data(value+'a', $brgt.data('$text')); | |
391 $table.data(value+'m', $cont.data('$text')); | |
392 $('<td class="'+css+'rgb"/>').append($brgt).appendTo($tr); | |
393 $('<td class="'+css+'rgb"/>').append($cont).appendTo($tr); | |
394 }; | |
395 var getSliderValues = function () { | |
396 // get values from sliders | |
397 var input = $table.data(); | |
398 var rgba = input['ra'].val() + '/' + input['ga'].val() + '/' + input['ba'].val(); | |
399 var rgbm = input['rm'].val() + '/' + input['gm'].val() + '/' + input['bm'].val(); | |
400 onSubmit(rgbm, rgba); | |
401 }; | |
402 var update = function () { | |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
403 // 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
|
404 var input = $table.data(); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
405 var ra = parseFloat(input['ra'].val()); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
406 var ga = parseFloat(input['ga'].val()); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
407 var ba = parseFloat(input['ba'].val()); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
408 var rm = parseFloat(input['rm'].val()); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
409 var gm = parseFloat(input['gm'].val()); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
410 var bm = parseFloat(input['bm'].val()); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
411 var setRGBValue = function (index) { |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
412 var val = index * 32; |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
413 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
|
414 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
|
415 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
|
416 $(this).css('background-color', 'rgb('+r+','+g+','+b+')'); |
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
417 }; |
1063 | 418 $ind.find('table.'+cls+'indicator td').each(setRGBValue); |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
419 }; |
1063 | 420 $.each(primaryColors, insertTableRow); |
421 setupFormDiv(data, $div, 'rgbslider', getSliderValues); | |
422 $div.find('div.'+css+'tinyslider').data('update', update); | |
423 update(); | |
424 }; | |
425 | |
426 /** creates an indicator div with 2 x 9 cells in scaled grey values | |
427 */ | |
428 var indicator = function (cls) { | |
429 var td = new Array(10).join('<td/>'); | |
430 var html = '\ | |
431 <div class="'+cls+'indicator">\ | |
432 <table class="'+cls+'grey">\ | |
433 <tr>'+td+'</tr>\ | |
434 </table>\ | |
435 <table class="'+cls+'indicator">\ | |
436 <tr>'+td+'</tr>\ | |
437 </table>\ | |
438 </div>'; | |
439 var $div = $(html); | |
1066
555f6f0d6be5
prepare for making rgb indicator an independent widget
hertzhaft
parents:
1065
diff
changeset
|
440 // TODO: replace with setRGBValue |
1061
4f5c5c578aa4
rgb slider: color indicator functional, reset works only partially
hertzhaft
parents:
1060
diff
changeset
|
441 var setGreyScale = function (index) { |
1063 | 442 // sets a series of grey values |
1059
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
443 var val = index * 32; |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
444 $(this).css('background-color', 'rgb('+val+','+val+','+val+')'); |
c7fd2f239953
rgb slider: color labels, first step to color indicator
hertzhaft
parents:
1058
diff
changeset
|
445 }; |
1062
41991d1598f1
rgb slider: reset now functional, minor refactoring
hertzhaft
parents:
1061
diff
changeset
|
446 $div.find('table.'+cls+'grey td').each(setGreyScale); |
1063 | 447 return $div; |
1042
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
448 }; |
2c5a48a624c5
TinyRange sliders now work for brgt,cont,rot (not perfect)
hertzhaft
parents:
1039
diff
changeset
|
449 |
1022 | 450 // plugin object with name and init |
451 // shared objects filled by digilib on registration | |
452 var plugin = { | |
453 name : 'sliders', | |
454 install : install, | |
455 init : init, | |
456 buttons : {}, | |
457 actions : {}, | |
458 fn : {}, | |
459 plugins : {} | |
460 }; | |
461 | |
462 if ($.fn.digilib == null) { | |
463 $.error("jquery.digilib.sliders must be loaded after jquery.digilib!"); | |
464 } else { | |
465 $.fn.digilib('plugin', plugin); | |
466 } | |
467 })(jQuery); |