Mercurial > hg > digilib-old
comparison webapp/src/main/webapp/jquery/jquery.digilib.regions.js @ 1091:897268e47ce4
some events: newRegion and regionClick
author | hertzhaft |
---|---|
date | Fri, 12 Oct 2012 20:16:40 +0200 |
parents | 16215fc22fbf |
children | 4964a1e252eb |
comparison
equal
deleted
inserted
replaced
1090:436b59ff76fd | 1091:897268e47ce4 |
---|---|
39 }; | 39 }; |
40 // affine geometry plugin | 40 // affine geometry plugin |
41 var geom = null; | 41 var geom = null; |
42 | 42 |
43 var buttons = { | 43 var buttons = { |
44 defineurlregion : { | 44 defineregion : { |
45 onclick : "defineURLRegion", | 45 onclick : "defineUserRegion", |
46 tooltip : "define a region", | 46 tooltip : "define a region", |
47 icon : "addregion.png" | 47 icon : "addregion.png" |
48 }, | 48 }, |
49 removeurlregion : { | 49 removeregion : { |
50 onclick : "removeURLRegion", | 50 onclick : "removeUserRegion", |
51 tooltip : "delete the last region", | 51 tooltip : "delete the last user defined region", |
52 icon : "delregion.png" | 52 icon : "delregion.png" |
53 }, | 53 }, |
54 removeallurlregions : { | 54 removeallregions : { |
55 onclick : "removeAllURLRegions", | 55 onclick : "removeAllUserRegions", |
56 tooltip : "delete all regions", | 56 tooltip : "delete all user defined regions", |
57 icon : "delallregions.png" | 57 icon : "delallregions.png" |
58 }, | 58 }, |
59 regions : { | 59 regions : { |
60 onclick : "toggleRegions", | 60 onclick : "toggleRegions", |
61 tooltip : "show or hide regions", | 61 tooltip : "show or hide regions", |
62 icon : "regions.png" | 62 icon : "regions.png" |
63 }, | 63 }, |
64 regioninfo : { | 64 regioninfo : { |
65 onclick : "showRegionInfo", | 65 onclick : "showRegionInfo", |
66 tooltip : "show information about regions", | 66 tooltip : "show information about user defined regions", |
67 icon : "regioninfo.png" | 67 icon : "regioninfo.png" |
68 } | 68 } |
69 }; | 69 }; |
70 | 70 |
71 var defaults = { | 71 var defaults = { |
79 'processHtmlRegions' : false, | 79 'processHtmlRegions' : false, |
80 // region defined by users and in the URL | 80 // region defined by users and in the URL |
81 'processUserRegions' : true, | 81 'processUserRegions' : true, |
82 // callback for click on region | 82 // callback for click on region |
83 'onClickRegion' : null, | 83 'onClickRegion' : null, |
84 // callback when new user region is defined | |
85 'onNewRegion' : null, | |
84 // turn any region into a clickable link to its detail view (DEPRECATED) | 86 // turn any region into a clickable link to its detail view (DEPRECATED) |
85 'autoZoomOnClick' : false, | 87 'autoZoomOnClick' : false, |
86 // css selector for area elements (must also be marked with class "dl-keep") | 88 // css selector for area/a elements (must also be marked with class "dl-keep") |
87 'htmlRegionsSelector' : 'map.dl-regioncontent area, map.dl-regioncontent a', | 89 'htmlRegionsSelector' : 'map.dl-regioncontent area, map.dl-regioncontent a', |
88 // buttonset of this plugin | 90 // buttonset of this plugin |
89 'regionSet' : ['regions', 'defineurlregion', 'removeurlregion', 'removeallurlregions', 'regioninfo', 'lessoptions'], | 91 'regionSet' : ['regions', 'defineregion', 'removeregion', 'removeallregions', 'regioninfo', 'lessoptions'], |
90 // url param for regions | 92 // url param for regions |
91 'rg' : null, | 93 'rg' : null, |
92 // region attributes to copy from HTML | 94 // region attributes to copy from HTML |
93 'regionAttributes' : { | 95 'regionAttributes' : { |
94 'id' :1, | 96 'id' :1, |
101 }; | 103 }; |
102 | 104 |
103 var actions = { | 105 var actions = { |
104 | 106 |
105 // define a region interactively with two clicked points | 107 // define a region interactively with two clicked points |
106 defineURLRegion : function(data) { | 108 defineUserRegion : function(data) { |
107 if (!data.settings.isRegionVisible) { | 109 if (!data.settings.isRegionVisible) { |
108 alert("Please turn on regions visibility!"); | 110 alert("Please turn on regions visibility!"); |
109 return; | 111 return; |
110 } | 112 } |
111 var cssPrefix = data.settings.cssPrefix; | 113 var cssPrefix = data.settings.cssPrefix; |
118 // overlay prevents other elements from reacting to mouse events | 120 // overlay prevents other elements from reacting to mouse events |
119 var $overlay = $('<div class="'+cssPrefix+'overlay" style="position:absolute"/>'); | 121 var $overlay = $('<div class="'+cssPrefix+'overlay" style="position:absolute"/>'); |
120 $body.append($overlay); | 122 $body.append($overlay); |
121 bodyRect.adjustDiv($overlay); | 123 bodyRect.adjustDiv($overlay); |
122 var attr = {'class' : cssPrefix+"regionURL"}; | 124 var attr = {'class' : cssPrefix+"regionURL"}; |
123 var $regionDiv = addRegionDiv(data, data.regionsURL, data.regionsURL.length, attr); | 125 var $regionDiv = addRegionDiv(data, data.userRegions, data.userRegions.length, attr); |
124 | 126 |
125 // mousedown handler: start sizing | 127 // mousedown handler: start sizing |
126 var regionStart = function (evt) { | 128 var regionStart = function (evt) { |
127 pt1 = geom.position(evt); | 129 pt1 = geom.position(evt); |
128 // setup and show zoom div | 130 // setup and show zoom div |
156 $overlay.off("mouseup.dlRegion", regionEnd); | 158 $overlay.off("mouseup.dlRegion", regionEnd); |
157 $overlay.remove(); | 159 $overlay.remove(); |
158 // clip region | 160 // clip region |
159 clickRect.clipTo(scalerRect); | 161 clickRect.clipTo(scalerRect); |
160 clickRect.adjustDiv($regionDiv); | 162 clickRect.adjustDiv($regionDiv); |
161 storeURLRegion(data, $regionDiv); | 163 var region = storeUserRegion(data, $regionDiv); |
162 // fn.redisplay(data); | 164 // fn.redisplay(data); |
163 fn.highlightButtons(data, 'addregion', 0); | 165 fn.highlightButtons(data, 'defineregion', 0); |
164 redisplay(data); | 166 redisplay(data); |
167 $(data).trigger('newRegion', region); | |
165 return false; | 168 return false; |
166 }; | 169 }; |
167 | 170 |
168 // bind start zoom handler | 171 // bind start zoom handler |
169 $overlay.one('mousedown.dlRegion', regionStart); | 172 $overlay.one('mousedown.dlRegion', regionStart); |
170 fn.highlightButtons(data, 'addregion', 1); | 173 fn.highlightButtons(data, 'defineregion', 1); |
171 }, | 174 }, |
172 | 175 |
173 // remove the last added URL region | 176 // remove the last added URL region |
174 removeURLRegion : function (data) { | 177 removeUserRegion : function (data) { |
175 if (!data.settings.isRegionVisible) { | 178 if (!data.settings.isRegionVisible) { |
176 alert("Please turn on regions visibility!"); | 179 alert("Please turn on regions visibility!"); |
177 return; | 180 return; |
178 } | 181 } |
179 var r = data.regionsURL.pop(); | 182 var r = data.userRegions.pop(); |
180 // no more URL regions to delete | 183 // no more URL regions to delete |
181 if (r == null) return; | 184 if (r == null) return; |
182 var $regionDiv = r.$div; | 185 var $regionDiv = r.$div; |
183 $regionDiv.remove(); | 186 $regionDiv.remove(); |
184 redisplay(data); | 187 redisplay(data); |
185 }, | 188 }, |
186 | 189 |
187 // remove all manually added regions (defined through URL "rg" parameter) | 190 // remove all manually added regions (defined through URL "rg" parameter) |
188 removeAllURLRegions : function (data) { | 191 removeAllUserRegions : function (data) { |
189 if (!data.settings.isRegionVisible) { | 192 if (!data.settings.isRegionVisible) { |
190 alert("Please turn on regions visibility!"); | 193 alert("Please turn on regions visibility!"); |
191 return; | 194 return; |
192 } | 195 } |
193 var cssPrefix = data.settings.cssPrefix; | 196 var cssPrefix = data.settings.cssPrefix; |
194 var $regions = data.$elem.find('div.'+cssPrefix+'regionURL'); | 197 var $regions = data.$elem.find('div.'+cssPrefix+'regionURL'); |
195 $regions.remove(); | 198 $regions.remove(); |
196 data.regionsURL = []; // remove only URL regions | 199 data.userRegions = []; // remove only URL regions |
197 redisplay(data); | 200 redisplay(data); |
198 }, | 201 }, |
199 | 202 |
200 // show/hide regions | 203 // show/hide regions |
201 toggleRegions : function (data) { | 204 toggleRegions : function (data) { |
248 }); | 251 }); |
249 $info.fadeIn(); | 252 $info.fadeIn(); |
250 fn.centerOnScreen(data, $info); | 253 fn.centerOnScreen(data, $info); |
251 }, | 254 }, |
252 | 255 |
253 // show region coordinates in an edit line | 256 // display region coordinates in an edit line |
254 showRegionCoords : function (data) { | 257 showRegionCoords : function (data, region) { |
255 var $elem = data.$elem; | 258 var $elem = data.$elem; |
256 var cssPrefix = data.settings.cssPrefix; | 259 var cssPrefix = data.settings.cssPrefix; |
257 var infoselector = '#'+cssPrefix+'regionInfo'; | 260 // var infoselector = '#'+cssPrefix+'regionInfo'; |
258 if (fn.find(data, infoselector)) { | 261 // var $info = fn.find(data, infoselector); |
259 fn.withdraw($info); | 262 var coords = regionCoordsString(region, ','); |
260 return; | |
261 } | |
262 var html = '\ | 263 var html = '\ |
263 <div id="'+cssPrefix+'regionInfo" class="'+cssPrefix+'keep '+cssPrefix+'regionInfo">\ | 264 <div id="'+cssPrefix+'regionInfo" class="'+cssPrefix+'keep '+cssPrefix+'regionInfo">\ |
264 <input name="coords" type="text" size="30" maxlength="40"/>\ | 265 <input name="coords" type="text" size="30" maxlength="40" value="'+coords+'"/>\ |
265 <input type="button" name="close" />\ | |
266 </div>'; | 266 </div>'; |
267 $info = $(html); | 267 var $info = $(html); |
268 $info.appendTo($elem); | 268 $info.appendTo($elem); |
269 var bind = function(name) { | 269 $input = $info.find('input'); |
270 $info.find('.'+name).on('click.regioninfo', function () { | 270 $input.on('focus.regioninfo', function (event) { |
271 $info.find('div.'+cssPrefix+'info').hide(); | 271 this.select(); |
272 $info.find('div.'+cssPrefix+name).show(); | 272 }); |
273 fn.centerOnScreen(data, $info); | 273 $input.on('blur.regioninfo', function (event) { |
274 }); | |
275 }; | |
276 $info.bind('button').on('click.regioninfo', function () { | |
277 fn.withdraw($info); | 274 fn.withdraw($info); |
275 return false; | |
278 }); | 276 }); |
277 $input.on('keypress.regioninfo', function (event) { | |
278 fn.withdraw($info); | |
279 return false; | |
280 }); | |
281 $input.prop("readonly",true); | |
279 $info.fadeIn(); | 282 $info.fadeIn(); |
280 fn.centerOnScreen(data, $info); | 283 fn.centerOnScreen(data, $info); |
281 } | 284 $input.focus(); |
282 | 285 console.debug('showRegionCoords', coords); |
286 | |
287 } | |
283 }; | 288 }; |
284 | 289 |
285 // store a region div | 290 // store a region div |
286 var storeURLRegion = function (data, $regionDiv) { | 291 var storeUserRegion = function (data, $regionDiv) { |
287 var regions = data.regionsURL; | 292 var regions = data.userRegions; |
288 var rect = geom.rectangle($regionDiv); | 293 var rect = geom.rectangle($regionDiv); |
289 var rectangle = data.imgTrafo.invtransform(rect); | 294 var rectangle = data.imgTrafo.invtransform(rect); |
290 rectangle.$div = $regionDiv; | 295 rectangle.$div = $regionDiv; |
291 regions.push(rectangle); | 296 regions.push(rectangle); |
292 console.debug("storeURLregion", data.regionsURL, "rectangle", rectangle); | 297 console.debug("storeUserRegion", data.userRegions, "rectangle", rectangle); |
298 return rectangle; | |
293 }; | 299 }; |
294 | 300 |
295 // open region as detail | 301 // open region as detail |
296 var openDetail = function (data, region) { | 302 var openDetail = function (data, region) { |
297 digilib.actions.zoomArea(data, region); | 303 digilib.actions.zoomArea(data, region); |
298 }; | 304 }; |
299 | 305 |
300 // make a coords string | 306 // make a coords string |
301 var regionCoordsString = function (rect, sep) { | 307 var regionCoordsString = function (rect, sep) { |
308 if (sep == null) sep = ','; // comma as default separator | |
302 return [ | 309 return [ |
303 fn.cropFloatStr(rect.x), | 310 fn.cropFloatStr(rect.x), |
304 fn.cropFloatStr(rect.y), | 311 fn.cropFloatStr(rect.y), |
305 fn.cropFloatStr(rect.width), | 312 fn.cropFloatStr(rect.width), |
306 fn.cropFloatStr(rect.height) | 313 fn.cropFloatStr(rect.height) |
310 // html for later insertion | 317 // html for later insertion |
311 var regionInfoHTML = function (data) { | 318 var regionInfoHTML = function (data) { |
312 var cssPrefix = data.settings.cssPrefix; | 319 var cssPrefix = data.settings.cssPrefix; |
313 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'html"/>'); | 320 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'html"/>'); |
314 $infoDiv.append($('<div/>').text('<map class="'+cssPrefix+'keep '+cssPrefix+'regioncontent">')); | 321 $infoDiv.append($('<div/>').text('<map class="'+cssPrefix+'keep '+cssPrefix+'regioncontent">')); |
315 $.each(data.regionsURL, function(index, r) { | 322 $.each(data.userRegions, function(index, r) { |
316 var coords = regionCoordsString(r, ','); | 323 var coords = regionCoordsString(r, ','); |
317 $infoDiv.append($('<div/>').text('<area coords="' + coords + '"/>')); | 324 $infoDiv.append($('<div/>').text('<area coords="' + coords + '"/>')); |
318 }); | 325 }); |
319 $infoDiv.append($('<div/>').text('</map>')); | 326 $infoDiv.append($('<div/>').text('</map>')); |
320 return $infoDiv; | 327 return $infoDiv; |
322 | 329 |
323 // SVG-style | 330 // SVG-style |
324 var regionInfoSVG = function (data) { | 331 var regionInfoSVG = function (data) { |
325 var cssPrefix = data.settings.cssPrefix; | 332 var cssPrefix = data.settings.cssPrefix; |
326 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'svgattr"/>'); | 333 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'svgattr"/>'); |
327 $.each(data.regionsURL, function(index, r) { | 334 $.each(data.userRegions, function(index, r) { |
328 var coords = regionCoordsString(r, ' '); | 335 var coords = regionCoordsString(r, ' '); |
329 $infoDiv.append($('<div/>').text('"' + coords + '"')); | 336 $infoDiv.append($('<div/>').text('"' + coords + '"')); |
330 }); | 337 }); |
331 return $infoDiv; | 338 return $infoDiv; |
332 }; | 339 }; |
333 | 340 |
334 // CSV-style | 341 // CSV-style |
335 var regionInfoCSV = function (data) { | 342 var regionInfoCSV = function (data) { |
336 var cssPrefix = data.settings.cssPrefix; | 343 var cssPrefix = data.settings.cssPrefix; |
337 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'csv"/>'); | 344 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'csv"/>'); |
338 $.each(data.regionsURL, function(index, r) { | 345 $.each(data.userRegions, function(index, r) { |
339 var coords = regionCoordsString(r, ','); | 346 var coords = regionCoordsString(r, ','); |
340 $infoDiv.append($('<div/>').text(index+1 + ": " + coords)); | 347 $infoDiv.append($('<div/>').text(index+1 + ": " + coords)); |
341 }); | 348 }); |
342 return $infoDiv; | 349 return $infoDiv; |
343 }; | 350 }; |
344 | 351 |
345 // digilib-style (h,w@x,y) | 352 // digilib-style (h,w@x,y) |
346 var regionInfoDigilib = function (data) { | 353 var regionInfoDigilib = function (data) { |
347 var cssPrefix = data.settings.cssPrefix; | 354 var cssPrefix = data.settings.cssPrefix; |
348 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'digilib"/>'); | 355 var $infoDiv = $('<div class="'+cssPrefix+'info '+cssPrefix+'digilib"/>'); |
349 $.each(data.regionsURL, function(index, r) { | 356 $.each(data.userRegions, function(index, r) { |
350 if (r.fromHtml) return; | 357 if (r.fromHtml) return; |
351 var coords = r.toString(); | 358 var coords = r.toString(); |
352 $infoDiv.append($('<div/>').text(coords)); | 359 $infoDiv.append($('<div/>').text(coords)); |
353 }); | 360 }); |
354 return $infoDiv; | 361 return $infoDiv; |
369 if (settings.showRegionNumbers) { | 376 if (settings.showRegionNumbers) { |
370 var $regionLink = $('<a class="'+cssPrefix+'regionnumber">'+index+'</a>'); | 377 var $regionLink = $('<a class="'+cssPrefix+'regionnumber">'+index+'</a>'); |
371 if (attributes) $regionLink.attr(attributes); | 378 if (attributes) $regionLink.attr(attributes); |
372 $regionDiv.append($regionLink); | 379 $regionDiv.append($regionLink); |
373 } | 380 } |
374 var url = null; | |
375 if (attributes) { | 381 if (attributes) { |
376 // copy attributes to div except href | 382 // copy attributes to div except href |
377 if (attributes.href) { | 383 if (attributes.href) { |
378 url = attributes.href; | 384 region.href = attributes.href; |
379 // copy attributes | 385 // copy attributes |
380 var attrs = $.extend({}, attributes); | 386 var attrs = $.extend({}, attributes); |
381 delete attrs.href; | 387 delete attrs.href; |
382 $regionDiv.attr(attrs); | 388 $regionDiv.attr(attrs); |
383 } else { | 389 } else { |
389 if (settings.onClickRegion == null) settings.onClickRegion = openDetail; | 395 if (settings.onClickRegion == null) settings.onClickRegion = openDetail; |
390 } | 396 } |
391 // handle click events on div | 397 // handle click events on div |
392 var region = regions[index]; | 398 var region = regions[index]; |
393 $regionDiv.on('click.dlRegion', function(evt) { | 399 $regionDiv.on('click.dlRegion', function(evt) { |
394 if (settings.fullRegionLinks && url) { | 400 $(data).trigger('regionClick', region); |
395 //TODO: how about target? | |
396 window.location = url; | |
397 } | |
398 if (evt.target !== $regionDiv.get(0)) { | |
399 // this was not our event | |
400 return; | |
401 } | |
402 if (typeof settings.onClickRegion === 'function') { | |
403 // execute callback | |
404 settings.onClickRegion(data, region); | |
405 } | |
406 }); | 401 }); |
407 return $regionDiv; | 402 return $regionDiv; |
408 }; | 403 }; |
409 | 404 |
410 // create a region div from the data.regions array | 405 // create a region div from the data.regions array |
421 // create regions from URL parameters | 416 // create regions from URL parameters |
422 var createRegionsFromURL = function (data) { | 417 var createRegionsFromURL = function (data) { |
423 var cssPrefix = data.settings.cssPrefix; | 418 var cssPrefix = data.settings.cssPrefix; |
424 var attr = {'class' : cssPrefix+"regionURL"}; | 419 var attr = {'class' : cssPrefix+"regionURL"}; |
425 unpackRegions(data); | 420 unpackRegions(data); |
426 var regions = data.regionsURL; | 421 var regions = data.userRegions; |
427 $.each(regions, function(index, region) { | 422 $.each(regions, function(index, region) { |
428 createRegionDiv(data, regions, index, attr); | 423 createRegionDiv(data, regions, index, attr); |
429 }); | 424 }); |
430 }; | 425 }; |
431 | 426 |
432 // create regions from HTML | 427 // create regions from HTML |
433 var createRegionsFromHTML = function (data) { | 428 var createRegionsFromHTML = function (data) { |
434 var cssPrefix = data.settings.cssPrefix; | 429 var cssPrefix = data.settings.cssPrefix; |
435 var regions = data.regionsHTML; | 430 var regions = data.htmlRegions; |
436 // regions are defined in "area" tags | 431 // regions are defined in "area" tags |
437 var $content = data.$elem.find(data.settings.htmlRegionsSelector); | 432 var $content = data.$elem.find(data.settings.htmlRegionsSelector); |
438 console.debug("createRegionsFromHTML. Number of elems: ", $content.length); | 433 console.debug("createRegionsFromHTML. Number of elems: ", $content.length); |
439 $content.each(function(index, area) { | 434 $content.each(function(index, area) { |
440 var $area = $(area); | 435 var $area = $(area); |
506 } | 501 } |
507 }; | 502 }; |
508 | 503 |
509 // show regions | 504 // show regions |
510 var renderRegions = function (data, anim) { | 505 var renderRegions = function (data, anim) { |
511 $.each(data.regionsHTML, function(index, region) { | 506 $.each(data.htmlRegions, function(index, region) { |
512 renderRegion(data, region, anim); | 507 renderRegion(data, region, anim); |
513 }); | 508 }); |
514 $.each(data.regionsURL, function(index, region) { | 509 $.each(data.userRegions, function(index, region) { |
515 renderRegion(data, region, anim); | 510 renderRegion(data, region, anim); |
516 }); | 511 }); |
517 }; | 512 }; |
518 | 513 |
514 // read region data from URL parameters | |
519 var unpackRegions = function (data) { | 515 var unpackRegions = function (data) { |
520 // create regions from parameters | |
521 var rg = data.settings.rg; | 516 var rg = data.settings.rg; |
522 if (rg == null) return; | 517 if (rg == null) return; |
523 var regions = data.regionsURL; | 518 var regions = data.userRegions; |
524 var rs = rg.split(","); | 519 var rs = rg.split(","); |
525 for (var i = 0; i < rs.length; i++) { | 520 for (var i = 0; i < rs.length; i++) { |
526 var r = rs[i]; | 521 var r = rs[i]; |
527 var pos = r.split("/", 4); | 522 var pos = r.split("/", 4); |
528 var rect = geom.rectangle(pos[0], pos[1], pos[2], pos[3]); | 523 var rect = geom.rectangle(pos[0], pos[1], pos[2], pos[3]); |
529 regions.push(rect); | 524 regions.push(rect); |
530 } | 525 } |
531 }; | 526 }; |
532 | 527 |
533 // pack regions array into a parameter string | 528 // pack user regions array into a URL parameter string |
534 var packRegions = function (data) { | 529 var packRegions = function (data) { |
535 var regions = data.regionsURL; | 530 var regions = data.userRegions; |
536 if (!regions.length) { | 531 if (!regions.length) { |
537 data.settings.rg = null; | 532 data.settings.rg = null; |
538 return; | 533 return; |
539 } | 534 } |
540 var rg = ''; | 535 var rg = ''; |
553 var redisplay = function (data) { | 548 var redisplay = function (data) { |
554 if (data.settings.processUserRegions) { | 549 if (data.settings.processUserRegions) { |
555 packRegions(data); | 550 packRegions(data); |
556 } | 551 } |
557 fn.redisplay(data); | 552 fn.redisplay(data); |
553 }; | |
554 | |
555 // event handler, gets called when a newRegion event is triggered | |
556 var handleNewRegion = function (evt, region) { | |
557 var data = this; | |
558 var settings = data.settings; | |
559 console.debug("regions: handleNewRegion", region); | |
560 if (typeof settings.onNewRegion === 'function') { | |
561 // execute callback | |
562 return settings.onNewRegion(data, region); | |
563 } | |
564 if (typeof settings.onNewRegion === 'string') { | |
565 // execute action | |
566 return actions[settings.onNewRegion](data, region); | |
567 } | |
568 }; | |
569 | |
570 // event handler, gets called when a regionClick event is triggered | |
571 var handleRegionClick = function (evt, region) { | |
572 var data = this; | |
573 var settings = data.settings; | |
574 console.debug("regions: handleRegionClick", region); | |
575 if (region.href) { | |
576 // follow the href attribute of the region area | |
577 window.location = region.href; //TODO: how about target? | |
578 } | |
579 if (typeof settings.onClickRegion === 'function') { | |
580 // execute callback | |
581 return settings.onClickRegion(data, region); | |
582 } | |
583 if (typeof settings.onClickRegion === 'string') { | |
584 // execute action | |
585 return actions[settings.onClickRegion](data, region); | |
586 } | |
558 }; | 587 }; |
559 | 588 |
560 // event handler, reads region parameter and creates region divs | 589 // event handler, reads region parameter and creates region divs |
561 var handleSetup = function (evt) { | 590 var handleSetup = function (evt) { |
562 var data = this; | 591 var data = this; |
614 console.debug('initialising regions plugin. data:', data); | 643 console.debug('initialising regions plugin. data:', data); |
615 var $elem = data.$elem; | 644 var $elem = data.$elem; |
616 var settings = data.settings; | 645 var settings = data.settings; |
617 var cssPrefix = data.settings.cssPrefix; | 646 var cssPrefix = data.settings.cssPrefix; |
618 // region arrays | 647 // region arrays |
619 data.regionsURL = []; | 648 data.userRegions = []; |
620 data.regionsHTML = []; | 649 data.htmlRegions = []; |
621 // install event handlers | 650 // install event handlers |
622 var $data = $(data); | 651 var $data = $(data); |
623 $data.on('setup', handleSetup); | 652 $data.on('setup', handleSetup); |
624 $data.on('update', handleUpdate); | 653 $data.on('update', handleUpdate); |
654 $data.on('newRegion', handleNewRegion); | |
655 $data.on('regionClick', handleRegionClick); | |
625 // install buttons | 656 // install buttons |
626 if (settings.processUserRegions) { | 657 if (settings.processUserRegions) { |
627 // add "rg" to digilibParamNames: TODO - check with settings.additionalParamNames? | 658 // add "rg" to digilibParamNames |
628 // settings.digilibParamNames.push('rg'); | 659 // settings.digilibParamNames.push('rg'); |
660 // TODO: this leads double params, because | |
661 // settings.additionalParamNames is created earlier than this plugin's init() action | |
629 if (digilib.plugins.buttons != null) { | 662 if (digilib.plugins.buttons != null) { |
630 installButtons(data); | 663 installButtons(data); |
631 } | 664 } |
632 } | 665 } |
633 }; | 666 }; |