# HG changeset patch
# User robcast
# Date 1296677510 -3600
# Node ID 2b6d3ef57d68e9df6f873640ce2b0a1740c170f2
# Parent ee620bcf4ab04df938e5e5e918a78b55ac9443f0
fixed problem with setmark, zoomarea and zoomDrag handlers.
added mark buttons and removed fwd and back from embedded set.
diff -r ee620bcf4ab0 -r 2b6d3ef57d68 client/digitallibrary/jquery/jquery.digilib.js
--- a/client/digitallibrary/jquery/jquery.digilib.js Wed Feb 02 20:03:36 2011 +0100
+++ b/client/digitallibrary/jquery/jquery.digilib.js Wed Feb 02 21:11:50 2011 +0100
@@ -226,8 +226,8 @@
},
'embedded' : {
'imagePath' : 'img/embedded/16/',
- 'standardSet' : ["reference","zoomin","zoomout","zoomarea","zoomfull","back","fwd","page","bird","help","reset","toggleoptions"],
- 'specialSet' : ["hmir","vmir","rot","brgt","cont","rgb","quality","size","toggleoptions"],
+ 'standardSet' : ["reference","zoomin","zoomout","zoomarea","zoomfull","bird","help","reset","toggleoptions"],
+ 'specialSet' : ["mark","delmark","hmir","vmir","rot","brgt","cont","rgb","quality","toggleoptions"],
'buttonSets' : ['standardSet', 'specialSet']
}
},
@@ -738,18 +738,6 @@
var storeOptions = function (data) {
// save digilib options in cookie
- // TODO: in embedded mode this is not called
- /* store in parameter clop
- * if (data.dlOpts) {
- var clop = '';
- for (var o in data.dlOpts) {
- if (clop) {
- clop += ',';
- }
- clop += o;
- }
- settings.clop = clop;
- } */
var settings = data.settings;
if (data.dlOpts) {
// save digilib settings in options
@@ -782,13 +770,6 @@
var opts = {};
var settings = data.settings;
if (jQuery.cookie) {
- /* read from parameter clop
- * if (settings.clop) {
- var pa = settings.clop.split(",");
- for (var i = 0; i < pa.length ; i++) {
- opts[pa[i]] = pa[i];
- }
- } */
// read from cookie
var ck = "digilib:fn:" + escape(settings.fn) + ":pn:" + settings.pn;
var cp = jQuery.cookie(ck);
@@ -1118,6 +1099,8 @@
$scaler.css({'opacity' : '1', 'background-image' : 'none'});
// display marks
renderMarks(data);
+ // enable drag-to-scroll
+ setupZoomDrag(data);
// TODO: digilib.showArrows(); // show arrow overlays for zoom navigation
};
};
@@ -1140,7 +1123,8 @@
var renderMarks = function (data) {
var $elem = data.$elem;
var marks = data.marks;
- // TODO: clear marks first(?)
+ // clear marks
+ $elem.find('div.mark').remove();
for (var i = 0; i < marks.length; i++) {
var mark = marks[i];
if (data.zoomArea.containsPosition(mark)) {
@@ -1150,7 +1134,7 @@
var html = '
'+(i+1)+'
';
var $mark = $(html);
$elem.append($mark);
- $mark.offset({left : mpos.x, top : mpos.y});
+ mpos.adjustDiv($mark);
}
}
};
@@ -1205,18 +1189,21 @@
// add a mark where clicked
var setMark = function (data) {
var $scaler = data.$scaler;
+ // unbind other handler
+ $scaler.unbind(".dlZoomDrag");
// start event capturing
- $scaler.one('click.digilib', function (evt) {
+ $scaler.one('mousedown.dlSetMark', function (evt) {
// event handler adding a new mark
+ console.log("setmark at=", evt);
var mpos = geom.position(evt);
var pos = data.imgTrafo.invtransform(mpos);
data.marks.push(pos);
redisplay(data);
- return false; // do we even get here?
+ return false;
});
};
- // zoom to area around two clicked points
+ // zoom to the area around two clicked points
var zoomArea = function(data) {
$elem = data.$elem;
$scaler = data.$scaler;
@@ -1274,8 +1261,9 @@
return false;
};
- // clear old handler
+ // clear old handler (also ZoomDrag)
$scaler.unbind('.dlZoomArea');
+ $scaler.unbind(".dlZoomDrag");
$elem.unbind('.dlZoomArea');
// bind start zoom handler
$scaler.one('mousedown.dlZoomArea', zoomStart);
@@ -1347,7 +1335,7 @@
// setup handlers for dragging the zoomed image
var setupZoomDrag = function(data) {
- var startPos, delta, fullRect;
+ var startPos, delta, fullRect, isBgReady;
var $document = $(document);
var $elem = data.$elem;
var $scaler = data.$scaler;
@@ -1355,45 +1343,51 @@
// drag the image and load a new detail on mouse up
var dragStart = function (evt) {
+ console.debug("dragstart at=",evt);
// don't start dragging if not zoomed
if (isFullArea(data.zoomArea)) return false;
startPos = geom.position(evt);
fullRect = null;
delta = null;
- // hide the scaler img, show background of div instead
- $img.css('visibility', 'hidden');
- var scalerCss = {
- 'background-image' : 'url(' + $img.attr('src') + ')',
- 'background-repeat' : 'no-repeat',
- 'background-position' : 'left top',
- 'opacity' : '0.5',
- 'cursor' : 'move'
- };
- if (data.hasBgSize) {
- // full-size background using CSS3-background-size
- fullRect = data.imgTrafo.transform(FULL_AREA);
- if (fullRect.height < data.settings.maxBgSize && fullRect.width < data.settings.maxBgSize) {
- // correct offset because background is relative
- var scalePos = geom.position($scaler);
- fullRect.addPosition(scalePos.neg());
- scalerCss['background-image'] = 'url(' + getBirdImgUrl(data) + ')';
- scalerCss[data.bgSizeName] = fullRect.width + 'px ' + fullRect.height + 'px';
- scalerCss['background-position'] = fullRect.x + 'px '+ fullRect.y + 'px';
- } else {
- // too big
- fullRect = null;
- }
- }
- $scaler.css(scalerCss);
+ isBgReady = false;
$document.bind("mousemove.dlZoomDrag", dragMove);
$document.bind("mouseup.dlZoomDrag", dragEnd);
return false;
};
-
+
+
// mousemove handler: drag zoomed image
var dragMove = function (evt) {
var pos = geom.position(evt);
delta = startPos.delta(pos);
+ if (!isBgReady) {
+ // hide the scaler img, show background of div instead
+ $img.css('visibility', 'hidden');
+ var scalerCss = {
+ 'background-image' : 'url(' + $img.attr('src') + ')',
+ 'background-repeat' : 'no-repeat',
+ 'background-position' : 'left top',
+ 'opacity' : '0.5',
+ 'cursor' : 'move'
+ };
+ if (data.hasBgSize) {
+ // full-size background using CSS3-background-size
+ fullRect = data.imgTrafo.transform(FULL_AREA);
+ if (fullRect.height < data.settings.maxBgSize && fullRect.width < data.settings.maxBgSize) {
+ // correct offset because background is relative
+ var scalePos = geom.position($scaler);
+ fullRect.addPosition(scalePos.neg());
+ scalerCss['background-image'] = 'url(' + getBirdImgUrl(data) + ')';
+ scalerCss[data.bgSizeName] = fullRect.width + 'px ' + fullRect.height + 'px';
+ scalerCss['background-position'] = fullRect.x + 'px '+ fullRect.y + 'px';
+ } else {
+ // too big
+ fullRect = null;
+ }
+ }
+ $scaler.css(scalerCss);
+ isBgReady = true;
+ }
if (fullRect) {
var bgPos = fullRect.getPosition().add(delta);
} else {
@@ -1431,8 +1425,10 @@
// clear old handler
$document.unbind(".dlZoomDrag");
$scaler.unbind(".dlZoomDrag");
- // set handler
- $scaler.bind("mousedown.dlZoomDrag", dragStart);
+ if (! isFullArea(data.zoomArea)) {
+ // set handler
+ $scaler.bind("mousedown.dlZoomDrag", dragStart);
+ }
};
// get image quality as a number (0..2)