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;