Mercurial > hg > digilib-old
comparison client/digitallibrary/jquery/jquery.digilib.js @ 795:00d37112d062 jquery
birds eye view now as a plugin.
digilib now 200 lines less!
author | robcast |
---|---|
date | Fri, 18 Feb 2011 18:58:52 +0100 |
parents | ad5cc0212b66 |
children | 6914ddedaca7 |
comparison
equal
deleted
inserted
replaced
794:ad5cc0212b66 | 795:00d37112d062 |
---|---|
78 }, | 78 }, |
79 page : { | 79 page : { |
80 onclick : "gotoPage", | 80 onclick : "gotoPage", |
81 tooltip : "goto image number", | 81 tooltip : "goto image number", |
82 icon : "page.png" | 82 icon : "page.png" |
83 }, | |
84 bird : { | |
85 onclick : "showBirdDiv", | |
86 tooltip : "show bird's eye view", | |
87 icon : "birds-eye.png" | |
88 }, | 83 }, |
89 help : { | 84 help : { |
90 onclick : "showAboutDiv", | 85 onclick : "showAboutDiv", |
91 tooltip : "about Digilib", | 86 tooltip : "about Digilib", |
92 icon : "help.png" | 87 icon : "help.png" |
220 // defaults for digilib buttons | 215 // defaults for digilib buttons |
221 'buttonSettings' : { | 216 'buttonSettings' : { |
222 'fullscreen' : { | 217 'fullscreen' : { |
223 // path to button images (must end with a slash) | 218 // path to button images (must end with a slash) |
224 'imagePath' : 'img/fullscreen/', | 219 'imagePath' : 'img/fullscreen/', |
225 'standardSet' : ["reference","zoomin","zoomout","zoomarea","zoomfull","pagewidth","back","fwd","page","bird","help","reset","toggleoptions"], | 220 'standardSet' : ["reference","zoomin","zoomout","zoomarea","zoomfull","pagewidth","back","fwd","page","help","reset","toggleoptions"], |
226 'specialSet' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","size","calibrationx","scale","toggleoptions"], | 221 'specialSet' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","size","calibrationx","scale","toggleoptions"], |
227 'buttonSets' : ['standardSet', 'specialSet'] | 222 'buttonSets' : ['standardSet', 'specialSet'] |
228 }, | 223 }, |
229 'embedded' : { | 224 'embedded' : { |
230 'imagePath' : 'img/embedded/16/', | 225 'imagePath' : 'img/embedded/16/', |
231 'standardSet' : ["reference","zoomin","zoomout","zoomarea","zoomfull","bird","help","reset","toggleoptions"], | 226 'standardSet' : ["reference","zoomin","zoomout","zoomarea","zoomfull","help","reset","toggleoptions"], |
232 'specialSet' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","scale","toggleoptions"], | 227 'specialSet' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","scale","toggleoptions"], |
233 'buttonSets' : ['standardSet', 'specialSet'] | 228 'buttonSets' : ['standardSet', 'specialSet'] |
234 } | 229 } |
235 }, | 230 }, |
236 | |
237 // number of visible button groups | 231 // number of visible button groups |
238 'visibleButtonSets' : 1, | 232 'visibleButtonSets' : 1, |
239 // is birdView shown? | |
240 'isBirdDivVisible' : false, | |
241 // dimensions of bird's eye div | |
242 'birdDivWidth' : 200, | |
243 'birdDivHeight' : 200, | |
244 // parameters used by bird's eye div | |
245 'birdDivParams' : ['fn','pn','dw','dh'], | |
246 // is the "about" window shown? | 233 // is the "about" window shown? |
247 'isAboutDivVisible' : false, | 234 'isAboutDivVisible' : false, |
248 // maximum width of background image for drag-scroll | 235 // default size of background image for drag-scroll (same as Bird's Eye View image) |
236 'bgImgWidth' : 200, | |
237 'bgImgHeight' : 200, | |
238 // maximum width or height of background image for drag-scroll | |
249 'maxBgSize' : 10000, | 239 'maxBgSize' : 10000, |
240 // parameters used by background image | |
241 'bgImgParams' : ['fn','pn','dw','dh','mo','rot'], | |
250 // space to be left free in full page display, default value is for scrollbar | 242 // space to be left free in full page display, default value is for scrollbar |
251 'scalerInset' : 10 | 243 'scalerInset' : 10 |
252 }; | 244 }; |
253 | 245 |
254 // list of plugins | 246 // list of plugins |
372 showButtons(data, true, i); | 364 showButtons(data, true, i); |
373 } | 365 } |
374 // create HTML structure for scaler, taking width of buttons div into account | 366 // create HTML structure for scaler, taking width of buttons div into account |
375 setupScalerDiv(data); | 367 setupScalerDiv(data); |
376 highlightButtons(data); | 368 highlightButtons(data); |
377 // bird's eye view creation | |
378 if (elemSettings.isBirdDivVisible) { | |
379 setupBirdDiv(data); | |
380 data.$birdDiv.show(); | |
381 } | |
382 // about window creation - TODO: could be deferred? restrict to only one item? | 369 // about window creation - TODO: could be deferred? restrict to only one item? |
383 setupAboutDiv(data); | 370 setupAboutDiv(data); |
384 // drag zoom area around in scaler div | 371 // send setup event |
385 // setupZoomDrag(data); // is done in scalerImgLoadedHandler() | 372 $(data).trigger('setup'); |
386 }); | 373 }); |
387 }, | 374 }, |
388 | 375 |
389 // destroy: clean up digilib | 376 // destroy: clean up digilib |
390 destroy : function(data) { | 377 destroy : function(data) { |
399 // show or hide the 'about' window | 386 // show or hide the 'about' window |
400 showAboutDiv : function(data, show) { | 387 showAboutDiv : function(data, show) { |
401 var on = showDiv(data.settings.isAboutDivVisible, data.$aboutDiv, show); | 388 var on = showDiv(data.settings.isAboutDivVisible, data.$aboutDiv, show); |
402 data.settings.isAboutDivVisible = on; | 389 data.settings.isAboutDivVisible = on; |
403 highlightButtons(data, 'help', on); | 390 highlightButtons(data, 'help', on); |
404 }, | |
405 | |
406 // event handler: toggles the visibility of the bird's eye window | |
407 showBirdDiv : function (data, show) { | |
408 var settings = data.settings; | |
409 if (data.$birdDiv == null) { | |
410 // no bird div -> create | |
411 setupBirdDiv(data); | |
412 } | |
413 var on = showDiv(settings.isBirdDivVisible, data.$birdDiv, show); | |
414 settings.isBirdDivVisible = on; | |
415 highlightButtons(data, 'bird', on); | |
416 updateBirdDiv(data); | |
417 storeOptions(data); | |
418 }, | 391 }, |
419 | 392 |
420 // goto given page nr (+/-: relative) | 393 // goto given page nr (+/-: relative) |
421 gotoPage : function (data, pageNr) { | 394 gotoPage : function (data, pageNr) { |
422 var settings = data.settings; | 395 var settings = data.settings; |
716 var url = settings.scalerBaseUrl + '?' + queryString; | 689 var url = settings.scalerBaseUrl + '?' + queryString; |
717 return url; | 690 return url; |
718 }; | 691 }; |
719 | 692 |
720 // returns URL for bird's eye view image | 693 // returns URL for bird's eye view image |
721 var getBirdImgUrl = function (data, moreParams) { | 694 var getBgImgUrl = function (data, moreParams) { |
722 var settings = data.settings; | 695 var settings = data.settings; |
723 var birdDivOptions = { | 696 var bgOptions = { |
724 dw : settings.birdDivWidth, | 697 dw : settings.bgImgWidth, |
725 dh : settings.birdDivHeight | 698 dh : settings.bgImgHeight |
726 }; | 699 }; |
727 var birdSettings = $.extend({}, settings, birdDivOptions); | 700 var bgSettings = $.extend({}, settings, bgOptions); |
728 // use only the relevant parameters | 701 // filter scaler flags |
729 if (moreParams == null) { | 702 if (bgSettings.mo != null) { |
730 var params = getParamString(birdSettings, settings.birdDivParams, defaults); | 703 var mo = ''; |
731 } else { | 704 if (data.scalerFlags.hmir != null) { |
732 // filter scaler flags | 705 mo += 'hmir,'; |
733 if (birdSettings.mo != null) { | 706 } |
734 var mo = ''; | 707 if (data.scalerFlags.vmir != null) { |
735 if (data.scalerFlags.hmir != null) { | 708 mo += 'vmir'; |
736 mo += 'hmir,'; | 709 } |
737 } | 710 bgSettings.mo = mo; |
738 if (data.scalerFlags.vmir != null) { | 711 } |
739 mo += 'vmir'; | 712 var params = getParamString(bgSettings, settings.bgImgParams, defaults); |
740 } | |
741 birdSettings.mo = mo; | |
742 } | |
743 var params = getParamString(birdSettings, | |
744 settings.birdDivParams.concat(moreParams), defaults); | |
745 } | |
746 var url = settings.scalerBaseUrl + '?' + params; | 713 var url = settings.scalerBaseUrl + '?' + params; |
747 return url; | 714 return url; |
748 }; | 715 }; |
749 | 716 |
750 // returns URL and query string for current digilib | 717 // returns URL and query string for current digilib |
903 var url = getDigilibUrl(data); | 870 var url = getDigilibUrl(data); |
904 var history = window.history; | 871 var history = window.history; |
905 if (typeof(history.pushState) === 'function') { | 872 if (typeof(history.pushState) === 'function') { |
906 console.debug("we could modify history, but we don't..."); | 873 console.debug("we could modify history, but we don't..."); |
907 } | 874 } |
875 // reload window | |
908 window.location = url; | 876 window.location = url; |
909 } else { | 877 } else { |
910 // embedded mode -- just change img src | 878 // embedded mode -- just change img src |
911 var url = getScalerUrl(data); | 879 var url = getScalerUrl(data); |
912 data.$img.attr('src', url); | 880 data.$img.attr('src', url); |
913 // redisplay bird img | |
914 updateBirdDiv(data); | |
915 highlightButtons(data); | 881 highlightButtons(data); |
882 // send event | |
883 $(data).trigger('redisplay'); | |
916 } | 884 } |
917 }; | 885 }; |
918 | 886 |
919 // update display (overlays etc.) | 887 // update display (overlays etc.) |
920 var updateDisplay = function (data) { | 888 var updateDisplay = function (data) { |
921 updateImgTrafo(data); | 889 updateImgTrafo(data); |
922 renderMarks(data); | 890 renderMarks(data); |
923 setupZoomDrag(data); | 891 setupZoomDrag(data); |
924 if (data.settings.isBirdDivVisible) { | |
925 renderBirdArea(data); | |
926 setupBirdDrag(data); | |
927 } | |
928 // send event | 892 // send event |
929 $(data).trigger('update'); | 893 $(data).trigger('update'); |
930 }; | 894 }; |
931 | 895 |
932 // returns maximum size for scaler img in fullscreen mode | 896 // returns maximum size for scaler img in fullscreen mode |
1065 data.$buttonSets[buttonSetIdx] = $buttonsDiv; | 1029 data.$buttonSets[buttonSetIdx] = $buttonsDiv; |
1066 } | 1030 } |
1067 return $buttonsDiv; | 1031 return $buttonsDiv; |
1068 }; | 1032 }; |
1069 | 1033 |
1070 // creates HTML structure for the bird's eye view in elem | |
1071 var setupBirdDiv = function (data) { | |
1072 var $elem = data.$elem; | |
1073 // the bird's eye div | |
1074 var $birdDiv = $('<div class="birdview" style="display:none"/>'); | |
1075 // the detail indicator frame | |
1076 var $birdZoom = $('<div class="birdzoom" style="display:none; background-color:transparent;"/>'); | |
1077 // the small image | |
1078 var $birdImg = $('<img class="birdimg"/>'); | |
1079 data.$birdDiv = $birdDiv; | |
1080 data.$birdZoom = $birdZoom; | |
1081 data.$birdImg = $birdImg; | |
1082 $elem.append($birdDiv); | |
1083 $birdDiv.append($birdZoom); | |
1084 $birdDiv.append($birdImg); | |
1085 // $birdZoom.css(data.settings.birdIndicatorStyle); | |
1086 var birdUrl = getBirdImgUrl(data); | |
1087 $birdImg.load(birdImgLoadedHandler(data)); | |
1088 $birdImg.error(function () {console.error("error loading birdview image");}); | |
1089 $birdImg.attr('src', birdUrl); | |
1090 }; | |
1091 | |
1092 // update bird's eye view | |
1093 var updateBirdDiv = function (data) { | |
1094 if (!data.settings.isBirdDivVisible) return; | |
1095 var $birdImg = data.$birdImg; | |
1096 var oldsrc = $birdImg.attr('src'); | |
1097 var newsrc = getBirdImgUrl(data); | |
1098 if (oldsrc !== newsrc) { | |
1099 $birdImg.attr('src', newsrc); | |
1100 // onload handler re-renders | |
1101 } else { | |
1102 // re-render | |
1103 renderBirdArea(data); | |
1104 // enable click and drag | |
1105 setupBirdDrag(data); | |
1106 } | |
1107 }; | |
1108 | |
1109 // creates HTML structure for the about view in elem | 1034 // creates HTML structure for the about view in elem |
1110 var setupAboutDiv = function (data) { | 1035 var setupAboutDiv = function (data) { |
1111 var $elem = data.$elem; | 1036 var $elem = data.$elem; |
1112 var settings = data.settings; | 1037 var settings = data.settings; |
1113 var $aboutDiv = $('<div class="about" style="display:none"/>'); | 1038 var $aboutDiv = $('<div class="about" style="display:none"/>'); |
1295 // update display (render marks, etc.) | 1220 // update display (render marks, etc.) |
1296 updateDisplay(data); | 1221 updateDisplay(data); |
1297 }; | 1222 }; |
1298 }; | 1223 }; |
1299 | 1224 |
1300 // returns function for load event of bird's eye view img | |
1301 var birdImgLoadedHandler = function (data) { | |
1302 return function () { | |
1303 var $birdImg = $(this); | |
1304 var birdRect = geom.rectangle($birdImg); | |
1305 console.debug("birdImg loaded!", $birdImg, "rect=", birdRect, "data=", data); | |
1306 if (birdRect.width === 0) { | |
1307 // malheureusement IE7 calls load handler when there is no size info yet | |
1308 setTimeout(function () { $birdImg.triggerHandler('load'); }, 200); | |
1309 } | |
1310 // update display (zoom area indicator) | |
1311 updateDisplay(data); | |
1312 }; | |
1313 }; | |
1314 | |
1315 // place marks on the image | 1225 // place marks on the image |
1316 var renderMarks = function (data) { | 1226 var renderMarks = function (data) { |
1317 if (data.$img == null || data.imgTrafo == null) return; | 1227 if (data.$img == null || data.imgTrafo == null) return; |
1318 console.debug("rendermarks img=",data.$img," imgtrafo=",data.imgTrafo); | 1228 console.debug("rendermarks img=",data.$img," imgtrafo=",data.imgTrafo); |
1319 var $elem = data.$elem; | 1229 var $elem = data.$elem; |
1330 var $mark = $(html); | 1240 var $mark = $(html); |
1331 $elem.append($mark); | 1241 $elem.append($mark); |
1332 mpos.adjustDiv($mark); | 1242 mpos.adjustDiv($mark); |
1333 } | 1243 } |
1334 } | 1244 } |
1335 }; | |
1336 | |
1337 // show zoom area indicator on bird's eye view | |
1338 var renderBirdArea = function (data) { | |
1339 if (data.$birdImg == null || ! data.$birdImg.get(0).complete) return; | |
1340 var $birdZoom = data.$birdZoom; | |
1341 var zoomArea = data.zoomArea; | |
1342 var normalSize = isFullArea(zoomArea); | |
1343 if (normalSize) { | |
1344 $birdZoom.hide(); | |
1345 return; | |
1346 } else { | |
1347 $birdZoom.show(); | |
1348 } | |
1349 // create Transform from current area and picsize | |
1350 data.birdTrafo = getImgTrafo(data.$birdImg, FULL_AREA); | |
1351 var zoomRect = data.birdTrafo.transform(zoomArea); | |
1352 console.debug("renderBirdArea:", zoomRect, "zoomArea:", zoomArea, "$birdTrafo:", data.birdTrafo); | |
1353 // acount for border width | |
1354 var bw = getBorderWidth($birdZoom); | |
1355 zoomRect.addPosition({x : -bw, y : -bw}); | |
1356 if (data.settings.interactionMode === 'fullscreen') { | |
1357 // no animation for fullscreen | |
1358 zoomRect.adjustDiv($birdZoom); | |
1359 } else { | |
1360 // nice animation for embedded mode :-) | |
1361 // correct offsetParent because animate doesn't use offset | |
1362 var ppos = $birdZoom.offsetParent().offset(); | |
1363 var dest = { | |
1364 left : (zoomRect.x - ppos.left) + 'px', | |
1365 top : (zoomRect.y - ppos.top) + 'px', | |
1366 width : zoomRect.width, | |
1367 height : zoomRect.height | |
1368 }; | |
1369 $birdZoom.animate(dest); | |
1370 } | |
1371 }; | 1245 }; |
1372 | 1246 |
1373 // zooms by the given factor | 1247 // zooms by the given factor |
1374 var zoomBy = function(data, factor) { | 1248 var zoomBy = function(data, factor) { |
1375 var area = data.zoomArea; | 1249 var area = data.zoomArea; |
1464 $scaler.unbind('.dlZoomArea'); | 1338 $scaler.unbind('.dlZoomArea'); |
1465 $scaler.unbind(".dlZoomDrag"); | 1339 $scaler.unbind(".dlZoomDrag"); |
1466 $elem.unbind('.dlZoomArea'); | 1340 $elem.unbind('.dlZoomArea'); |
1467 // bind start zoom handler | 1341 // bind start zoom handler |
1468 $scaler.one('mousedown.dlZoomArea', zoomStart); | 1342 $scaler.one('mousedown.dlZoomArea', zoomStart); |
1469 }; | |
1470 | |
1471 // bird's eye view zoom area click and drag handler | |
1472 var setupBirdDrag = function(data) { | |
1473 var $birdImg = data.$birdImg; | |
1474 var $birdZoom = data.$birdZoom; | |
1475 var $document = $(document); | |
1476 var $scaler = data.$scaler; | |
1477 var startPos, newRect, birdImgRect, birdZoomRect, fullRect, scalerPos; | |
1478 var bw = getBorderWidth($birdZoom); | |
1479 | |
1480 // mousedown handler: start dragging bird zoom to a new position | |
1481 var birdZoomStartDrag = function(evt) { | |
1482 startPos = geom.position(evt); | |
1483 // position may have changed | |
1484 data.birdTrafo = getImgTrafo($birdImg, FULL_AREA); | |
1485 birdImgRect = geom.rectangle($birdImg); | |
1486 birdZoomRect = geom.rectangle($birdZoom); | |
1487 scalerPos = geom.position($scaler); | |
1488 newRect = null; | |
1489 fullRect = setZoomBG(data); // setup zoom background image | |
1490 $document.bind("mousemove.dlBirdMove", birdZoomMove); | |
1491 $document.bind("mouseup.dlBirdMove", birdZoomEndDrag); | |
1492 return false; | |
1493 }; | |
1494 | |
1495 // mousemove handler: drag | |
1496 var birdZoomMove = function(evt) { | |
1497 var pos = geom.position(evt); | |
1498 var delta = startPos.delta(pos); | |
1499 // move birdZoom div, keeping size | |
1500 newRect = birdZoomRect.copy(); | |
1501 newRect.addPosition(delta); | |
1502 newRect.stayInside(birdImgRect); | |
1503 // reflect birdview zoom position in scaler image | |
1504 var area = data.birdTrafo.invtransform(newRect); | |
1505 var imgArea = data.imgTrafo.transform(area); | |
1506 var offset = imgArea.getPosition().neg(); | |
1507 offset.add(scalerPos); | |
1508 if (fullRect) { | |
1509 var bgPos = fullRect.getPosition().add(offset); | |
1510 } else { | |
1511 var bgPos = offset; | |
1512 } | |
1513 // move the background image to the new position | |
1514 data.$scaler.css({ | |
1515 'background-position' : bgPos.x + "px " + bgPos.y + "px" | |
1516 }); | |
1517 // acount for border width | |
1518 newRect.addPosition({x : -bw, y : -bw}); | |
1519 newRect.adjustDiv($birdZoom); | |
1520 return false; | |
1521 }; | |
1522 | |
1523 // mouseup handler: reload page | |
1524 var birdZoomEndDrag = function(evt) { | |
1525 var settings = data.settings; | |
1526 $document.unbind("mousemove.dlBirdMove", birdZoomMove); | |
1527 $document.unbind("mouseup.dlBirdMove", birdZoomEndDrag); | |
1528 if (newRect == null) { | |
1529 // no movement happened - set center to click position | |
1530 startPos = birdZoomRect.getCenter(); | |
1531 birdZoomMove(evt); | |
1532 } | |
1533 // ugly, but needed to prevent double border width compensation | |
1534 newRect.addPosition({x : bw, y : bw}); | |
1535 var newArea = data.birdTrafo.invtransform(newRect); | |
1536 data.zoomArea = newArea; | |
1537 redisplay(data); | |
1538 return false; | |
1539 }; | |
1540 | |
1541 // clear old handler | |
1542 $document.unbind(".dlBirdMove"); | |
1543 $birdImg.unbind(".dlBirdMove"); | |
1544 $birdZoom.unbind(".dlBirdMove"); | |
1545 if (! isFullArea(data.zoomArea)) { | |
1546 // set new handler | |
1547 $birdImg.bind("mousedown.dlBirdMove", birdZoomStartDrag); | |
1548 $birdZoom.bind("mousedown.dlBirdMove", birdZoomStartDrag); | |
1549 } | |
1550 }; | |
1551 | |
1552 // move bird zoom indicator to reflect zoomed detail area | |
1553 var setBirdZoom = function(data, rect) { | |
1554 var part = data.imgTrafo.invtransform(rect); | |
1555 // area = FULL_AREA.fit(part); // no, we want to see where we transcend the borders | |
1556 birdTrafo = getImgTrafo(data.$birdImg, FULL_AREA); | |
1557 var birdRect = birdTrafo.transform(part); | |
1558 var $birdZoom = data.$birdZoom; | |
1559 // acount for border width | |
1560 var bw = getBorderWidth($birdZoom); | |
1561 birdRect.addPosition({x : -bw, y : -bw}); | |
1562 birdRect.adjustDiv(data.$birdZoom); | |
1563 }; | 1343 }; |
1564 | 1344 |
1565 // set zoom background | 1345 // set zoom background |
1566 var setZoomBG = function(data) { | 1346 var setZoomBG = function(data) { |
1567 var $scaler = data.$scaler; | 1347 var $scaler = data.$scaler; |
1583 fullRect = data.imgTrafo.transform(FULL_AREA); | 1363 fullRect = data.imgTrafo.transform(FULL_AREA); |
1584 if (fullRect.height < data.settings.maxBgSize && fullRect.width < data.settings.maxBgSize) { | 1364 if (fullRect.height < data.settings.maxBgSize && fullRect.width < data.settings.maxBgSize) { |
1585 // correct offset because background is relative | 1365 // correct offset because background is relative |
1586 var scalerPos = geom.position($scaler); | 1366 var scalerPos = geom.position($scaler); |
1587 fullRect.addPosition(scalerPos.neg()); | 1367 fullRect.addPosition(scalerPos.neg()); |
1588 var url = getBirdImgUrl(data, ['rot', 'mo']); | 1368 var url = getBgImgUrl(data); |
1589 scalerCss['background-image'] = 'url(' + url + ')'; | 1369 scalerCss['background-image'] = 'url(' + url + ')'; |
1590 scalerCss[data.bgSizeName] = fullRect.width + 'px ' + fullRect.height + 'px'; | 1370 scalerCss[data.bgSizeName] = fullRect.width + 'px ' + fullRect.height + 'px'; |
1591 scalerCss['background-position'] = fullRect.x + 'px '+ fullRect.y + 'px'; | 1371 scalerCss['background-position'] = fullRect.x + 'px '+ fullRect.y + 'px'; |
1592 } else { | 1372 } else { |
1593 // too big | 1373 // too big |
1601 | 1381 |
1602 // setup handlers for dragging the zoomed image | 1382 // setup handlers for dragging the zoomed image |
1603 var setupZoomDrag = function(data) { | 1383 var setupZoomDrag = function(data) { |
1604 var startPos, delta, fullRect; | 1384 var startPos, delta, fullRect; |
1605 var $document = $(document); | 1385 var $document = $(document); |
1386 var $data = $(data); | |
1606 var $elem = data.$elem; | 1387 var $elem = data.$elem; |
1607 var $scaler = data.$scaler; | 1388 var $scaler = data.$scaler; |
1608 var $img = data.$img; | 1389 var $img = data.$img; |
1609 | 1390 |
1610 // drag the image and load a new detail on mouse up | 1391 // drag the image and load a new detail on mouse up |
1635 'background-position' : bgPos.x + "px " + bgPos.y + "px" | 1416 'background-position' : bgPos.x + "px " + bgPos.y + "px" |
1636 }); | 1417 }); |
1637 // set birdview indicator to reflect new zoom position | 1418 // set birdview indicator to reflect new zoom position |
1638 var za = geom.rectangle($img); | 1419 var za = geom.rectangle($img); |
1639 za.addPosition(delta.neg()); | 1420 za.addPosition(delta.neg()); |
1640 setBirdZoom(data, za); | 1421 $data.trigger('dragZoom', [za]); |
1422 //TODO: setBirdZoom(data, za); | |
1641 return false; | 1423 return false; |
1642 }; | 1424 }; |
1643 | 1425 |
1644 // mouseup handler: reload zoomed image in new position | 1426 // mouseup handler: reload zoomed image in new position |
1645 var dragEnd = function (evt) { | 1427 var dragEnd = function (evt) { |
1740 var border = $elem.outerWidth() - $elem.width(); | 1522 var border = $elem.outerWidth() - $elem.width(); |
1741 return border/2; | 1523 return border/2; |
1742 }; | 1524 }; |
1743 | 1525 |
1744 // auxiliary function (from old dllib.js) | 1526 // auxiliary function (from old dllib.js) |
1745 var isFullArea = function(area) { | 1527 var isFullArea = function (area) { |
1746 return (area.width === 1.0) && (area.height === 1.0); | 1528 return (area.width === 1.0) && (area.height === 1.0); |
1747 }; | 1529 }; |
1748 | 1530 |
1749 // auxiliary function (from Douglas Crockford, A.10) | 1531 // auxiliary function (from Douglas Crockford, A.10) |
1750 var isNumber = function isNumber(value) { | 1532 var isNumber = function (value) { |
1751 return typeof value === 'number' && isFinite(value); | 1533 return typeof value === 'number' && isFinite(value); |
1752 }; | 1534 }; |
1753 | 1535 |
1754 // auxiliary function to crop senseless precision | 1536 // auxiliary function to crop senseless precision |
1755 var cropFloat = function (x) { | 1537 var cropFloat = function (x) { |
1776 } | 1558 } |
1777 | 1559 |
1778 // functions to export to plugins | 1560 // functions to export to plugins |
1779 fn = { | 1561 fn = { |
1780 geometry : geom, | 1562 geometry : geom, |
1781 FULL_AREA : FULL_AREA, | |
1782 parseQueryString : parseQueryString, | 1563 parseQueryString : parseQueryString, |
1783 getScalerUrl : getScalerUrl, | 1564 getScalerUrl : getScalerUrl, |
1784 getParamString : getParamString, | 1565 getParamString : getParamString, |
1785 getDigilibUrl : getDigilibUrl, | 1566 getDigilibUrl : getDigilibUrl, |
1786 unpackParams : unpackParams, | 1567 unpackParams : unpackParams, |
1787 packParams : packParams, | 1568 packParams : packParams, |
1569 storeOptions : storeOptions, | |
1788 redisplay : redisplay, | 1570 redisplay : redisplay, |
1789 updateDisplay : updateDisplay, | 1571 updateDisplay : updateDisplay, |
1572 highlightButtons : highlightButtons, | |
1790 showDiv : showDiv, | 1573 showDiv : showDiv, |
1574 setZoomBG : setZoomBG, | |
1791 getImgTrafo : getImgTrafo, | 1575 getImgTrafo : getImgTrafo, |
1792 getQuality : getQuality, | 1576 getQuality : getQuality, |
1793 setQuality : setQuality, | 1577 setQuality : setQuality, |
1794 getScaleMode : getScaleMode, | 1578 getScaleMode : getScaleMode, |
1795 setScaleMode : setScaleMode, | 1579 setScaleMode : setScaleMode, |
1796 isFullArea : isFullArea | 1580 isFullArea : isFullArea, |
1581 getBorderWidth : getBorderWidth | |
1797 }; | 1582 }; |
1798 | 1583 |
1799 // hook plugin into jquery | 1584 // hook plugin into jquery |
1800 $.fn.digilib = function (action) { | 1585 $.fn.digilib = function (action) { |
1801 // plugin extension mechanism | 1586 // plugin extension mechanism |