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); |
