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