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