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