Mercurial > hg > digilib-old
annotate client/digitallibrary/jquery/jquery.digilib.regions.js @ 867:987cfe401970 stream
add default error message type config.
author | robcast |
---|---|
date | Thu, 10 Mar 2011 21:21:10 +0100 |
parents | 7ebdc106a61a |
children | d46706f0eede |
rev | line source |
---|---|
792 | 1 /** optional digilib regions plugin |
2 | |
3 markup a digilib image with rectangular regions | |
4 | |
5 TODO: | |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
6 how to display regions correctly in embedded mode? |
792 | 7 */ |
8 | |
9 (function($) { | |
813 | 10 // the digilib object |
11 var digilib; | |
792 | 12 // the data object passed by digilib |
13 var data; | |
813 | 14 // the functions made available by digilib |
792 | 15 var fn; |
813 | 16 // affine geometry plugin |
792 | 17 var geom; |
18 | |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
19 var FULL_AREA; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
20 |
813 | 21 var ID_PREFIX = "digilib-region-"; |
22 | |
792 | 23 var buttons = { |
24 addregion : { | |
813 | 25 onclick : "defineRegion", |
26 tooltip : "define a region", | |
792 | 27 icon : "addregion.png" |
28 }, | |
29 delregion : { | |
30 onclick : "removeRegion", | |
31 tooltip : "delete the last region", | |
32 icon : "delregion.png" | |
33 }, | |
34 regions : { | |
35 onclick : "toggleRegions", | |
36 tooltip : "show or hide regions", | |
37 icon : "regions.png" | |
38 }, | |
832
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
39 regionhtml : { |
855 | 40 onclick : "showRegionInfo", |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
41 tooltip : "show information about regions", |
792 | 42 icon : "regioninfo.png" |
43 } | |
44 }; | |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
45 |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
46 var defaults = { |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
47 // are regions shown? |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
48 'isRegionVisible' : true, |
813 | 49 // are region numbers shown? |
50 'showRegionNumbers' : false, | |
832
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
51 // is window with region HTML shown? |
855 | 52 'showRegionInfo' : false, |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
53 // is there region content in the page? |
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
54 'hasRegionContent' : false, |
823 | 55 // turn any region into a clickable link to its detail view |
56 'autoRegionLinks' : false, | |
57 // class name for content divs (must additionally be marked with class "keep") | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
58 'regionContentSelector' : 'div.regioncontent', |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
59 // buttonset of this plugin |
832
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
60 'regionSet' : ['regions', 'addregion', 'delregion', 'regionhtml', 'lessoptions'], |
813 | 61 // url param for regions |
851 | 62 'rg' : null |
813 | 63 }; |
792 | 64 |
65 var actions = { | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
66 |
792 | 67 // define a region interactively with two clicked points |
813 | 68 "defineRegion" : function(data) { |
69 if (!data.settings.isRegionVisible) { | |
70 alert("Please turn on regions visibility!"); | |
71 return; | |
72 } | |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
73 var $elem = data.$elem; |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
74 var $body = $('body'); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
75 var bodyRect = geom.rectangle($body); |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
76 var $scaler = data.$scaler; |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
77 var scalerRect = geom.rectangle($scaler); |
792 | 78 var pt1, pt2; |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
79 // overlay prevents other elements from reacting to mouse events |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
80 var $overlay = $('<div class="digilib-overlay"/>'); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
81 $body.append($overlay); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
82 bodyRect.adjustDiv($overlay); |
823 | 83 var $regionDiv = addRegionDiv(data, data.regions.length); |
792 | 84 |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
85 // mousedown handler: start sizing |
792 | 86 var regionStart = function (evt) { |
87 pt1 = geom.position(evt); | |
88 // setup and show zoom div | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
89 pt1.adjustDiv($regionDiv); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
90 $regionDiv.width(0).height(0); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
91 $regionDiv.show(); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
92 // register mouse events |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
93 $overlay.bind("mousemove.dlRegion", regionMove); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
94 $overlay.bind("mouseup.dlRegion", regionEnd); |
792 | 95 return false; |
96 }; | |
97 | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
98 // mousemove handler: size region |
792 | 99 var regionMove = function (evt) { |
100 pt2 = geom.position(evt); | |
101 var rect = geom.rectangle(pt1, pt2); | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
102 rect.clipTo(scalerRect); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
103 // update region |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
104 rect.adjustDiv($regionDiv); |
792 | 105 return false; |
106 }; | |
107 | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
108 // mouseup handler: end sizing |
792 | 109 var regionEnd = function (evt) { |
110 pt2 = geom.position(evt); | |
111 // assume a click and continue if the area is too small | |
112 var clickRect = geom.rectangle(pt1, pt2); | |
113 if (clickRect.getArea() <= 5) return false; | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
114 // unregister mouse events and get rid of overlay |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
115 $overlay.unbind("mousemove.dlRegion", regionMove); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
116 $overlay.unbind("mouseup.dlRegion", regionEnd); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
117 $overlay.remove(); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
118 // clip region |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
119 clickRect.clipTo(scalerRect); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
120 clickRect.adjustDiv($regionDiv); |
813 | 121 storeRegion(data, $regionDiv); |
792 | 122 // fn.redisplay(data); |
813 | 123 fn.highlightButtons(data, 'addregion', 0); |
124 redisplay(data); | |
792 | 125 return false; |
126 }; | |
127 | |
128 // bind start zoom handler | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
129 $overlay.one('mousedown.dlRegion', regionStart); |
813 | 130 fn.highlightButtons(data, 'addregion', 1); |
792 | 131 }, |
132 | |
133 // remove the last added region | |
134 "removeRegion" : function (data) { | |
813 | 135 if (!data.settings.isRegionVisible) { |
136 alert("Please turn on regions visibility!"); | |
137 return; | |
138 } | |
139 var region = data.regions.pop(); | |
140 if (region == null) return; | |
141 var $regionDiv = region.$div; | |
792 | 142 $regionDiv.remove(); |
813 | 143 redisplay(data); |
792 | 144 }, |
145 | |
813 | 146 // show/hide regions |
147 "toggleRegions" : function (data) { | |
148 var show = !data.settings.isRegionVisible; | |
149 data.settings.isRegionVisible = show; | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
150 fn.highlightButtons(data, 'regions', show); |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
151 renderRegions(data, 1); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
152 }, |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
153 |
832
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
154 // show/hide region HTML code |
855 | 155 "showRegionInfo" : function (data) { |
156 var show = !data.settings.showRegionInfo; | |
157 data.settings.showRegionInfo = show; | |
832
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
158 fn.highlightButtons(data, 'regionhtml', show); |
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
159 var $html = data.$htmlDiv; |
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
160 if (!show) { |
855 | 161 // empty the div |
832
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
162 $html.fadeOut(function () { |
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
163 $html.contents().remove(); |
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
164 }); |
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
165 return; |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
166 } |
855 | 167 regionInfo(data); |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
168 }, |
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
169 |
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
170 "redraw" : function (data) { |
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
171 renderRegions(data); |
792 | 172 } |
173 }; | |
174 | |
813 | 175 // store a region div |
176 var storeRegion = function (data, $regionDiv) { | |
177 var regions = data.regions; | |
178 var rect = geom.rectangle($regionDiv); | |
179 var regionRect = data.imgTrafo.invtransform(rect); | |
180 regionRect.$div = $regionDiv; | |
181 regions.push(regionRect); | |
182 console.debug("regions", data.regions, "regionRect", regionRect); | |
183 }; | |
184 | |
855 | 185 // clickable header |
186 var regionInfoHeader = function (data) { | |
187 var $infoDiv = $('<div class="infoheader"/>'); | |
188 var $h01 = $('<div class="infobutton">HTML</div>'); | |
189 var $h02 = $('<div class="infobutton">SVG</div>'); | |
190 var $h03 = $('<div class="infobutton">Digilib</div>'); | |
191 var $h04 = $('<div class="infobutton">X</div>'); | |
192 var bind = function($div, name) { | |
193 $div.bind('click.regioninfo', function () { | |
194 var $top = $(this).parent().parent(); | |
195 $top.find('.info').hide(); | |
196 $top.find('.' + name).show(); | |
197 }); | |
198 }; | |
199 bind($h01, 'html'); | |
200 bind($h02, 'svgattr'); | |
201 bind($h03, 'digilib'); | |
202 var $html = data.$htmlDiv; | |
203 $h04.bind('click.regioninfo', function () { | |
204 data.settings.showRegionInfo = false; | |
205 fn.highlightButtons(data, 'regionhtml', false); | |
206 $html.fadeOut(function () { | |
207 $html.contents().remove(); | |
208 }); | |
209 }); | |
210 $infoDiv.append($h01, $h02, $h03, $h04); | |
211 return $infoDiv; | |
212 }; | |
213 | |
214 // html for later insertion | |
215 var regionInfoHTML = function (data) { | |
216 var $infoDiv = $('<div class="info html"/>'); | |
217 $infoDiv.append($('<div/>').text('<div class="keep regioncontent">')); | |
218 $.each(data.regions, function(index, r) { | |
219 var area = [r.x, r.y, r.width, r.height].join(','); | |
220 $infoDiv.append($('<div/>').text('<a coords="' + area + '" >')); | |
221 }); | |
222 $infoDiv.append($('<div/>').text('</div>')); | |
223 return $infoDiv; | |
224 }; | |
225 | |
226 // SVG-style | |
227 var regionInfoSVG = function (data) { | |
228 var $infoDiv = $('<div class="info svgattr"/>'); | |
229 $.each(data.regions, function(index, r) { | |
862 | 230 var area = r.getAsSvg(); |
855 | 231 $infoDiv.append($('<div/>').text('"' + area + '"')); |
232 }); | |
233 return $infoDiv; | |
234 }; | |
235 | |
236 // digilib-style | |
237 var regionInfoDigilib = function (data) { | |
238 var $infoDiv = $('<div class="info digilib"/>'); | |
239 $.each(data.regions, function(index, r) { | |
862 | 240 var area = r.toString(); |
855 | 241 $infoDiv.append($('<div/>').text(area)); |
242 }); | |
243 return $infoDiv; | |
244 }; | |
245 | |
246 // show region info in a window | |
247 var regionInfo = function (data) { | |
248 var $html = data.$htmlDiv; | |
249 $html.append(regionInfoHeader(data)) | |
250 $html.append(regionInfoHTML(data)); | |
251 $html.append(regionInfoSVG(data)); | |
252 $html.append(regionInfoDigilib(data)); | |
253 $html.fadeIn(); | |
254 }; | |
255 | |
813 | 256 // add a region to data.$elem |
851 | 257 var addRegionDiv = function (data, index, url) { |
823 | 258 var nr = index + 1; // we count regions from 1 |
259 // create a digilib URL for this detail | |
851 | 260 url = url || getRegionUrl(data, index); |
813 | 261 var $regionDiv = $('<div class="region overlay" style="display:none"/>'); |
262 $regionDiv.attr("id", ID_PREFIX + nr); | |
263 data.$elem.append($regionDiv); | |
264 if (data.settings.showRegionNumbers) { | |
851 | 265 var $regionLink = $('<a class="regionnumber"/>'); |
266 $regionLink.attr('href', url); | |
823 | 267 $regionLink.text(nr); |
851 | 268 $regionDiv.append($regionLink); |
813 | 269 } |
823 | 270 if (data.settings.autoRegionLinks) { |
271 $regionDiv.bind('click.dlRegion', function() { | |
851 | 272 window.location = url; |
273 }); | |
823 | 274 } |
813 | 275 return $regionDiv; |
276 }; | |
277 | |
851 | 278 // create a region div from the data.regions array |
279 var createRegionDiv = function (regions, index, url) { | |
280 var $regionDiv = addRegionDiv(data, index, url); | |
813 | 281 var region = regions[index]; |
282 region.$div = $regionDiv; | |
283 return $regionDiv; | |
284 }; | |
285 | |
851 | 286 // create regions from URL parameters |
287 var createRegionsFromURL = function (data) { | |
288 unpackRegions(data); | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
289 var regions = data.regions; |
832
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
290 $.each(regions, function(i) { |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
291 createRegionDiv(regions, i); |
832
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
292 }); |
792 | 293 }; |
294 | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
295 // create regions from HTML |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
296 var createRegionsFromHTML = function (data) { |
823 | 297 var regions = data.regions; |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
298 var selector = data.settings.regionContentSelector; |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
299 // regions are defined in "a" tags |
835 | 300 var $content = data.$elem.contents(selector).contents('a'); |
851 | 301 console.debug("createRegionsFromHTML. elems: ", $content); |
835 | 302 $content.each(function(index, a) { |
303 var $a = $(a); | |
852 | 304 // the "coords" attribute contains the region coords (0..1) |
305 var coords = $a.attr('coords'); | |
306 var pos = coords.split(",", 4); | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
307 var rect = geom.rectangle(pos[0], pos[1], pos[2], pos[3]); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
308 regions.push(rect); |
851 | 309 // create the div |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
310 var href = $a.attr('href'); |
851 | 311 var $regionDiv = createRegionDiv(regions, index, href); |
312 var $contents = $a.contents().clone(); | |
313 $regionDiv.append($contents); | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
314 }); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
315 }; |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
316 |
813 | 317 // show a region on top of the scaler image |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
318 var renderRegion = function (data, index, anim) { |
813 | 319 if (!data.imgTrafo) return; |
320 var $elem = data.$elem; | |
792 | 321 var regions = data.regions; |
813 | 322 if (index > regions.length) return; |
851 | 323 var region = regions[index]; |
813 | 324 var $regionDiv = region.$div; |
325 if (!$regionDiv) { | |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
326 console.debug("renderRegion: region has no $div", region); |
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
327 // alert("renderRegion: region has no $div to show"); |
813 | 328 return; |
329 } | |
330 var regionRect = region.copy(); | |
331 var show = data.settings.isRegionVisible; | |
332 if (show && data.zoomArea.overlapsRect(regionRect)) { | |
333 regionRect.clipTo(data.zoomArea); | |
334 var screenRect = data.imgTrafo.transform(regionRect); | |
851 | 335 console.debug("renderRegion: pos=",geom.position(screenRect)); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
336 if (anim) { |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
337 $regionDiv.fadeIn(); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
338 } else{ |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
339 $regionDiv.show(); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
340 } |
851 | 341 // for some reason adjustDiv sets wrong coords when called BEFORE show()? |
342 screenRect.adjustDiv($regionDiv); | |
813 | 343 } else { |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
344 if (anim) { |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
345 $regionDiv.fadeOut(); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
346 } else{ |
824 | 347 $regionDiv.hide(); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
348 } |
813 | 349 } |
350 }; | |
351 | |
352 // show regions | |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
353 var renderRegions = function (data, anim) { |
813 | 354 for (var i = 0; i < data.regions.length ; i++) { |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
355 renderRegion(data, i, anim); |
813 | 356 } |
357 }; | |
358 | |
359 var unpackRegions = function (data) { | |
360 // create regions from parameters | |
361 var rg = data.settings.rg; | |
362 if (rg == null) return; | |
363 var regions = data.regions; | |
852 | 364 var rs = rg.split(";"); |
813 | 365 for (var i = 0; i < rs.length; i++) { |
366 var r = rs[i]; | |
852 | 367 var pos = r.split(",", 4); |
813 | 368 var rect = geom.rectangle(pos[0], pos[1], pos[2], pos[3]); |
369 regions.push(rect); | |
792 | 370 } |
371 }; | |
372 | |
813 | 373 // pack regions array into a parameter string |
374 var packRegions = function (data) { | |
375 var regions = data.regions; | |
815 | 376 if (!regions.length) { |
377 data.settings.rg = null; | |
378 return; | |
379 } | |
813 | 380 var rg = ''; |
381 for (var i = 0; i < regions.length; i++) { | |
382 region = regions[i]; | |
383 if (i) { | |
852 | 384 rg += ';'; |
792 | 385 } |
813 | 386 rg += [ |
387 fn.cropFloatStr(region.x), | |
388 fn.cropFloatStr(region.y), | |
389 fn.cropFloatStr(region.width), | |
390 fn.cropFloatStr(region.height) | |
852 | 391 ].join(','); |
813 | 392 } |
393 data.settings.rg = rg; | |
792 | 394 }; |
395 | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
396 // reload display after a region has been added or removed |
813 | 397 var redisplay = function (data) { |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
398 if (!data.settings.hasRegionContent) { |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
399 packRegions(data); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
400 } |
813 | 401 fn.redisplay(data); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
402 }; |
813 | 403 |
823 | 404 // for turning region numbers/region divs into links to zoomed details |
405 var getRegionUrl = function (data, index) { | |
406 var region = data.regions[index]; | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
407 var settings = data.settings; |
823 | 408 var params = { |
409 "fn" : settings.fn, | |
410 "pn" : settings.pn | |
411 }; | |
412 fn.packArea(params, region); | |
413 fn.packMarks(params, data.marks); | |
414 fn.packScalerFlags(params, data.scalerFlags); | |
415 var paramNames = digilib.defaults.digilibParamNames; | |
416 // build our own digilib URL without storing anything | |
417 var queryString = fn.getParamString(params, paramNames, digilib.defaults); | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
418 return settings.digilibBaseUrl + '?' + queryString; |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
419 }; |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
420 |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
421 // event handler, reads region parameter and creates region divs |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
422 var handleSetup = function (evt) { |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
423 data = this; |
813 | 424 console.debug("regions: handleSetup", data.settings.rg); |
823 | 425 // regions with content are given in HTML divs |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
426 if (data.settings.hasRegionContent) { |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
427 createRegionsFromHTML(data); |
823 | 428 // regions are defined in the URL |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
429 } else { |
851 | 430 createRegionsFromURL(data); |
855 | 431 fn.highlightButtons(data, 'regionhtml', data.settings.showRegionInfo); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
432 } |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
433 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
434 |
851 | 435 // event handler, sets buttons and shows regions when scaler img is reloaded |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
436 var handleUpdate = function (evt) { |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
437 data = this; |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
438 console.debug("regions: handleUpdate"); |
848 | 439 var settings = data.settings; |
440 fn.highlightButtons(data, 'regions' , settings.isRegionVisible); | |
855 | 441 fn.highlightButtons(data, 'regionhtml' , settings.showRegionInfo); |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
442 renderRegions(data); |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
443 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
444 |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
445 // event handler, redisplays regions (e.g. in a new position) |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
446 var handleRedisplay = function (evt) { |
813 | 447 data = this; |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
448 console.debug("regions: handleRedisplay"); |
851 | 449 // renderRegions(data); |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
450 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
451 |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
452 // event handler |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
453 var handleDragZoom = function (evt, zoomArea) { |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
454 // console.debug("regions: handleDragZoom, zoomArea:", zoomArea); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
455 // data = this; |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
456 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
457 |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
458 // plugin installation called by digilib on plugin object. |
813 | 459 var install = function(plugin) { |
460 digilib = plugin; | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
461 console.debug('installing regions plugin. digilib:', digilib); |
813 | 462 fn = digilib.fn; |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
463 // import geometry classes |
813 | 464 geom = fn.geometry; |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
465 FULL_AREA = geom.rectangle(0,0,1,1); |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
466 // add defaults, actions, buttons |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
467 $.extend(digilib.defaults, defaults); |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
468 $.extend(digilib.actions, actions); |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
469 $.extend(digilib.buttons, buttons); |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
470 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
471 |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
472 // plugin initialization |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
473 var init = function (data) { |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
474 console.debug('initialising regions plugin. data:', data); |
835 | 475 var $elem = data.$elem; |
823 | 476 // regions array |
477 data.regions = []; | |
835 | 478 // regions div |
479 var $html = $('<div class="keep regionHTML"/>'); | |
480 $elem.append($html); | |
832
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
481 data.$htmlDiv = $html; |
848 | 482 // install event handler |
483 var $data = $(data); | |
484 $data.bind('setup', handleSetup); | |
485 $data.bind('update', handleUpdate); | |
486 $data.bind('redisplay', handleRedisplay); | |
487 $data.bind('dragZoom', handleDragZoom); | |
488 var settings = data.settings; | |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
489 var selector = data.settings.regionContentSelector; |
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
490 settings.hasRegionContent = $elem.has(selector).length > 0; |
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
491 // neither URL-defined regions nor buttons when regions are predefined in HTML |
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
492 if (!settings.hasRegionContent) { |
848 | 493 var mode = settings.interactionMode; |
823 | 494 // add "rg" to digilibParamNames |
848 | 495 settings.digilibParamNames.push('rg'); |
823 | 496 // additional buttons |
848 | 497 var buttonSettings = settings.buttonSettings[mode]; |
823 | 498 // configure buttons through digilib "regionSet" option |
848 | 499 var buttonSet = settings.regionSet || regionSet; |
823 | 500 // set regionSet to [] or '' for no buttons (when showing regions only) |
501 if (buttonSet.length && buttonSet.length > 0) { | |
851 | 502 buttonSettings.regionSet = buttonSet; |
823 | 503 buttonSettings.buttonSets.push('regionSet'); |
504 } | |
813 | 505 } |
792 | 506 }; |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
507 |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
508 // plugin object with name and install/init methods |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
509 // shared objects filled by digilib on registration |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
510 var pluginProperties = { |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
511 name : 'region', |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
512 install : install, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
513 init : init, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
514 buttons : {}, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
515 actions : {}, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
516 fn : {}, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
517 plugins : {} |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
518 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
519 |
792 | 520 if ($.fn.digilib == null) { |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
521 $.error("jquery.digilib.regions must be loaded after jquery.digilib!"); |
792 | 522 } else { |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
523 $.fn.digilib('plugin', pluginProperties); |
792 | 524 } |
525 })(jQuery); |