Mercurial > hg > digilib-old
annotate webapp/src/main/webapp/jquery/jquery.digilib.regions.js @ 1092:4964a1e252eb
first step towards a find region functionality
author | hertzhaft |
---|---|
date | Thu, 18 Oct 2012 17:22:55 +0200 |
parents | 897268e47ce4 |
children | 75a54db031dd |
rev | line source |
---|---|
792 | 1 /** optional digilib regions plugin |
2 | |
1023 | 3 Mark up a digilib image with rectangular regions. |
4 | |
5 If hasRegionInfo=true reads regions from page HTML. | |
6 Element with regions has to be in digilib element, e.g. | |
792 | 7 |
1025 | 8 <map class="dl-keep dl-regioncontent"> |
9 <area href="http://www.mpiwg-berlin.mpg.de" coords="0.1,0.1,0.4,0.1" alt="MPI fuer Wissenschaftsgeschichte"/> | |
10 <area href="http://www.biblhertz.it" coords="0.5,0.8,0.4,0.1" alt="Bibliotheca Hertziana"/> | |
11 <area coords="0.3,0.5,0.15,0.1" /> | |
12 </map> | |
1023 | 13 |
1067 | 14 According to the HTML specs, "area" and "a" elements are allowed inside of a "map". |
15 Both can have a "coords" attribute, but "area" elements can't contain child nodes. | |
16 To have regions with content use "a" tags, e.g. | |
17 | |
18 <map class="dl-keep dl-regioncontent"> | |
19 <a href="http://www.mpiwg-berlin.mpg.de" coords="0.4907,0.3521,0.1458,0.107"> | |
20 MPI fuer Wissenschaftsgeschichte | |
21 </a> | |
22 <a href="http://www.biblhertz.it" coords="0.3413,0.2912,0.4345,0.2945"> | |
23 Bibliotheca Hertziana | |
24 </a> | |
25 <area coords="0.3,0.5,0.15,0.1" /> | |
26 </map> | |
27 | |
792 | 28 */ |
29 | |
30 (function($) { | |
813 | 31 // the digilib object |
996 | 32 var digilib = null; |
813 | 33 // the functions made available by digilib |
1048 | 34 var fn = { |
35 // dummy function to avoid errors, gets overwritten by buttons plugin | |
36 highlightButtons : function () { | |
37 console.debug('regions: dummy function - highlightButtons'); | |
38 } | |
39 }; | |
813 | 40 // affine geometry plugin |
996 | 41 var geom = null; |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
42 |
792 | 43 var buttons = { |
1091 | 44 defineregion : { |
45 onclick : "defineUserRegion", | |
813 | 46 tooltip : "define a region", |
792 | 47 icon : "addregion.png" |
48 }, | |
1091 | 49 removeregion : { |
50 onclick : "removeUserRegion", | |
51 tooltip : "delete the last user defined region", | |
792 | 52 icon : "delregion.png" |
53 }, | |
1091 | 54 removeallregions : { |
55 onclick : "removeAllUserRegions", | |
56 tooltip : "delete all user defined regions", | |
1067 | 57 icon : "delallregions.png" |
58 }, | |
792 | 59 regions : { |
60 onclick : "toggleRegions", | |
61 tooltip : "show or hide regions", | |
62 icon : "regions.png" | |
63 }, | |
1092 | 64 findcoords : { |
65 onclick : "findCoords", | |
66 tooltip : "find coords and display as a new region", | |
67 icon : "regions.png" | |
68 }, | |
1048 | 69 regioninfo : { |
855 | 70 onclick : "showRegionInfo", |
1091 | 71 tooltip : "show information about user defined regions", |
792 | 72 icon : "regioninfo.png" |
73 } | |
74 }; | |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
75 |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
76 var defaults = { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
77 // are regions being edited? |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
78 'editRegions' : false, |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
79 // are regions shown? |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
80 'isRegionVisible' : true, |
813 | 81 // are region numbers shown? |
1023 | 82 'showRegionNumbers' : true, |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
83 // is there region content in the page? |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
84 'processHtmlRegions' : false, |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
85 // region defined by users and in the URL |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
86 'processUserRegions' : true, |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
87 // callback for click on region |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
88 'onClickRegion' : null, |
1091 | 89 // callback when new user region is defined |
90 'onNewRegion' : null, | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
91 // turn any region into a clickable link to its detail view (DEPRECATED) |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
92 'autoZoomOnClick' : false, |
1091 | 93 // css selector for area/a elements (must also be marked with class "dl-keep") |
1067 | 94 'htmlRegionsSelector' : 'map.dl-regioncontent area, map.dl-regioncontent a', |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
95 // buttonset of this plugin |
1092 | 96 'regionSet' : ['regions', 'defineregion', 'removeregion', 'removeallregions', 'regioninfo', 'findcoords', 'lessoptions'], |
813 | 97 // url param for regions |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
98 'rg' : null, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
99 // region attributes to copy from HTML |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
100 'regionAttributes' : { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
101 'id' :1, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
102 'href' :1, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
103 'title' :1, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
104 'target':1, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
105 'style' :1, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
106 'class' :1 |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
107 } |
813 | 108 }; |
792 | 109 |
110 var actions = { | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
111 |
792 | 112 // define a region interactively with two clicked points |
1091 | 113 defineUserRegion : function(data) { |
813 | 114 if (!data.settings.isRegionVisible) { |
115 alert("Please turn on regions visibility!"); | |
116 return; | |
117 } | |
996 | 118 var cssPrefix = data.settings.cssPrefix; |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
119 var $elem = data.$elem; |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
120 var $body = $('body'); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
121 var bodyRect = geom.rectangle($body); |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
122 var $scaler = data.$scaler; |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
123 var scalerRect = geom.rectangle($scaler); |
792 | 124 var pt1, pt2; |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
125 // overlay prevents other elements from reacting to mouse events |
996 | 126 var $overlay = $('<div class="'+cssPrefix+'overlay" style="position:absolute"/>'); |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
127 $body.append($overlay); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
128 bodyRect.adjustDiv($overlay); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
129 var attr = {'class' : cssPrefix+"regionURL"}; |
1091 | 130 var $regionDiv = addRegionDiv(data, data.userRegions, data.userRegions.length, attr); |
792 | 131 |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
132 // mousedown handler: start sizing |
792 | 133 var regionStart = function (evt) { |
134 pt1 = geom.position(evt); | |
135 // setup and show zoom div | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
136 pt1.adjustDiv($regionDiv); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
137 $regionDiv.width(0).height(0); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
138 $regionDiv.show(); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
139 // register mouse events |
920 | 140 $overlay.on("mousemove.dlRegion", regionMove); |
141 $overlay.on("mouseup.dlRegion", regionEnd); | |
792 | 142 return false; |
143 }; | |
144 | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
145 // mousemove handler: size region |
792 | 146 var regionMove = function (evt) { |
147 pt2 = geom.position(evt); | |
148 var rect = geom.rectangle(pt1, pt2); | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
149 rect.clipTo(scalerRect); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
150 // update region |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
151 rect.adjustDiv($regionDiv); |
792 | 152 return false; |
153 }; | |
154 | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
155 // mouseup handler: end sizing |
792 | 156 var regionEnd = function (evt) { |
157 pt2 = geom.position(evt); | |
158 // assume a click and continue if the area is too small | |
159 var clickRect = geom.rectangle(pt1, pt2); | |
160 if (clickRect.getArea() <= 5) return false; | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
161 // unregister mouse events and get rid of overlay |
920 | 162 $overlay.off("mousemove.dlRegion", regionMove); |
163 $overlay.off("mouseup.dlRegion", regionEnd); | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
164 $overlay.remove(); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
165 // clip region |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
166 clickRect.clipTo(scalerRect); |
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
167 clickRect.adjustDiv($regionDiv); |
1091 | 168 var region = storeUserRegion(data, $regionDiv); |
792 | 169 // fn.redisplay(data); |
1091 | 170 fn.highlightButtons(data, 'defineregion', 0); |
813 | 171 redisplay(data); |
1091 | 172 $(data).trigger('newRegion', region); |
792 | 173 return false; |
174 }; | |
175 | |
176 // bind start zoom handler | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
177 $overlay.one('mousedown.dlRegion', regionStart); |
1091 | 178 fn.highlightButtons(data, 'defineregion', 1); |
792 | 179 }, |
180 | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
181 // remove the last added URL region |
1091 | 182 removeUserRegion : function (data) { |
813 | 183 if (!data.settings.isRegionVisible) { |
184 alert("Please turn on regions visibility!"); | |
185 return; | |
186 } | |
1091 | 187 var r = data.userRegions.pop(); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
188 // no more URL regions to delete |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
189 if (r == null) return; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
190 var $regionDiv = r.$div; |
792 | 191 $regionDiv.remove(); |
813 | 192 redisplay(data); |
792 | 193 }, |
194 | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
195 // remove all manually added regions (defined through URL "rg" parameter) |
1091 | 196 removeAllUserRegions : function (data) { |
1067 | 197 if (!data.settings.isRegionVisible) { |
198 alert("Please turn on regions visibility!"); | |
199 return; | |
200 } | |
201 var cssPrefix = data.settings.cssPrefix; | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
202 var $regions = data.$elem.find('div.'+cssPrefix+'regionURL'); |
1067 | 203 $regions.remove(); |
1091 | 204 data.userRegions = []; // remove only URL regions |
1067 | 205 redisplay(data); |
206 }, | |
207 | |
813 | 208 // show/hide regions |
1060 | 209 toggleRegions : function (data) { |
813 | 210 var show = !data.settings.isRegionVisible; |
211 data.settings.isRegionVisible = show; | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
212 fn.highlightButtons(data, 'regions', show); |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
213 renderRegions(data, 1); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
214 }, |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
215 |
1048 | 216 // show region info in a window |
1060 | 217 showRegionInfo : function (data) { |
1048 | 218 var $elem = data.$elem; |
219 var cssPrefix = data.settings.cssPrefix; | |
1060 | 220 var infoselector = '#'+cssPrefix+'regionInfo'; |
221 if (fn.find(data, infoselector)) { | |
1048 | 222 fn.withdraw($info); |
223 return; | |
224 } | |
225 var html = '\ | |
226 <div id="'+cssPrefix+'regionInfo" class="'+cssPrefix+'keep '+cssPrefix+'regionInfo">\ | |
1060 | 227 <table class="'+cssPrefix+'infoheader">\ |
228 <tr>\ | |
229 <td class="'+cssPrefix+'infobutton html">HTML</td>\ | |
230 <td class="'+cssPrefix+'infobutton svgattr">SVG</td>\ | |
231 <td class="'+cssPrefix+'infobutton csv">CSV</td>\ | |
232 <td class="'+cssPrefix+'infobutton digilib">Digilib</td>\ | |
233 <td class="'+cssPrefix+'infobutton x">X</td>\ | |
234 </tr>\ | |
235 </table>\ | |
1048 | 236 </div>'; |
237 $info = $(html); | |
238 $info.appendTo($elem); | |
239 $info.append(regionInfoHTML(data)); | |
240 $info.append(regionInfoSVG(data)); | |
1060 | 241 $info.append(regionInfoCSV(data)); |
1048 | 242 $info.append(regionInfoDigilib(data)); |
243 var bind = function(name) { | |
1060 | 244 $info.find('.'+name).on('click.regioninfo', function () { |
1048 | 245 $info.find('div.'+cssPrefix+'info').hide(); |
246 $info.find('div.'+cssPrefix+name).show(); | |
1060 | 247 fn.centerOnScreen(data, $info); |
832
e4133946a9ad
display regions as HTML for use in digilib element
hertzhaft
parents:
824
diff
changeset
|
248 }); |
1048 | 249 }; |
250 bind('html'); | |
251 bind('svgattr'); | |
1060 | 252 bind('csv'); |
1048 | 253 bind('digilib'); |
254 $info.find('.x').on('click.regioninfo', function () { | |
255 fn.withdraw($info); | |
256 }); | |
257 $info.fadeIn(); | |
1060 | 258 fn.centerOnScreen(data, $info); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
259 }, |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
260 |
1091 | 261 // display region coordinates in an edit line |
262 showRegionCoords : function (data, region) { | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
263 var $elem = data.$elem; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
264 var cssPrefix = data.settings.cssPrefix; |
1091 | 265 // var infoselector = '#'+cssPrefix+'regionInfo'; |
266 // var $info = fn.find(data, infoselector); | |
267 var coords = regionCoordsString(region, ','); | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
268 var html = '\ |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
269 <div id="'+cssPrefix+'regionInfo" class="'+cssPrefix+'keep '+cssPrefix+'regionInfo">\ |
1091 | 270 <input name="coords" type="text" size="30" maxlength="40" value="'+coords+'"/>\ |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
271 </div>'; |
1091 | 272 var $info = $(html); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
273 $info.appendTo($elem); |
1091 | 274 $input = $info.find('input'); |
275 $input.on('focus.regioninfo', function (event) { | |
276 this.select(); | |
277 }); | |
278 $input.on('blur.regioninfo', function (event) { | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
279 fn.withdraw($info); |
1091 | 280 return false; |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
281 }); |
1091 | 282 $input.on('keypress.regioninfo', function (event) { |
1092 | 283 fn.withdraw($info); // OBS: "return false" disables copy! |
1091 | 284 }); |
285 $input.prop("readonly",true); | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
286 $info.fadeIn(); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
287 fn.centerOnScreen(data, $info); |
1091 | 288 $input.focus(); |
289 console.debug('showRegionCoords', coords); | |
1092 | 290 }, |
1091 | 291 |
1092 | 292 // find coordinates and display as new region |
293 findCoords : function (data) { | |
294 var $elem = data.$elem; | |
295 var cssPrefix = data.settings.cssPrefix; | |
296 var html = '\ | |
297 <div id="'+cssPrefix+'regionInfo" class="'+cssPrefix+'keep '+cssPrefix+'regionInfo">\ | |
298 <form class="'+cssPrefix+'form">\ | |
299 <div>\ | |
300 <input class="'+cssPrefix+'input" name="coords" type="text" size="30" maxlength="40"/> \ | |
301 </div>\ | |
302 <input class="'+cssPrefix+'submit" type="submit" name="sub" value="Ok"/>\ | |
303 <input class="'+cssPrefix+'cancel" type="button" value="Cancel"/>\ | |
304 </form>\ | |
305 </div>'; | |
306 var $info = $(html); | |
307 $info.appendTo($elem); | |
308 var $form = $info.find('form'); | |
309 var $input = $info.find('input.'+cssPrefix+'input'); | |
310 // handle submit | |
311 $form.on('submit', function () { | |
312 var coords = $input.val(); | |
313 var attr = { 'class' : cssPrefix+'regionURL '+cssPrefix+'findregion' }; | |
314 console.debug('findCoords', coords); | |
315 createRegionFromCoords(data, data.userRegions, coords, attr); | |
316 fn.withdraw($info); | |
317 redisplay(data); | |
318 return false; | |
319 }); | |
320 // handle cancel | |
321 $form.find('.'+cssPrefix+'cancel').on('click', function () { | |
322 fn.withdraw($info); | |
323 }); | |
324 $info.fadeIn(); | |
325 fn.centerOnScreen(data, $info); | |
326 $input.focus(); | |
327 }, | |
792 | 328 }; |
329 | |
813 | 330 // store a region div |
1091 | 331 var storeUserRegion = function (data, $regionDiv) { |
332 var regions = data.userRegions; | |
813 | 333 var rect = geom.rectangle($regionDiv); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
334 var rectangle = data.imgTrafo.invtransform(rect); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
335 rectangle.$div = $regionDiv; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
336 regions.push(rectangle); |
1091 | 337 console.debug("storeUserRegion", data.userRegions, "rectangle", rectangle); |
338 return rectangle; | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
339 }; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
340 |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
341 // open region as detail |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
342 var openDetail = function (data, region) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
343 digilib.actions.zoomArea(data, region); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
344 }; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
345 |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
346 // make a coords string |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
347 var regionCoordsString = function (rect, sep) { |
1091 | 348 if (sep == null) sep = ','; // comma as default separator |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
349 return [ |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
350 fn.cropFloatStr(rect.x), |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
351 fn.cropFloatStr(rect.y), |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
352 fn.cropFloatStr(rect.width), |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
353 fn.cropFloatStr(rect.height) |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
354 ].join(sep); |
813 | 355 }; |
356 | |
855 | 357 // html for later insertion |
358 var regionInfoHTML = function (data) { | |
996 | 359 var cssPrefix = data.settings.cssPrefix; |
360 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'html"/>'); | |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
361 $infoDiv.append($('<div/>').text('<map class="'+cssPrefix+'keep '+cssPrefix+'regioncontent">')); |
1091 | 362 $.each(data.userRegions, function(index, r) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
363 var coords = regionCoordsString(r, ','); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
364 $infoDiv.append($('<div/>').text('<area coords="' + coords + '"/>')); |
855 | 365 }); |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
366 $infoDiv.append($('<div/>').text('</map>')); |
855 | 367 return $infoDiv; |
368 }; | |
369 | |
370 // SVG-style | |
371 var regionInfoSVG = function (data) { | |
996 | 372 var cssPrefix = data.settings.cssPrefix; |
373 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'svgattr"/>'); | |
1091 | 374 $.each(data.userRegions, function(index, r) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
375 var coords = regionCoordsString(r, ' '); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
376 $infoDiv.append($('<div/>').text('"' + coords + '"')); |
855 | 377 }); |
378 return $infoDiv; | |
379 }; | |
380 | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
381 // CSV-style |
1060 | 382 var regionInfoCSV = function (data) { |
383 var cssPrefix = data.settings.cssPrefix; | |
384 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'csv"/>'); | |
1091 | 385 $.each(data.userRegions, function(index, r) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
386 var coords = regionCoordsString(r, ','); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
387 $infoDiv.append($('<div/>').text(index+1 + ": " + coords)); |
1060 | 388 }); |
389 return $infoDiv; | |
390 }; | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
391 |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
392 // digilib-style (h,w@x,y) |
855 | 393 var regionInfoDigilib = function (data) { |
996 | 394 var cssPrefix = data.settings.cssPrefix; |
395 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'digilib"/>'); | |
1091 | 396 $.each(data.userRegions, function(index, r) { |
1067 | 397 if (r.fromHtml) return; |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
398 var coords = r.toString(); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
399 $infoDiv.append($('<div/>').text(coords)); |
855 | 400 }); |
401 return $infoDiv; | |
402 }; | |
403 | |
813 | 404 // add a region to data.$elem |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
405 var addRegionDiv = function (data, regions, index, attributes) { |
1025 | 406 var settings = data.settings; |
407 var cssPrefix = settings.cssPrefix; | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
408 // var nr = regions.length; // we count regions from 1 |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
409 var cls = cssPrefix+'region '+cssPrefix+'overlay'; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
410 if (attributes && attributes['class']) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
411 cls = cls+' '+attributes['class']; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
412 delete attributes['class']; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
413 } |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
414 var $regionDiv = $('<div class="'+cls+'" style="display:none"/>'); |
813 | 415 data.$elem.append($regionDiv); |
1025 | 416 if (settings.showRegionNumbers) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
417 var $regionLink = $('<a class="'+cssPrefix+'regionnumber">'+index+'</a>'); |
920 | 418 if (attributes) $regionLink.attr(attributes); |
851 | 419 $regionDiv.append($regionLink); |
813 | 420 } |
1025 | 421 if (attributes) { |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
422 // copy attributes to div except href |
1025 | 423 if (attributes.href) { |
1091 | 424 region.href = attributes.href; |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
425 // copy attributes |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
426 var attrs = $.extend({}, attributes); |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
427 delete attrs.href; |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
428 $regionDiv.attr(attrs); |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
429 } else { |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
430 $regionDiv.attr(attributes); |
1025 | 431 } |
432 } | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
433 // DEPRECATED |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
434 if (settings.autoZoomOnClick) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
435 if (settings.onClickRegion == null) settings.onClickRegion = openDetail; |
823 | 436 } |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
437 // handle click events on div |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
438 var region = regions[index]; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
439 $regionDiv.on('click.dlRegion', function(evt) { |
1091 | 440 $(data).trigger('regionClick', region); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
441 }); |
813 | 442 return $regionDiv; |
443 }; | |
444 | |
851 | 445 // create a region div from the data.regions array |
947 | 446 var createRegionDiv = function (data, regions, index, attributes) { |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
447 var region = regions[index]; |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
448 // check if div exists |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
449 if (region.$div != null) return region.$div; |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
450 // create and add div |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
451 var $regionDiv = addRegionDiv(data, regions, index, attributes); |
813 | 452 region.$div = $regionDiv; |
453 return $regionDiv; | |
454 }; | |
455 | |
1092 | 456 // create regions from a string with coordinates |
457 var createRegionFromCoords = function (data, regions, coords, attributes) { | |
458 var pos = coords.split(/[,\/ ]+/, 4); // TODO: check validity? | |
459 var rect = geom.rectangle(pos[0], pos[1], pos[2], pos[3]); | |
460 if (rect == null) { | |
461 console.debug('createRegionsFromCoords: bad coords:', coords); | |
462 return null; | |
463 } | |
464 var index = regions.length; | |
465 regions.push(rect); | |
466 var $regionDiv = createRegionDiv(data, regions, index, attributes); | |
467 return rect; | |
468 }; | |
469 | |
851 | 470 // create regions from URL parameters |
471 var createRegionsFromURL = function (data) { | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
472 var cssPrefix = data.settings.cssPrefix; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
473 var attr = {'class' : cssPrefix+"regionURL"}; |
851 | 474 unpackRegions(data); |
1091 | 475 var regions = data.userRegions; |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
476 $.each(regions, function(index, region) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
477 createRegionDiv(data, regions, index, attr); |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
478 }); |
792 | 479 }; |
480 | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
481 // create regions from HTML |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
482 var createRegionsFromHTML = function (data) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
483 var cssPrefix = data.settings.cssPrefix; |
1091 | 484 var regions = data.htmlRegions; |
1025 | 485 // regions are defined in "area" tags |
1067 | 486 var $content = data.$elem.find(data.settings.htmlRegionsSelector); |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
487 console.debug("createRegionsFromHTML. Number of elems: ", $content.length); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
488 $content.each(function(index, area) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
489 var $area = $(area); |
852 | 490 // the "coords" attribute contains the region coords (0..1) |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
491 var coords = $area.attr('coords'); |
1024 | 492 // copy some attributes |
873 | 493 var attributes = {}; |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
494 for (var n in data.settings.regionAttributes) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
495 attributes[n] = $area.attr(n); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
496 } |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
497 // mark div as regionHTML |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
498 regionClass = cssPrefix+'regionHTML'; |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
499 if (attributes['class']) { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
500 attributes['class'] += ' ' + regionClass |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
501 } else { |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
502 attributes['class'] = regionClass |
1024 | 503 } |
1092 | 504 // create the region |
505 var rect = createRegionFromCoords(data, regions, coords, attributes); | |
506 if (rect == null) return; | |
507 rect.fromHtml = true; | |
508 var $regionDiv = rect.$div; | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
509 var $contents = $area.contents().clone(); |
1025 | 510 if (attributes.href != null) { |
511 // wrap contents in a-tag | |
512 var $ca = $('<a href="'+attributes.href+'"/>'); | |
513 $ca.append($contents); | |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
514 // alt attribute is also content (BTW: area-tag has no content()) |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
515 $ca.append($area.attr('alt')); |
1025 | 516 $regionDiv.append($ca); |
517 } else { | |
518 $regionDiv.append($contents); | |
519 // alt attribute is also content (BTW: area-tag has no content()) | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
520 $regionDiv.append($area.attr('alt')); |
1025 | 521 } |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
522 }); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
523 }; |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
524 |
813 | 525 // show a region on top of the scaler image |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
526 var renderRegion = function (data, region, anim) { |
813 | 527 if (!data.imgTrafo) return; |
950
164d69e2c481
much nicer implementation of preview for scrolling and zooming.
robcast
parents:
947
diff
changeset
|
528 var zoomArea = data.zoomArea; |
813 | 529 var $regionDiv = region.$div; |
530 if (!$regionDiv) { | |
950
164d69e2c481
much nicer implementation of preview for scrolling and zooming.
robcast
parents:
947
diff
changeset
|
531 console.error("renderRegion: region has no $div", region); |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
532 // alert("renderRegion: region has no $div to show"); |
813 | 533 return; |
534 } | |
535 var regionRect = region.copy(); | |
536 var show = data.settings.isRegionVisible; | |
1067 | 537 if (show && zoomArea.overlapsRect(regionRect) && !regionRect.containsRect(zoomArea)) { |
950
164d69e2c481
much nicer implementation of preview for scrolling and zooming.
robcast
parents:
947
diff
changeset
|
538 regionRect.clipTo(zoomArea); |
813 | 539 var screenRect = data.imgTrafo.transform(regionRect); |
1067 | 540 // console.debug("renderRegion: pos=",geom.position(screenRect)); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
541 if (anim) { |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
542 $regionDiv.fadeIn(); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
543 } else{ |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
544 $regionDiv.show(); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
545 } |
1024 | 546 // adjustDiv sets wrong coords when called BEFORE show() |
851 | 547 screenRect.adjustDiv($regionDiv); |
813 | 548 } else { |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
549 if (anim) { |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
550 $regionDiv.fadeOut(); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
551 } else{ |
824 | 552 $regionDiv.hide(); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
553 } |
813 | 554 } |
555 }; | |
556 | |
557 // show regions | |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
558 var renderRegions = function (data, anim) { |
1091 | 559 $.each(data.htmlRegions, function(index, region) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
560 renderRegion(data, region, anim); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
561 }); |
1091 | 562 $.each(data.userRegions, function(index, region) { |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
563 renderRegion(data, region, anim); |
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
564 }); |
813 | 565 }; |
566 | |
1091 | 567 // read region data from URL parameters |
813 | 568 var unpackRegions = function (data) { |
569 var rg = data.settings.rg; | |
570 if (rg == null) return; | |
1091 | 571 var regions = data.userRegions; |
958
2a2e8c039c29
changed regions parameter separator to the same as for marks
hertzhaft
parents:
950
diff
changeset
|
572 var rs = rg.split(","); |
813 | 573 for (var i = 0; i < rs.length; i++) { |
574 var r = rs[i]; | |
958
2a2e8c039c29
changed regions parameter separator to the same as for marks
hertzhaft
parents:
950
diff
changeset
|
575 var pos = r.split("/", 4); |
813 | 576 var rect = geom.rectangle(pos[0], pos[1], pos[2], pos[3]); |
577 regions.push(rect); | |
792 | 578 } |
579 }; | |
580 | |
1091 | 581 // pack user regions array into a URL parameter string |
813 | 582 var packRegions = function (data) { |
1091 | 583 var regions = data.userRegions; |
815 | 584 if (!regions.length) { |
585 data.settings.rg = null; | |
586 return; | |
587 } | |
813 | 588 var rg = ''; |
589 for (var i = 0; i < regions.length; i++) { | |
1024 | 590 var region = regions[i]; |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
591 if (rg) { |
958
2a2e8c039c29
changed regions parameter separator to the same as for marks
hertzhaft
parents:
950
diff
changeset
|
592 rg += ','; |
792 | 593 } |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
594 rg += regionCoordsString(region, '/'); |
813 | 595 } |
596 data.settings.rg = rg; | |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
597 console.debug('pack regions:', rg); |
792 | 598 }; |
599 | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
600 // reload display after a region has been added or removed |
813 | 601 var redisplay = function (data) { |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
602 if (data.settings.processUserRegions) { |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
603 packRegions(data); |
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
604 } |
813 | 605 fn.redisplay(data); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
606 }; |
813 | 607 |
1091 | 608 // event handler, gets called when a newRegion event is triggered |
609 var handleNewRegion = function (evt, region) { | |
610 var data = this; | |
611 var settings = data.settings; | |
612 console.debug("regions: handleNewRegion", region); | |
613 if (typeof settings.onNewRegion === 'function') { | |
614 // execute callback | |
615 return settings.onNewRegion(data, region); | |
616 } | |
617 if (typeof settings.onNewRegion === 'string') { | |
618 // execute action | |
619 return actions[settings.onNewRegion](data, region); | |
620 } | |
621 }; | |
622 | |
623 // event handler, gets called when a regionClick event is triggered | |
624 var handleRegionClick = function (evt, region) { | |
625 var data = this; | |
626 var settings = data.settings; | |
627 console.debug("regions: handleRegionClick", region); | |
628 if (region.href) { | |
629 // follow the href attribute of the region area | |
630 window.location = region.href; //TODO: how about target? | |
631 } | |
632 if (typeof settings.onClickRegion === 'function') { | |
633 // execute callback | |
634 return settings.onClickRegion(data, region); | |
635 } | |
636 if (typeof settings.onClickRegion === 'string') { | |
637 // execute action | |
638 return actions[settings.onClickRegion](data, region); | |
639 } | |
640 }; | |
641 | |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
642 // 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
|
643 var handleSetup = function (evt) { |
941 | 644 var data = this; |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
645 var settings = data.settings; |
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
646 console.debug("regions: handleSetup", settings.rg); |
1048 | 647 // regions with content are given in HTML divs |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
648 if (settings.processHtmlRegions) { |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
649 createRegionsFromHTML(data); |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
650 } |
1048 | 651 // regions are defined in the URL |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
652 if (settings.processUserRegions) { |
851 | 653 createRegionsFromURL(data); |
818
eff74cfaaf97
read regions from HTML (not working yet), show info
hertzhaft
parents:
815
diff
changeset
|
654 } |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
655 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
656 |
851 | 657 // 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
|
658 var handleUpdate = function (evt) { |
941 | 659 var data = this; |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
660 console.debug("regions: handleUpdate"); |
848 | 661 var settings = data.settings; |
662 fn.highlightButtons(data, 'regions' , settings.isRegionVisible); | |
850
47a6b93bde43
always show html-defined regions. wrong pos still not fixed
hertzhaft
parents:
848
diff
changeset
|
663 renderRegions(data); |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
664 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
665 |
1048 | 666 // additional buttons |
667 var installButtons = function (data) { | |
668 var settings = data.settings; | |
669 var mode = settings.interactionMode; | |
670 var buttonSettings = settings.buttonSettings[mode]; | |
671 // configure buttons through digilib "regionSet" option | |
672 var buttonSet = settings.regionSet || regionSet; | |
673 // set regionSet to [] or '' for no buttons (when showing regions only) | |
674 if (buttonSet.length && buttonSet.length > 0) { | |
675 buttonSettings.regionSet = buttonSet; | |
676 buttonSettings.buttonSets.push('regionSet'); | |
677 } | |
678 }; | |
679 | |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
680 // plugin installation called by digilib on plugin object. |
813 | 681 var install = function(plugin) { |
682 digilib = plugin; | |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
683 console.debug('installing regions plugin. digilib:', digilib); |
1048 | 684 // import digilib functions |
685 $.extend(fn, digilib.fn); | |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
686 // import geometry classes |
813 | 687 geom = fn.geometry; |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
688 // add defaults, actions, buttons |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
689 $.extend(digilib.defaults, defaults); |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
690 $.extend(digilib.actions, actions); |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
691 $.extend(digilib.buttons, buttons); |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
692 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
693 |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
694 // plugin initialization |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
695 var init = function (data) { |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
696 console.debug('initialising regions plugin. data:', data); |
835 | 697 var $elem = data.$elem; |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
698 var settings = data.settings; |
996 | 699 var cssPrefix = data.settings.cssPrefix; |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
700 // region arrays |
1091 | 701 data.userRegions = []; |
702 data.htmlRegions = []; | |
1048 | 703 // install event handlers |
848 | 704 var $data = $(data); |
920 | 705 $data.on('setup', handleSetup); |
706 $data.on('update', handleUpdate); | |
1091 | 707 $data.on('newRegion', handleNewRegion); |
708 $data.on('regionClick', handleRegionClick); | |
1048 | 709 // install buttons |
1027
ff19b9e936d3
allow predefined and user regions at the same time.
robcast
parents:
1025
diff
changeset
|
710 if (settings.processUserRegions) { |
1091 | 711 // add "rg" to digilibParamNames |
1088
16215fc22fbf
better separation of HTML and user defined regions
hertzhaft
parents:
1067
diff
changeset
|
712 // settings.digilibParamNames.push('rg'); |
1091 | 713 // TODO: this leads double params, because |
714 // settings.additionalParamNames is created earlier than this plugin's init() action | |
1048 | 715 if (digilib.plugins.buttons != null) { |
716 installButtons(data); | |
823 | 717 } |
813 | 718 } |
792 | 719 }; |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
720 |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
721 // plugin object with name and install/init methods |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
722 // shared objects filled by digilib on registration |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
723 var pluginProperties = { |
1048 | 724 name : 'regions', |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
725 install : install, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
726 init : init, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
727 buttons : {}, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
728 actions : {}, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
729 fn : {}, |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
730 plugins : {} |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
731 }; |
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
732 |
792 | 733 if ($.fn.digilib == null) { |
808
ae8e98c479d5
stub for new plugins; overlay div for regions plugin
hertzhaft
parents:
799
diff
changeset
|
734 $.error("jquery.digilib.regions must be loaded after jquery.digilib!"); |
792 | 735 } else { |
799
12f790cb30de
started to adapt regions plugin to new plugin mechanism
hertzhaft
parents:
792
diff
changeset
|
736 $.fn.digilib('plugin', pluginProperties); |
792 | 737 } |
738 })(jQuery); |