Mercurial > hg > digilib-old
comparison client/digitallibrary/jquery/jquery.digilib.js @ 742:2b6d3ef57d68 jquery
fixed problem with setmark, zoomarea and zoomDrag handlers.
added mark buttons and removed fwd and back from embedded set.
author | robcast |
---|---|
date | Wed, 02 Feb 2011 21:11:50 +0100 |
parents | ee620bcf4ab0 |
children | 05665cc70a5f |
comparison
equal
deleted
inserted
replaced
741:ee620bcf4ab0 | 742:2b6d3ef57d68 |
---|---|
224 'specialSet' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","size","calibrationx","scale","toggleoptions"], | 224 'specialSet' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","size","calibrationx","scale","toggleoptions"], |
225 'buttonSets' : ['standardSet', 'specialSet'] | 225 'buttonSets' : ['standardSet', 'specialSet'] |
226 }, | 226 }, |
227 'embedded' : { | 227 'embedded' : { |
228 'imagePath' : 'img/embedded/16/', | 228 'imagePath' : 'img/embedded/16/', |
229 'standardSet' : ["reference","zoomin","zoomout","zoomarea","zoomfull","back","fwd","page","bird","help","reset","toggleoptions"], | 229 'standardSet' : ["reference","zoomin","zoomout","zoomarea","zoomfull","bird","help","reset","toggleoptions"], |
230 'specialSet' : ["hmir","vmir","rot","brgt","cont","rgb","quality","size","toggleoptions"], | 230 'specialSet' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","toggleoptions"], |
231 'buttonSets' : ['standardSet', 'specialSet'] | 231 'buttonSets' : ['standardSet', 'specialSet'] |
232 } | 232 } |
233 }, | 233 }, |
234 // number of visible button groups | 234 // number of visible button groups |
235 'visibleButtonSets' : 1, | 235 'visibleButtonSets' : 1, |
736 storeOptions(data); | 736 storeOptions(data); |
737 }; | 737 }; |
738 | 738 |
739 var storeOptions = function (data) { | 739 var storeOptions = function (data) { |
740 // save digilib options in cookie | 740 // save digilib options in cookie |
741 // TODO: in embedded mode this is not called | |
742 /* store in parameter clop | |
743 * if (data.dlOpts) { | |
744 var clop = ''; | |
745 for (var o in data.dlOpts) { | |
746 if (clop) { | |
747 clop += ','; | |
748 } | |
749 clop += o; | |
750 } | |
751 settings.clop = clop; | |
752 } */ | |
753 var settings = data.settings; | 741 var settings = data.settings; |
754 if (data.dlOpts) { | 742 if (data.dlOpts) { |
755 // save digilib settings in options | 743 // save digilib settings in options |
756 data.dlOpts.birdview = settings.isBirdDivVisible ? 1 : 0; | 744 data.dlOpts.birdview = settings.isBirdDivVisible ? 1 : 0; |
757 data.dlOpts.buttons = settings.visibleButtonSets; | 745 data.dlOpts.buttons = settings.visibleButtonSets; |
780 var retrieveOptions = function (data) { | 768 var retrieveOptions = function (data) { |
781 // clop (digilib options) | 769 // clop (digilib options) |
782 var opts = {}; | 770 var opts = {}; |
783 var settings = data.settings; | 771 var settings = data.settings; |
784 if (jQuery.cookie) { | 772 if (jQuery.cookie) { |
785 /* read from parameter clop | |
786 * if (settings.clop) { | |
787 var pa = settings.clop.split(","); | |
788 for (var i = 0; i < pa.length ; i++) { | |
789 opts[pa[i]] = pa[i]; | |
790 } | |
791 } */ | |
792 // read from cookie | 773 // read from cookie |
793 var ck = "digilib:fn:" + escape(settings.fn) + ":pn:" + settings.pn; | 774 var ck = "digilib:fn:" + escape(settings.fn) + ":pn:" + settings.pn; |
794 var cp = jQuery.cookie(ck); | 775 var cp = jQuery.cookie(ck); |
795 console.debug("get cookie=", ck, " value=", cp); | 776 console.debug("get cookie=", ck, " value=", cp); |
796 // in query string format | 777 // in query string format |
1116 // show image in case it was hidden (for example in zoomDrag) | 1097 // show image in case it was hidden (for example in zoomDrag) |
1117 $img.css('visibility', 'visible'); | 1098 $img.css('visibility', 'visible'); |
1118 $scaler.css({'opacity' : '1', 'background-image' : 'none'}); | 1099 $scaler.css({'opacity' : '1', 'background-image' : 'none'}); |
1119 // display marks | 1100 // display marks |
1120 renderMarks(data); | 1101 renderMarks(data); |
1102 // enable drag-to-scroll | |
1103 setupZoomDrag(data); | |
1121 // TODO: digilib.showArrows(); // show arrow overlays for zoom navigation | 1104 // TODO: digilib.showArrows(); // show arrow overlays for zoom navigation |
1122 }; | 1105 }; |
1123 }; | 1106 }; |
1124 | 1107 |
1125 // returns function for load event of bird's eye view img | 1108 // returns function for load event of bird's eye view img |
1138 | 1121 |
1139 // place marks on the image | 1122 // place marks on the image |
1140 var renderMarks = function (data) { | 1123 var renderMarks = function (data) { |
1141 var $elem = data.$elem; | 1124 var $elem = data.$elem; |
1142 var marks = data.marks; | 1125 var marks = data.marks; |
1143 // TODO: clear marks first(?) | 1126 // clear marks |
1127 $elem.find('div.mark').remove(); | |
1144 for (var i = 0; i < marks.length; i++) { | 1128 for (var i = 0; i < marks.length; i++) { |
1145 var mark = marks[i]; | 1129 var mark = marks[i]; |
1146 if (data.zoomArea.containsPosition(mark)) { | 1130 if (data.zoomArea.containsPosition(mark)) { |
1147 var mpos = data.imgTrafo.transform(mark); | 1131 var mpos = data.imgTrafo.transform(mark); |
1148 console.debug("renderMarks: mpos=",mpos); | 1132 console.debug("renderMarks: mpos=",mpos); |
1149 // create mark | 1133 // create mark |
1150 var html = '<div class="mark">'+(i+1)+'</div>'; | 1134 var html = '<div class="mark">'+(i+1)+'</div>'; |
1151 var $mark = $(html); | 1135 var $mark = $(html); |
1152 $elem.append($mark); | 1136 $elem.append($mark); |
1153 $mark.offset({left : mpos.x, top : mpos.y}); | 1137 mpos.adjustDiv($mark); |
1154 } | 1138 } |
1155 } | 1139 } |
1156 }; | 1140 }; |
1157 | 1141 |
1158 // show zoom area indicator on bird's eye view | 1142 // show zoom area indicator on bird's eye view |
1203 }; | 1187 }; |
1204 | 1188 |
1205 // add a mark where clicked | 1189 // add a mark where clicked |
1206 var setMark = function (data) { | 1190 var setMark = function (data) { |
1207 var $scaler = data.$scaler; | 1191 var $scaler = data.$scaler; |
1192 // unbind other handler | |
1193 $scaler.unbind(".dlZoomDrag"); | |
1208 // start event capturing | 1194 // start event capturing |
1209 $scaler.one('click.digilib', function (evt) { | 1195 $scaler.one('mousedown.dlSetMark', function (evt) { |
1210 // event handler adding a new mark | 1196 // event handler adding a new mark |
1197 console.log("setmark at=", evt); | |
1211 var mpos = geom.position(evt); | 1198 var mpos = geom.position(evt); |
1212 var pos = data.imgTrafo.invtransform(mpos); | 1199 var pos = data.imgTrafo.invtransform(mpos); |
1213 data.marks.push(pos); | 1200 data.marks.push(pos); |
1214 redisplay(data); | 1201 redisplay(data); |
1215 return false; // do we even get here? | 1202 return false; |
1216 }); | 1203 }); |
1217 }; | 1204 }; |
1218 | 1205 |
1219 // zoom to area around two clicked points | 1206 // zoom to the area around two clicked points |
1220 var zoomArea = function(data) { | 1207 var zoomArea = function(data) { |
1221 $elem = data.$elem; | 1208 $elem = data.$elem; |
1222 $scaler = data.$scaler; | 1209 $scaler = data.$scaler; |
1223 var pt1, pt2; | 1210 var pt1, pt2; |
1224 var $zoomDiv = $('<div class="zoomrect" style="display:none"/>'); | 1211 var $zoomDiv = $('<div class="zoomrect" style="display:none"/>'); |
1272 delete data.dlOpts.fitheight; | 1259 delete data.dlOpts.fitheight; |
1273 redisplay(data); | 1260 redisplay(data); |
1274 return false; | 1261 return false; |
1275 }; | 1262 }; |
1276 | 1263 |
1277 // clear old handler | 1264 // clear old handler (also ZoomDrag) |
1278 $scaler.unbind('.dlZoomArea'); | 1265 $scaler.unbind('.dlZoomArea'); |
1266 $scaler.unbind(".dlZoomDrag"); | |
1279 $elem.unbind('.dlZoomArea'); | 1267 $elem.unbind('.dlZoomArea'); |
1280 // bind start zoom handler | 1268 // bind start zoom handler |
1281 $scaler.one('mousedown.dlZoomArea', zoomStart); | 1269 $scaler.one('mousedown.dlZoomArea', zoomStart); |
1282 }; | 1270 }; |
1283 | 1271 |
1345 } | 1333 } |
1346 }; | 1334 }; |
1347 | 1335 |
1348 // setup handlers for dragging the zoomed image | 1336 // setup handlers for dragging the zoomed image |
1349 var setupZoomDrag = function(data) { | 1337 var setupZoomDrag = function(data) { |
1350 var startPos, delta, fullRect; | 1338 var startPos, delta, fullRect, isBgReady; |
1351 var $document = $(document); | 1339 var $document = $(document); |
1352 var $elem = data.$elem; | 1340 var $elem = data.$elem; |
1353 var $scaler = data.$scaler; | 1341 var $scaler = data.$scaler; |
1354 var $img = data.$img; | 1342 var $img = data.$img; |
1355 | 1343 |
1356 // drag the image and load a new detail on mouse up | 1344 // drag the image and load a new detail on mouse up |
1357 var dragStart = function (evt) { | 1345 var dragStart = function (evt) { |
1346 console.debug("dragstart at=",evt); | |
1358 // don't start dragging if not zoomed | 1347 // don't start dragging if not zoomed |
1359 if (isFullArea(data.zoomArea)) return false; | 1348 if (isFullArea(data.zoomArea)) return false; |
1360 startPos = geom.position(evt); | 1349 startPos = geom.position(evt); |
1361 fullRect = null; | 1350 fullRect = null; |
1362 delta = null; | 1351 delta = null; |
1363 // hide the scaler img, show background of div instead | 1352 isBgReady = false; |
1364 $img.css('visibility', 'hidden'); | |
1365 var scalerCss = { | |
1366 'background-image' : 'url(' + $img.attr('src') + ')', | |
1367 'background-repeat' : 'no-repeat', | |
1368 'background-position' : 'left top', | |
1369 'opacity' : '0.5', | |
1370 'cursor' : 'move' | |
1371 }; | |
1372 if (data.hasBgSize) { | |
1373 // full-size background using CSS3-background-size | |
1374 fullRect = data.imgTrafo.transform(FULL_AREA); | |
1375 if (fullRect.height < data.settings.maxBgSize && fullRect.width < data.settings.maxBgSize) { | |
1376 // correct offset because background is relative | |
1377 var scalePos = geom.position($scaler); | |
1378 fullRect.addPosition(scalePos.neg()); | |
1379 scalerCss['background-image'] = 'url(' + getBirdImgUrl(data) + ')'; | |
1380 scalerCss[data.bgSizeName] = fullRect.width + 'px ' + fullRect.height + 'px'; | |
1381 scalerCss['background-position'] = fullRect.x + 'px '+ fullRect.y + 'px'; | |
1382 } else { | |
1383 // too big | |
1384 fullRect = null; | |
1385 } | |
1386 } | |
1387 $scaler.css(scalerCss); | |
1388 $document.bind("mousemove.dlZoomDrag", dragMove); | 1353 $document.bind("mousemove.dlZoomDrag", dragMove); |
1389 $document.bind("mouseup.dlZoomDrag", dragEnd); | 1354 $document.bind("mouseup.dlZoomDrag", dragEnd); |
1390 return false; | 1355 return false; |
1391 }; | 1356 }; |
1392 | 1357 |
1358 | |
1393 // mousemove handler: drag zoomed image | 1359 // mousemove handler: drag zoomed image |
1394 var dragMove = function (evt) { | 1360 var dragMove = function (evt) { |
1395 var pos = geom.position(evt); | 1361 var pos = geom.position(evt); |
1396 delta = startPos.delta(pos); | 1362 delta = startPos.delta(pos); |
1363 if (!isBgReady) { | |
1364 // hide the scaler img, show background of div instead | |
1365 $img.css('visibility', 'hidden'); | |
1366 var scalerCss = { | |
1367 'background-image' : 'url(' + $img.attr('src') + ')', | |
1368 'background-repeat' : 'no-repeat', | |
1369 'background-position' : 'left top', | |
1370 'opacity' : '0.5', | |
1371 'cursor' : 'move' | |
1372 }; | |
1373 if (data.hasBgSize) { | |
1374 // full-size background using CSS3-background-size | |
1375 fullRect = data.imgTrafo.transform(FULL_AREA); | |
1376 if (fullRect.height < data.settings.maxBgSize && fullRect.width < data.settings.maxBgSize) { | |
1377 // correct offset because background is relative | |
1378 var scalePos = geom.position($scaler); | |
1379 fullRect.addPosition(scalePos.neg()); | |
1380 scalerCss['background-image'] = 'url(' + getBirdImgUrl(data) + ')'; | |
1381 scalerCss[data.bgSizeName] = fullRect.width + 'px ' + fullRect.height + 'px'; | |
1382 scalerCss['background-position'] = fullRect.x + 'px '+ fullRect.y + 'px'; | |
1383 } else { | |
1384 // too big | |
1385 fullRect = null; | |
1386 } | |
1387 } | |
1388 $scaler.css(scalerCss); | |
1389 isBgReady = true; | |
1390 } | |
1397 if (fullRect) { | 1391 if (fullRect) { |
1398 var bgPos = fullRect.getPosition().add(delta); | 1392 var bgPos = fullRect.getPosition().add(delta); |
1399 } else { | 1393 } else { |
1400 var bgPos = delta; | 1394 var bgPos = delta; |
1401 } | 1395 } |
1429 }; | 1423 }; |
1430 | 1424 |
1431 // clear old handler | 1425 // clear old handler |
1432 $document.unbind(".dlZoomDrag"); | 1426 $document.unbind(".dlZoomDrag"); |
1433 $scaler.unbind(".dlZoomDrag"); | 1427 $scaler.unbind(".dlZoomDrag"); |
1434 // set handler | 1428 if (! isFullArea(data.zoomArea)) { |
1435 $scaler.bind("mousedown.dlZoomDrag", dragStart); | 1429 // set handler |
1430 $scaler.bind("mousedown.dlZoomDrag", dragStart); | |
1431 } | |
1436 }; | 1432 }; |
1437 | 1433 |
1438 // get image quality as a number (0..2) | 1434 // get image quality as a number (0..2) |
1439 var getQuality = function (data) { | 1435 var getQuality = function (data) { |
1440 var flags = data.scalerFlags; | 1436 var flags = data.scalerFlags; |