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 |
