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