Mercurial > hg > digilib-old
changeset 769:7e9851ef03d7 jquery
Merge
with 1eef11308195be8e9913c7437c348850815994be
author | robcast |
---|---|
date | Thu, 10 Feb 2011 21:13:54 +0100 |
parents | 15c35c64ac04 (diff) 1eef11308195 (current diff) |
children | 6d7c51e4724b 4b686a0d44f7 |
files | client/digitallibrary/jquery/jquery.digilib.js |
diffstat | 1 files changed, 68 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/client/digitallibrary/jquery/jquery.digilib.js Thu Feb 10 17:03:55 2011 +0100 +++ b/client/digitallibrary/jquery/jquery.digilib.js Thu Feb 10 21:13:54 2011 +0100 @@ -22,7 +22,7 @@ **/ -/* jslint browser: true, debug: true, forin: true +/*jslint browser: true, debug: true, forin: true */ // fallback for console.log calls @@ -230,7 +230,7 @@ 'embedded' : { 'imagePath' : 'img/embedded/16/', 'standardSet' : ["reference","zoomin","zoomout","zoomarea","zoomfull","bird","help","reset","toggleoptions"], - 'specialSet' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","toggleoptions"], + 'specialSet' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","scale","toggleoptions"], 'buttonSets' : ['standardSet', 'specialSet'] } }, @@ -345,7 +345,7 @@ } // get image info from server if needed if (data.scaleMode === 'pixel' || data.scaleMode === 'size') { - getImageInfo(data); // TODO: onload callback + loadImageInfo(data, updateDisplay); // updateDisplay(data) on completion } // create HTML structure for scaler setupScalerDiv(data); @@ -411,6 +411,7 @@ settings.pn = oldpn; return false; } + // TODO: how do we get pt? if (settings.pt) { if (pn > settings.pt) { alert("no such page (page number too high)"); @@ -430,9 +431,16 @@ zoomBy(data, factor); }, - // zoom interactively - zoomArea : function (data) { - zoomArea(data); + // zoom to area (or interactive) + zoomArea : function (data, area) { + var settings = data.settings; + if (area == null) { + // interactively + zoomArea(data); + } else { + data.zoomArea = geom.rectangle(area); + redisplay(data); + } }, // zoom out to full page @@ -597,7 +605,7 @@ // calibrate (only faking) calibrate : function (data) { - getImageInfo(data); + loadImageInfo(data); }, // set image scale mode @@ -694,6 +702,17 @@ if (moreParams == null) { var params = getParamString(birdSettings, settings.birdDivParams, defaults); } else { + // filter scaler flags + if (birdSettings.mo != null) { + var mo = ''; + if (data.scalerFlags.hmir != null) { + mo += 'hmir,'; + } + if (data.scalerFlags.vmir != null) { + mo += 'vmir'; + } + birdSettings.mo = mo; + } var params = getParamString(birdSettings, settings.birdDivParams.concat(moreParams), defaults); } @@ -709,12 +728,13 @@ return settings.digilibBaseUrl + '?' + queryString; }; - // gets image information from digilib server via HTTP and calls complete - var getImageInfo = function (data, complete) { + // loads image information from digilib server via HTTP (and calls complete-fn) + var loadImageInfo = function (data, complete) { var settings = data.settings; var p = settings.scalerBaseUrl.indexOf('/servlet/Scaler'); var url = settings.scalerBaseUrl.substring(0, p) + '/ImgInfo-json.jsp'; url += '?' + getParamString(settings, ['fn', 'pn'], defaults); + // TODO: better error handling jQuery.getJSON(url, function (json) { console.debug("got json data=", json); data.imgInfo = json; @@ -869,8 +889,20 @@ } }; + // update display (overlays etc.) + var updateDisplay = function (data) { + updateImgTrafo(data); + renderMarks(data); + setupZoomDrag(data); + if (data.settings.isBirdDivVisible) { + renderBirdArea(data); + setupBirdDrag(data); + } + // TODO: update event subscriber? + }; + // returns maximum size for scaler img in fullscreen mode - var getFullscreenImgSize = function($elem) { + var getFullscreenImgSize = function ($elem) { var $win = $(window); var winH = $win.height(); var winW = $win.width(); @@ -925,6 +957,7 @@ data.$img = $img; // setup image load handler before setting the src attribute (IE bug) $img.load(scalerImgLoadedHandler(data)); + $img.error(function () {console.error("error loading scaler image");}); $img.attr('src', scalerUrl); }; @@ -1011,6 +1044,7 @@ $birdZoom.css(data.settings.birdIndicatorStyle); var birdUrl = getBirdImgUrl(data); $birdImg.load(birdImgLoadedHandler(data)); + $birdImg.error(function () {console.error("error loading birdview image");}); $birdImg.attr('src', birdUrl); }; @@ -1182,28 +1216,32 @@ return trafo; }; - // returns function for load event of scaler img - var scalerImgLoadedHandler = function (data) { - return function () { - var $img = $(this); - var $scaler = data.$scaler; + // update scaler image transform + var updateImgTrafo = function (data) { + var $img = data.$img; + if ($img != null && $img.get(0).complete) { // create Transform from current zoomArea and image size data.imgTrafo = getImgTrafo($img, data.zoomArea, data.settings.rot, data.scalerFlags.hmir, data.scalerFlags.vmir, data.scaleMode, data.imgInfo); // console.debug("imgTrafo=", data.imgTrafo); + } + }; + + // returns function for load event of scaler img + var scalerImgLoadedHandler = function (data) { + return function () { + var $img = $(this); + console.debug("scaler img loaded=",$img); + var $scaler = data.$scaler; var imgRect = geom.rectangle($img); - // console.debug("imgrect=", imgRect); // adjust scaler div size imgRect.adjustDiv($scaler); // show image in case it was hidden (for example in zoomDrag) $img.css('visibility', 'visible'); $scaler.css({'opacity' : '1', 'background-image' : 'none'}); - // display marks - renderMarks(data); - // enable drag-to-scroll - setupZoomDrag(data); - // TODO: digilib.showArrows(); // show arrow overlays for zoom navigation + // update display (render marks, etc.) + updateDisplay(data); }; }; @@ -1217,15 +1255,15 @@ // malheureusement IE7 calls load handler when there is no size info yet setTimeout(function () { $birdImg.triggerHandler('load'); }, 200); } - // display red indicator around zoomarea - renderBirdArea(data); - // enable click and drag - setupBirdDrag(data); + // update display (zoom area indicator) + updateDisplay(data); }; }; // place marks on the image var renderMarks = function (data) { + if (data.$img == null || data.imgTrafo == null) return; + console.debug("rendermarks img=",data.$img," imgtrafo=",data.imgTrafo); var $elem = data.$elem; var marks = data.marks; // clear marks @@ -1246,6 +1284,7 @@ // show zoom area indicator on bird's eye view var renderBirdArea = function (data) { + if (data.$birdImg == null) return; var $birdZoom = data.$birdZoom; var zoomArea = data.zoomArea; var normalSize = isFullArea(zoomArea); @@ -1472,6 +1511,8 @@ var $scaler = data.$scaler; var $img = data.$img; var fullRect = null; + // hide marks + data.$elem.find('div.mark').hide(); // hide the scaler img, show background of div instead $img.css('visibility', 'hidden'); var scalerCss = { @@ -1553,6 +1594,8 @@ // no movement $img.css('visibility', 'visible'); $scaler.css({'opacity' : '1', 'background-image' : 'none'}); + // unhide marks + data.$elem.find('div.mark').show(); return false; } // get old zoom area (screen coordinates)