# HG changeset patch # User robcast # Date 1295564408 -3600 # Node ID b3c05e1568cfc4d69673513cf2a948f8fc953991 # Parent b21c1a539af3524cfdbcdb8b0f89587106a8afeb zoomarea works now added rectangle and position constructors that take jQuery and event objects fixed bug in rectangle.contains diff -r b21c1a539af3 -r b3c05e1568cf client/digitallibrary/jquery/dlGeometry.js --- a/client/digitallibrary/jquery/dlGeometry.js Thu Jan 20 20:21:11 2011 +0100 +++ b/client/digitallibrary/jquery/dlGeometry.js Fri Jan 21 00:00:08 2011 +0100 @@ -24,10 +24,27 @@ * Position class */ var position = function (x, y) { - var that = { - x : parseFloat(x), - y : parseFloat(y) - }; + if (typeof x === "object") { + if (x instanceof jQuery) { + // jQuery object + var pos = x.offset(); + var that = { + x : pos.left, + y : pos.top + }; + } else { + // event object(?) + var that = { + x : x.pageX, + y : x.pageY + }; + } + } else { + var that = { + x : parseFloat(x), + y : parseFloat(y) + }; + } that.equals = function(other) { return (this.x === other.x && this.y === other.y); }; @@ -42,13 +59,24 @@ var rectangle = function (x, y, w, h) { var that = {}; if (typeof x === "object") { - // assume x and y are Position - that = { - x : x.x, - y : x.y, - width : y.x - x.x, - height : y.y - x.y - }; + if (x instanceof jQuery) { + // jQuery object + var pos = x.offset(); + that = { + x : pos.left, + y : pos.top, + width : x.width(), + height : x.height() + }; + } else { + // assume x and y are Position + that = { + x : x.x, + y : x.y, + width : y.x - x.x, + height : y.y - x.y + }; + } } else { that = { x : parseFloat(x), @@ -119,7 +147,7 @@ that.containsPosition = function(pos) { // returns if Position "pos" lies inside of this rectangle var ct = ((pos.x >= this.x) && (pos.y >= this.y) && - (pos.x <= this.x + this.width) && (pos.y <= this.y + this.width)); + (pos.x <= this.x + this.width) && (pos.y <= this.y + this.height)); return ct; }; that.containsRect = function(rect) { diff -r b21c1a539af3 -r b3c05e1568cf client/digitallibrary/jquery/jquery-test-full.html --- a/client/digitallibrary/jquery/jquery-test-full.html Thu Jan 20 20:21:11 2011 +0100 +++ b/client/digitallibrary/jquery/jquery-test-full.html Fri Jan 21 00:00:08 2011 +0100 @@ -26,6 +26,27 @@ background-image: url('../greyskin/corona.png'); } + div.digilib div.mark { + position: absolute; + color: white; + background: url('../greyskin/mark-bg-16.png'); + font-family: Verdana, Arial, Helvetica, sans-serif; + font-weight: bold; + font-size:11px; + height: 15px; + width: 16px; + padding-top: 1px; + text-align: center; + z-index: 10; + } + + div.digilib div.zoomrect { + position: absolute; + /* border: 2px solid #ffa060; */ + border: 2px solid #ff0000; + z-index: 200; + } + div.birdview { border: 1px solid white; position: fixed; @@ -60,13 +81,14 @@ diff -r b21c1a539af3 -r b3c05e1568cf client/digitallibrary/jquery/jquery.digilib.js --- a/client/digitallibrary/jquery/jquery.digilib.js Thu Jan 20 20:21:11 2011 +0100 +++ b/client/digitallibrary/jquery/jquery.digilib.js Fri Jan 21 00:00:08 2011 +0100 @@ -30,7 +30,7 @@ img : "zoom-out.png" }, zoomarea : { - onclick : "javascript:zoomArea()", + onclick : "zoomArea", tooltip : "zoom area", img : "zoom-area.png" }, @@ -205,7 +205,7 @@ var MAX_ZOOMAREA = geom.rectangle(0, 0, 1, 1); var actions = { - // digilib initialization + // init: digilib initialization init : function(options) { // settings for this digilib instance are merged from defaults and options var settings = $.extend({}, defaults, options); @@ -261,12 +261,11 @@ }); }, - // clean up digilib + // destroy: clean up digilib destroy : function(data) { return this.each(function(){ var $elem = $(this); - // Namespacing FTW - $(window).unbind('.digilib'); // unbinds all digilibs(?) + $(window).unbind('.digilib'); // unbind all digilibs(?) data.digilib.remove(); $elem.removeData('digilib'); }); @@ -316,6 +315,11 @@ zoomBy(data, factor); }, + // zoom interactively + zoomArea : function (data) { + zoomArea(data); + }, + // zoom out to full page zoomFull : function (data, mode) { data.zoomArea = MAX_ZOOMAREA; @@ -708,8 +712,7 @@ console.debug("img loaded! this=", this, " data=", data); var area = data.zoomArea; // create Transform from current area and picsize - var picpos = $img.offset(); - var picrect = geom.rectangle(picpos.left, picpos.top, $img.width(), $img.height()); + var picrect = geom.rectangle($img); var trafo = geom.transform(); // subtract area offset and size trafo.concat(trafo.getTranslation(geom.position(- area.x, - area.y))); @@ -740,7 +743,7 @@ var html = '
'+(i+1)+'
'; var $mark = $(html); $elem.append($mark); - $mark.offset({ left : mpos.x, top : mpos.y}); + $mark.offset({left : mpos.x, top : mpos.y}); } } }; @@ -775,6 +778,77 @@ return false; // do we even get here? }); }; + + var zoomArea = function(data) { + $elem = data.$elem; + $scaler = data.$scaler; + var pt1, pt2; + var $zoomDiv = $('