Mercurial > hg > digilib-old
comparison client/digitallibrary/jquery/jquery.digilib.js @ 775:65cdf970934d jquery
minor precisations
author | hertzhaft |
---|---|
date | Fri, 11 Feb 2011 23:11:04 +0100 |
parents | 7e9851ef03d7 |
children | 34bba748004d |
comparison
equal
deleted
inserted
replaced
770:6d7c51e4724b | 775:65cdf970934d |
---|---|
232 'standardSet' : ["reference","zoomin","zoomout","zoomarea","zoomfull","bird","help","reset","toggleoptions"], | 232 'standardSet' : ["reference","zoomin","zoomout","zoomarea","zoomfull","bird","help","reset","toggleoptions"], |
233 'specialSet' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","scale","toggleoptions"], | 233 'specialSet' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","scale","toggleoptions"], |
234 'buttonSets' : ['standardSet', 'specialSet'] | 234 'buttonSets' : ['standardSet', 'specialSet'] |
235 } | 235 } |
236 }, | 236 }, |
237 | 237 |
238 // number of visible button groups | 238 // number of visible button groups |
239 'visibleButtonSets' : 1, | 239 'visibleButtonSets' : 1, |
240 // is birdView shown? | 240 // is birdView shown? |
241 'isBirdDivVisible' : false, | 241 'isBirdDivVisible' : false, |
242 // dimensions of bird's eye div | 242 // dimensions of bird's eye div |
243 'birdDivWidth' : 200, | 243 'birdDivWidth' : 200, |
244 'birdDivHeight' : 200, | 244 'birdDivHeight' : 200, |
245 // parameters used by bird's eye div | 245 // parameters used by bird's eye div |
246 'birdDivParams' : ['fn','pn','dw','dh'], | 246 'birdDivParams' : ['fn','pn','dw','dh'], |
247 // style of the zoom area indicator in the bird's eye div | |
248 'birdIndicatorStyle' : {'border' : '2px solid #ff0000' }, | |
249 // style of zoom area "rubber band" | |
250 'zoomrectStyle' : {'border' : '2px solid #ff0000' }, | |
251 // is the "about" window shown? | 247 // is the "about" window shown? |
252 'isAboutDivVisible' : false, | 248 'isAboutDivVisible' : false, |
253 // maximum width of background image for drag-scroll | 249 // maximum width of background image for drag-scroll |
254 'maxBgSize' : 10000 | 250 'maxBgSize' : 10000 |
255 | 251 |
605 | 601 |
606 // calibrate (only faking) | 602 // calibrate (only faking) |
607 calibrate : function (data) { | 603 calibrate : function (data) { |
608 loadImageInfo(data); | 604 loadImageInfo(data); |
609 }, | 605 }, |
610 | 606 |
611 // set image scale mode | 607 // set image scale mode |
612 setScaleMode : function (data, mode) { | 608 setScaleMode : function (data, mode) { |
613 var oldM = getScaleMode(data); | 609 var oldM = getScaleMode(data); |
614 if (mode == null) { | 610 if (mode == null) { |
615 mode = window.prompt("Image scale mode (screen, pixel, size)", oldM); | 611 mode = window.prompt("Image scale mode (screen, pixel, size)", oldM); |
618 setScaleMode(data, mode); | 614 setScaleMode(data, mode); |
619 data.scaleMode = mode; | 615 data.scaleMode = mode; |
620 redisplay(data); | 616 redisplay(data); |
621 } | 617 } |
622 } | 618 } |
623 | 619 |
624 // end of actions | 620 // end of actions |
625 }; | 621 }; |
626 | 622 |
627 // returns parameters from page url | 623 // returns parameters from page url |
628 var parseQueryParams = function() { | 624 var parseQueryParams = function() { |
741 if (complete != null) { | 737 if (complete != null) { |
742 complete.call(this, data, json); | 738 complete.call(this, data, json); |
743 } | 739 } |
744 }); | 740 }); |
745 }; | 741 }; |
746 | 742 |
747 // processes some parameters into objects and stuff | 743 // processes some parameters into objects and stuff |
748 var unpackParams = function (data) { | 744 var unpackParams = function (data) { |
749 var settings = data.settings; | 745 var settings = data.settings; |
750 // zoom area | 746 // zoom area |
751 var zoomArea = geom.rectangle(settings.wx, settings.wy, settings.ww, settings.wh); | 747 var zoomArea = geom.rectangle(settings.wx, settings.wy, settings.ww, settings.wh); |
898 renderBirdArea(data); | 894 renderBirdArea(data); |
899 setupBirdDrag(data); | 895 setupBirdDrag(data); |
900 } | 896 } |
901 // TODO: update event subscriber? | 897 // TODO: update event subscriber? |
902 }; | 898 }; |
903 | 899 |
904 // returns maximum size for scaler img in fullscreen mode | 900 // returns maximum size for scaler img in fullscreen mode |
905 var getFullscreenImgSize = function ($elem) { | 901 var getFullscreenImgSize = function ($elem) { |
906 var $win = $(window); | 902 var $win = $(window); |
907 var winH = $win.height(); | 903 var winH = $win.height(); |
908 var winW = $win.width(); | 904 var winW = $win.width(); |
1039 data.$birdZoom = $birdZoom; | 1035 data.$birdZoom = $birdZoom; |
1040 data.$birdImg = $birdImg; | 1036 data.$birdImg = $birdImg; |
1041 $elem.append($birdDiv); | 1037 $elem.append($birdDiv); |
1042 $birdDiv.append($birdZoom); | 1038 $birdDiv.append($birdZoom); |
1043 $birdDiv.append($birdImg); | 1039 $birdDiv.append($birdImg); |
1044 $birdZoom.css(data.settings.birdIndicatorStyle); | 1040 // $birdZoom.css(data.settings.birdIndicatorStyle); |
1045 var birdUrl = getBirdImgUrl(data); | 1041 var birdUrl = getBirdImgUrl(data); |
1046 $birdImg.load(birdImgLoadedHandler(data)); | 1042 $birdImg.load(birdImgLoadedHandler(data)); |
1047 $birdImg.error(function () {console.error("error loading birdview image");}); | 1043 $birdImg.error(function () {console.error("error loading birdview image");}); |
1048 $birdImg.attr('src', birdUrl); | 1044 $birdImg.attr('src', birdUrl); |
1049 }; | 1045 }; |
1080 $aboutDiv.append($content); | 1076 $aboutDiv.append($content); |
1081 $link.append($logo); | 1077 $link.append($logo); |
1082 $logo.attr('src', settings.logoUrl); | 1078 $logo.attr('src', settings.logoUrl); |
1083 $link.attr('href', settings.homeUrl); | 1079 $link.attr('href', settings.homeUrl); |
1084 $content.text('Version: ' + settings.version); | 1080 $content.text('Version: ' + settings.version); |
1081 data.$aboutDiv = $aboutDiv; | |
1085 // click hides | 1082 // click hides |
1086 $aboutDiv.bind('click.digilib', function () { | 1083 $aboutDiv.bind('click.digilib', function () { |
1087 settings.isAboutDivVisible = showDiv(settings.isAboutDivVisible, $aboutDiv, 0); | 1084 actions['showAboutDiv'](data, false); |
1088 return false; | |
1089 }); | 1085 }); |
1090 data.$aboutDiv = $aboutDiv; | |
1091 }; | 1086 }; |
1092 | 1087 |
1093 // shows some window e.g. 'about' (toggle visibility if show is null) | 1088 // shows some window e.g. 'about' (toggle visibility if show is null) |
1094 var showDiv = function (isVisible, $div, show) { | 1089 var showDiv = function (isVisible, $div, show) { |
1095 if (show == null) { | 1090 if (show == null) { |
1169 highlight('hmir', flags.hmir); | 1164 highlight('hmir', flags.hmir); |
1170 highlight('vmir', flags.vmir); | 1165 highlight('vmir', flags.vmir); |
1171 highlight('quality', flags.q1 || flags.q2); | 1166 highlight('quality', flags.q1 || flags.q2); |
1172 highlight('zoomin', ! isFullArea(data.zoomArea)); | 1167 highlight('zoomin', ! isFullArea(data.zoomArea)); |
1173 }; | 1168 }; |
1174 | 1169 |
1175 // create Transform from area and $img | 1170 // create Transform from area and $img |
1176 var getImgTrafo = function ($img, area, rot, hmir, vmir, mode, imgInfo) { | 1171 var getImgTrafo = function ($img, area, rot, hmir, vmir, mode, imgInfo) { |
1177 var picrect = geom.rectangle($img); | 1172 var picrect = geom.rectangle($img); |
1178 if (mode != null) { | 1173 if (mode != null) { |
1179 if (mode === 'pixel') { | 1174 if (mode === 'pixel') { |
1225 data.settings.rot, data.scalerFlags.hmir, data.scalerFlags.vmir, | 1220 data.settings.rot, data.scalerFlags.hmir, data.scalerFlags.vmir, |
1226 data.scaleMode, data.imgInfo); | 1221 data.scaleMode, data.imgInfo); |
1227 // console.debug("imgTrafo=", data.imgTrafo); | 1222 // console.debug("imgTrafo=", data.imgTrafo); |
1228 } | 1223 } |
1229 }; | 1224 }; |
1230 | 1225 |
1231 // returns function for load event of scaler img | 1226 // returns function for load event of scaler img |
1232 var scalerImgLoadedHandler = function (data) { | 1227 var scalerImgLoadedHandler = function (data) { |
1233 return function () { | 1228 return function () { |
1234 var $img = $(this); | 1229 var $img = $(this); |
1235 console.debug("scaler img loaded=",$img); | 1230 console.debug("scaler img loaded=",$img); |
1297 // create Transform from current area and picsize | 1292 // create Transform from current area and picsize |
1298 data.birdTrafo = getImgTrafo(data.$birdImg, FULL_AREA); | 1293 data.birdTrafo = getImgTrafo(data.$birdImg, FULL_AREA); |
1299 var zoomRect = data.birdTrafo.transform(zoomArea); | 1294 var zoomRect = data.birdTrafo.transform(zoomArea); |
1300 console.debug("renderBirdArea:", zoomRect, "zoomArea:", zoomArea, "$birdTrafo:", data.birdTrafo); | 1295 console.debug("renderBirdArea:", zoomRect, "zoomArea:", zoomArea, "$birdTrafo:", data.birdTrafo); |
1301 // acount for border width | 1296 // acount for border width |
1302 zoomRect.addPosition({x : -2, y : -2}); | 1297 var bw = getBorderWidth($birdZoom); |
1298 zoomRect.addPosition({x : -bw, y : -bw}); | |
1303 if (data.settings.interactionMode === 'fullscreen') { | 1299 if (data.settings.interactionMode === 'fullscreen') { |
1304 // no animation for fullscreen | 1300 // no animation for fullscreen |
1305 zoomRect.adjustDiv($birdZoom); | 1301 zoomRect.adjustDiv($birdZoom); |
1306 } else { | 1302 } else { |
1307 // nice animation for embedded mode :-) | 1303 // nice animation for embedded mode :-) |
1354 $elem = data.$elem; | 1350 $elem = data.$elem; |
1355 $scaler = data.$scaler; | 1351 $scaler = data.$scaler; |
1356 var pt1, pt2; | 1352 var pt1, pt2; |
1357 var $zoomDiv = $('<div class="zoomrect" style="display:none"/>'); | 1353 var $zoomDiv = $('<div class="zoomrect" style="display:none"/>'); |
1358 $elem.append($zoomDiv); | 1354 $elem.append($zoomDiv); |
1359 $zoomDiv.css(data.settings.zoomrectStyle); | 1355 // $zoomDiv.css(data.settings.zoomrectStyle); |
1360 var picRect = geom.rectangle($scaler); | 1356 var picRect = geom.rectangle($scaler); |
1361 // FIX ME: is there a way to query the border width from CSS info? | 1357 // FIX ME: is there a way to query the border width from CSS info? |
1362 // rect.x -= 2; // account for overlay borders | 1358 // rect.x -= 2; // account for overlay borders |
1363 // rect.y -= 2; | 1359 // rect.y -= 2; |
1364 | 1360 |
1420 var $birdImg = data.$birdImg; | 1416 var $birdImg = data.$birdImg; |
1421 var $birdZoom = data.$birdZoom; | 1417 var $birdZoom = data.$birdZoom; |
1422 var $document = $(document); | 1418 var $document = $(document); |
1423 var $scaler = data.$scaler; | 1419 var $scaler = data.$scaler; |
1424 var startPos, newRect, birdImgRect, birdZoomRect, fullRect, scalerPos; | 1420 var startPos, newRect, birdImgRect, birdZoomRect, fullRect, scalerPos; |
1421 var bw = getBorderWidth($birdZoom); | |
1425 | 1422 |
1426 // mousedown handler: start dragging bird zoom to a new position | 1423 // mousedown handler: start dragging bird zoom to a new position |
1427 var birdZoomStartDrag = function(evt) { | 1424 var birdZoomStartDrag = function(evt) { |
1428 startPos = geom.position(evt); | 1425 startPos = geom.position(evt); |
1429 // position may have changed | 1426 // position may have changed |
1459 // move the background image to the new position | 1456 // move the background image to the new position |
1460 data.$scaler.css({ | 1457 data.$scaler.css({ |
1461 'background-position' : bgPos.x + "px " + bgPos.y + "px" | 1458 'background-position' : bgPos.x + "px " + bgPos.y + "px" |
1462 }); | 1459 }); |
1463 // acount for border width | 1460 // acount for border width |
1464 newRect.addPosition({x : -2, y : -2}); | 1461 newRect.addPosition({x : -bw, y : -bw}); |
1465 newRect.adjustDiv($birdZoom); | 1462 newRect.adjustDiv($birdZoom); |
1466 return false; | 1463 return false; |
1467 }; | 1464 }; |
1468 | 1465 |
1469 // mouseup handler: reload page | 1466 // mouseup handler: reload page |
1475 // no movement happened - set center to click position | 1472 // no movement happened - set center to click position |
1476 startPos = birdZoomRect.getCenter(); | 1473 startPos = birdZoomRect.getCenter(); |
1477 birdZoomMove(evt); | 1474 birdZoomMove(evt); |
1478 } | 1475 } |
1479 // ugly, but needed to prevent double border width compensation | 1476 // ugly, but needed to prevent double border width compensation |
1480 newRect.addPosition({x : +2, y : +2}); | 1477 newRect.addPosition({x : bw, y : bw}); |
1481 var newArea = data.birdTrafo.invtransform(newRect); | 1478 var newArea = data.birdTrafo.invtransform(newRect); |
1482 data.zoomArea = newArea; | 1479 data.zoomArea = newArea; |
1483 redisplay(data); | 1480 redisplay(data); |
1484 return false; | 1481 return false; |
1485 }; | 1482 }; |
1499 var setBirdZoom = function(data, rect) { | 1496 var setBirdZoom = function(data, rect) { |
1500 var part = data.imgTrafo.invtransform(rect); | 1497 var part = data.imgTrafo.invtransform(rect); |
1501 // area = FULL_AREA.fit(part); // no, we want to see where we transcend the borders | 1498 // area = FULL_AREA.fit(part); // no, we want to see where we transcend the borders |
1502 birdTrafo = getImgTrafo(data.$birdImg, FULL_AREA); | 1499 birdTrafo = getImgTrafo(data.$birdImg, FULL_AREA); |
1503 var birdRect = birdTrafo.transform(part); | 1500 var birdRect = birdTrafo.transform(part); |
1501 var $birdZoom = data.$birdZoom; | |
1504 // acount for border width | 1502 // acount for border width |
1505 birdRect.addPosition({x : -2, y : -2}); | 1503 var bw = getBorderWidth($birdZoom); |
1504 birdRect.addPosition({x : -bw, y : -bw}); | |
1506 birdRect.adjustDiv(data.$birdZoom); | 1505 birdRect.adjustDiv(data.$birdZoom); |
1507 }; | 1506 }; |
1508 | 1507 |
1509 // set zoom background | 1508 // set zoom background |
1510 var setZoomBG = function(data) { | 1509 var setZoomBG = function(data) { |
1643 return 'size'; | 1642 return 'size'; |
1644 } | 1643 } |
1645 // mo=fit is default | 1644 // mo=fit is default |
1646 return 'screen'; | 1645 return 'screen'; |
1647 }; | 1646 }; |
1648 | 1647 |
1649 // set image scale mode (screen, pixel, size) | 1648 // set image scale mode (screen, pixel, size) |
1650 var setScaleMode = function (data, mode) { | 1649 var setScaleMode = function (data, mode) { |
1651 delete data.scalerFlags.fit; | 1650 delete data.scalerFlags.fit; |
1652 delete data.scalerFlags.clip; | 1651 delete data.scalerFlags.clip; |
1653 delete data.scalerFlags.osize; | 1652 delete data.scalerFlags.osize; |
1656 } else if (mode === 'size') { | 1655 } else if (mode === 'size') { |
1657 data.scalerFlags.osize = 'osize'; | 1656 data.scalerFlags.osize = 'osize'; |
1658 } | 1657 } |
1659 // mo=fit is default | 1658 // mo=fit is default |
1660 }; | 1659 }; |
1661 | 1660 |
1662 // sets a key to a value (relative values with +/- if relative=true) | 1661 // sets a key to a value (relative values with +/- if relative=true) |
1663 var setNumValue = function(settings, key, value) { | 1662 var setNumValue = function(settings, key, value) { |
1664 if (value == null) return null; | 1663 if (value == null) return null; |
1665 if (isNumber(value)) { | 1664 if (isNumber(value)) { |
1666 settings[key] = value; | 1665 settings[key] = value; |
1675 settings[key] = parseFloat(settings[key]) + parseFloat(value); | 1674 settings[key] = parseFloat(settings[key]) + parseFloat(value); |
1676 } else { | 1675 } else { |
1677 settings[key] = value; | 1676 settings[key] = value; |
1678 } | 1677 } |
1679 return settings[key]; | 1678 return settings[key]; |
1679 }; | |
1680 | |
1681 // auxiliary function, assuming equal border width on all sides | |
1682 var getBorderWidth = function($elem) { | |
1683 var border = $elem.outerWidth() - $elem.width(); | |
1684 return border/2; | |
1680 }; | 1685 }; |
1681 | 1686 |
1682 // auxiliary function (from old dllib.js) | 1687 // auxiliary function (from old dllib.js) |
1683 var isFullArea = function(area) { | 1688 var isFullArea = function(area) { |
1684 return (area.width === 1.0) && (area.height === 1.0); | 1689 return (area.width === 1.0) && (area.height === 1.0); |