comparison client/digitallibrary/jquery/jquery.digilib.js @ 738:b4460f0a540d jquery

small improvements
author robcast
date Wed, 02 Feb 2011 14:17:52 +0100
parents 7c93bdbb5153
children 922c74a7b935
comparison
equal deleted inserted replaced
737:7c93bdbb5153 738:b4460f0a540d
857 $img.addClass('pic'); 857 $img.addClass('pic');
858 data.$scaler = $scaler; 858 data.$scaler = $scaler;
859 data.$img = $img; 859 data.$img = $img;
860 // setup image load handler before setting the src attribute (IE bug) 860 // setup image load handler before setting the src attribute (IE bug)
861 $img.load(scalerImgLoadedHandler(data)); 861 $img.load(scalerImgLoadedHandler(data));
862 $scaler.css('cursor', 'wait');
862 $img.attr('src', scalerUrl); 863 $img.attr('src', scalerUrl);
863 }; 864 };
864 865
865 // creates HTML structure for buttons in elem 866 // creates HTML structure for buttons in elem
866 var createButtons = function (data, buttonSetIdx) { 867 var createButtons = function (data, buttonSetIdx) {
1092 1093
1093 // returns function for load event of scaler img 1094 // returns function for load event of scaler img
1094 var scalerImgLoadedHandler = function (data) { 1095 var scalerImgLoadedHandler = function (data) {
1095 return function () { 1096 return function () {
1096 var $img = $(this); 1097 var $img = $(this);
1098 var $scaler = data.$scaler;
1097 console.debug("img loaded! this=", this, " data=", data); 1099 console.debug("img loaded! this=", this, " data=", data);
1098 // create Transform from current area and picsize 1100 // create Transform from current area and picsize
1099 data.imgTrafo = getImgTrafo($img, data.zoomArea, 1101 data.imgTrafo = getImgTrafo($img, data.zoomArea,
1100 data.settings.rot, data.scalerFlags.hmir, data.scalerFlags.vmir); 1102 data.settings.rot, data.scalerFlags.hmir, data.scalerFlags.vmir);
1101 console.debug("imgTrafo=", data.imgTrafo); 1103 console.debug("imgTrafo=", data.imgTrafo);
1102 // adjust scaler div size 1104 // adjust scaler div size
1103 var imgRect = geom.rectangle(data.$img); 1105 var imgRect = geom.rectangle($img);
1104 console.debug("imgrect=", imgRect); 1106 console.debug("imgrect=", imgRect);
1105 imgRect.adjustDiv(data.$scaler); 1107 imgRect.adjustDiv($scaler);
1106 // show image in case it was hidden (for example in zoomDrag) 1108 // show image in case it was hidden (for example in zoomDrag)
1107 $img.css('visibility', 'visible'); 1109 $img.css('visibility', 'visible');
1110 $scaler.css('cursor', 'auto');
1108 // display marks 1111 // display marks
1109 renderMarks(data); 1112 renderMarks(data);
1110 // TODO: digilib.showArrows(); // show arrow overlays for zoom navigation 1113 // TODO: digilib.showArrows(); // show arrow overlays for zoom navigation
1111 }; 1114 };
1112 }; 1115 };
1155 } else { 1158 } else {
1156 $birdZoom.show(); 1159 $birdZoom.show();
1157 } 1160 }
1158 // position may have changed 1161 // position may have changed
1159 data.birdTrafo = getImgTrafo(data.$birdImg, FULL_AREA); 1162 data.birdTrafo = getImgTrafo(data.$birdImg, FULL_AREA);
1160 var indRect = data.birdTrafo.transform(zoomArea); 1163 var zoomRect = data.birdTrafo.transform(zoomArea);
1161 var coords = { 1164 // TODO: acount for frame width
1162 left : indRect.x-2, // acount for frame width
1163 top : indRect.y-2,
1164 width : indRect.width,
1165 height: indRect.height
1166 };
1167 if (data.settings.interactionMode === 'fullscreen') { 1165 if (data.settings.interactionMode === 'fullscreen') {
1168 // no animation for fullscreen 1166 // no animation for fullscreen
1169 $birdZoom.width(coords.width); 1167 zoomRect.adjustDiv($birdZoom);
1170 $birdZoom.height(coords.height);
1171 $birdZoom.offset(coords);
1172 } else { 1168 } else {
1173 // nice animation for embedded mode :-) 1169 // nice animation for embedded mode :-)
1170 // correct offsetParent because animate is relative
1174 var ppos = $birdZoom.offsetParent().offset(); 1171 var ppos = $birdZoom.offsetParent().offset();
1175 // correct offsetParent because animate is relative 1172 var dest = {
1176 coords.left = (coords.left - ppos.left) + 'px' ; 1173 left : (zoomRect.x - ppos.left) + 'px',
1177 coords.top = (coords.top - ppos.top) + 'px'; 1174 top : (zoomRect.y - ppos.top) + 'px',
1178 $birdZoom.animate(coords); 1175 width : zoomRect.width,
1176 height : zoomRect.height};
1177 $birdZoom.animate(dest);
1179 } 1178 }
1180 }; 1179 };
1181 1180
1182 // zooms by the given factor 1181 // zooms by the given factor
1183 var zoomBy = function(data, factor) { 1182 var zoomBy = function(data, factor) {
1206 redisplay(data); 1205 redisplay(data);
1207 return false; // do we even get here? 1206 return false; // do we even get here?
1208 }); 1207 });
1209 }; 1208 };
1210 1209
1210 // zoom to area around two clicked points
1211 var zoomArea = function(data) { 1211 var zoomArea = function(data) {
1212 $elem = data.$elem; 1212 $elem = data.$elem;
1213 $scaler = data.$scaler; 1213 $scaler = data.$scaler;
1214 var pt1, pt2; 1214 var pt1, pt2;
1215 var $zoomDiv = $('<div class="zoomrect" style="display:none"/>'); 1215 var $zoomDiv = $('<div class="zoomrect" style="display:none"/>');
1221 // rect.y -= 2; 1221 // rect.y -= 2;
1222 1222
1223 var zoomStart = function (evt) { 1223 var zoomStart = function (evt) {
1224 pt1 = geom.position(evt); 1224 pt1 = geom.position(evt);
1225 // setup and show zoom div 1225 // setup and show zoom div
1226 //moveElement(zoomdiv, Rectangle(pt1.x, pt1.y, 0, 0)); 1226 pt1.adjustDiv($zoomDiv);
1227 $zoomDiv.offset({left : pt1.x, top : pt1.y});
1228 $zoomDiv.width(0).height(0); 1227 $zoomDiv.width(0).height(0);
1229 $zoomDiv.show(); 1228 $zoomDiv.show();
1230 // register events 1229 // register events
1231 $elem.bind("mousemove.digilib", zoomMove); 1230 $elem.bind("mousemove.dlZoomArea", zoomMove);
1232 $elem.bind("mouseup.digilib", zoomEnd); 1231 $elem.bind("mouseup.dlZoomArea", zoomEnd);
1233 return false; 1232 return false;
1234 }; 1233 };
1235 1234
1236 // mouseup handler: end moving 1235 // mouseup handler: end moving
1237 var zoomEnd = function (evt) { 1236 var zoomEnd = function (evt) {
1240 var clickRect = geom.rectangle(pt1, pt2); 1239 var clickRect = geom.rectangle(pt1, pt2);
1241 if (clickRect.getArea() <= 5) return false; 1240 if (clickRect.getArea() <= 5) return false;
1242 // hide zoom div 1241 // hide zoom div
1243 $zoomDiv.remove(); 1242 $zoomDiv.remove();
1244 // unregister events 1243 // unregister events
1245 $elem.unbind("mousemove.digilib", zoomMove); 1244 $elem.unbind("mousemove.dlZoomArea", zoomMove);
1246 $elem.unbind("mouseup.digilib", zoomEnd); 1245 $elem.unbind("mouseup.dlZoomArea", zoomEnd);
1247 // clip and transform 1246 // clip and transform
1248 clickRect.clipTo(picRect); 1247 clickRect.clipTo(picRect);
1249 var area = data.imgTrafo.invtransform(clickRect); 1248 var area = data.imgTrafo.invtransform(clickRect);
1250 data.zoomArea = area; 1249 data.zoomArea = area;
1251 // zoomed is always fit 1250 // zoomed is always fit
1252 data.settings.ws = 1; 1251 data.settings.ws = 1;
1252 delete data.dlOpts.fitwidth;
1253 delete data.dlOpts.fitheight;
1253 redisplay(data); 1254 redisplay(data);
1254 return false; 1255 return false;
1255 }; 1256 };
1256 1257
1257 // mouse move handler 1258 // mouse move handler
1261 rect.clipTo(picRect); 1262 rect.clipTo(picRect);
1262 // update zoom div 1263 // update zoom div
1263 rect.adjustDiv($zoomDiv); 1264 rect.adjustDiv($zoomDiv);
1264 return false; 1265 return false;
1265 }; 1266 };
1266 1267
1268 // clear old handler
1269 $scaler.unbind('.dlZoomArea');
1270 $elem.unbind('.dlZoomArea');
1267 // bind start zoom handler 1271 // bind start zoom handler
1268 $scaler.one('mousedown.digilib', zoomStart); 1272 $scaler.one('mousedown.dlZoomArea', zoomStart);
1269 }; 1273 };
1270 1274
1271 // bird's eye view zoom area click and drag handler 1275 // bird's eye view zoom area click and drag handler
1272 var setupBirdDrag = function(data) { 1276 var setupBirdDrag = function(data) {
1273 var $birdImg = data.$birdImg; 1277 var $birdImg = data.$birdImg;
1329 $birdImg.bind("mousedown.dlBirdMove", birdZoomStartDrag); 1333 $birdImg.bind("mousedown.dlBirdMove", birdZoomStartDrag);
1330 $birdZoom.bind("mousedown.dlBirdMove", birdZoomStartDrag); 1334 $birdZoom.bind("mousedown.dlBirdMove", birdZoomStartDrag);
1331 } 1335 }
1332 }; 1336 };
1333 1337
1338 // setup handlers for dragging the zoomed image
1334 var setupZoomDrag = function(data) { 1339 var setupZoomDrag = function(data) {
1335 // setup handlers for dragging the zoomed image
1336 var startPos, delta; 1340 var startPos, delta;
1337 var $document = $(document); 1341 var $document = $(document);
1338 var $elem = data.$elem; 1342 var $elem = data.$elem;
1339 var $scaler = data.$scaler; 1343 var $scaler = data.$scaler;
1340 var $img = data.$img; 1344 var $img = data.$img;
1370 }; 1374 };
1371 1375
1372 // mouseup handler: reload zoomed image in new position 1376 // mouseup handler: reload zoomed image in new position
1373 var dragEnd = function (evt) { 1377 var dragEnd = function (evt) {
1374 $scaler.css({ 1378 $scaler.css({
1375 'cursor' : 'default' 1379 'cursor' : 'auto'
1376 }); 1380 });
1377 $document.unbind("mousemove.dlZoomDrag", dragMove); 1381 $document.unbind("mousemove.dlZoomDrag", dragMove);
1378 $document.unbind("mouseup.dlZoomDrag", dragEnd); 1382 $document.unbind("mouseup.dlZoomDrag", dragEnd);
1379 if (delta == null || delta.distance() < 2) { 1383 if (delta == null || delta.distance() < 2) {
1380 // no movement 1384 // no movement