Mercurial > hg > digilib-old
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 |