Mercurial > hg > digilib-old
diff webapp/src/main/webapp/jquery/jquery.digilib.regions.js @ 1107:365f95a14057
factor out defineArea, using overlay div
author | hertzhaft |
---|---|
date | Sat, 27 Oct 2012 00:06:29 +0200 |
parents | 415da4e4b76b |
children | ae796bcac7f4 |
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/jquery.digilib.regions.js Fri Oct 26 17:56:27 2012 +0200 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.regions.js Sat Oct 27 00:06:29 2012 +0200 @@ -96,8 +96,6 @@ }; var defaults = { - // are regions being edited? - 'editRegions' : false, // are regions shown? 'isRegionVisible' : true, // are region numbers shown? @@ -144,67 +142,18 @@ alert("Please turn on regions visibility!"); return; } - var $elem = data.$elem; - var $body = $('body'); - var bodyRect = geom.rectangle($body); - var $scaler = data.$scaler; - var scalerRect = geom.rectangle($scaler); - var pt1, pt2; - // overlay prevents other elements from reacting to mouse events - var $overlay = $('<div class="'+CSS+'overlay" style="position:absolute"/>'); - $body.append($overlay); - bodyRect.adjustDiv($overlay); - var attr = {'class' : CSS+"regionURL"}; - var $regionDiv = newRegionDiv(data, attr); - - // mousedown handler: start sizing - var regionStart = function (evt) { - pt1 = geom.position(evt); - // setup and show zoom div - pt1.adjustDiv($regionDiv); - $regionDiv.width(0).height(0); - $regionDiv.show(); - // register mouse events - $overlay.on("mousemove.dlRegion", regionMove); - $overlay.on("mouseup.dlRegion", regionEnd); - return false; - }; - - // mousemove handler: size region - var regionMove = function (evt) { - pt2 = geom.position(evt); - var rect = geom.rectangle(pt1, pt2); - rect.clipTo(scalerRect); - // update region - rect.adjustDiv($regionDiv); - return false; - }; - - // mouseup handler: end sizing - var regionEnd = function (evt) { - pt2 = geom.position(evt); - // assume a click and continue if the area is too small - var clickRect = geom.rectangle(pt1, pt2); - if (clickRect.getArea() <= 5) return false; - // unregister mouse events and get rid of overlay - $overlay.off("mousemove.dlRegion", regionMove); - $overlay.off("mouseup.dlRegion", regionEnd); - $overlay.remove(); - // clip region - clickRect.clipTo(scalerRect); - clickRect.adjustDiv($regionDiv); - regionTrafo(data, $regionDiv); + var onComplete = function(data, rect) { + if (rect == null) return; var count = getRegions(data, 'regionURL').length; - addRegionNumber(data, $regionDiv, count); + var attr = {'class' : CSS+'regionURL '+CSS+'overlay'}; + var item = {'rect' : rect, 'index' : count, 'attributes' : attr}; + var $regionDiv = addRegionDiv(data, item); fn.highlightButtons(data, 'defineregion', 0); redisplay(data); $(data).trigger('newRegion', [$regionDiv]); - return false; - }; - - // bind start zoom handler - $overlay.one('mousedown.dlRegion', regionStart); + }; fn.highlightButtons(data, 'defineregion', 1); + fn.defineArea(data, onComplete, CSS+'regionArea'); }, // remove the last added URL region @@ -215,6 +164,7 @@ } var selector = 'div.'+CSS+'regionURL'; var $regionDiv = data.$elem.find(selector).last(); + if ($regionDiv.length == 0) return; $regionDiv.remove(); redisplay(data); }, @@ -227,6 +177,7 @@ } var selector = 'div.'+CSS+'regionURL'; var $regionDivs = data.$elem.find(selector); + if ($regionDivs.length == 0) return; $regionDivs.remove(); redisplay(data); }, @@ -268,12 +219,16 @@ $info.find('div.'+CSS+'info').hide(); $info.find('div.'+CSS+name).show(); fn.centerOnScreen(data, $info); + return false; }); }; bind('html'); bind('svgattr'); bind('csv'); bind('digilib'); + $info.on('click.regioninfo', function () { + fn.withdraw($info); + }); $info.find('.x').on('click.regioninfo', function () { fn.withdraw($info); }); @@ -321,7 +276,7 @@ alert('invalid coordinates: ' + coords); return; } - var attr = { 'class' : CSS+'regionURL '+CSS+'findregion' }; + var attr = { 'class' : CSS+'findregion' }; var item = { 'rect' : rect, 'attributes' : attr }; var $regionDiv = addRegionDiv(data, item); var za = data.zoomArea; @@ -363,6 +318,10 @@ fn.withdraw($info); return false; }); + // handle blur + $input.on('blur', function () { + fn.withdraw($info); + }); // handle cancel $form.find('.'+CSS+'cancel').on('click', function () { fn.withdraw($info); @@ -449,21 +408,12 @@ // create a new regionDiv and add it to data.$elem var newRegionDiv = function (data, attr) { var cls = CSS+'region'; - var $regionDiv = $('<div class="'+cls+'" style="display:none"/>'); + var $regionDiv = $('<div class="'+cls+'"/>'); addRegionAttributes(data, $regionDiv, attr); data.$elem.append($regionDiv); return $regionDiv; }; - // calculate the digilib coordinates of a completed user-defined region - var regionTrafo = function (data, $regionDiv) { - var screenRect = geom.rectangle($regionDiv); - var rect = data.imgTrafo.invtransform(screenRect); - $regionDiv.data('rect', rect); - console.debug("regionTrafo", $regionDiv, rect); - return rect; - }; - // copy attributes to a region div var addRegionAttributes = function (data, $regionDiv, attributes) { if (attributes == null) return; @@ -541,7 +491,7 @@ } // mark div class as regionHTML var cls = $area.attr('class') || ''; - cls += ' '+CSS+'regionHTML'; + cls += ' '+CSS+'regionHTML '+CSS+'overlay'; var attr = {'class' : cls}; // copy attributes for (var n in data.settings.regionAttributes) { @@ -679,7 +629,7 @@ var regions = $.map(coords, function(coord, index) { var pos = coord.split("/", 4); var rect = geom.rectangle(pos[0], pos[1], pos[2], pos[3]); - var attr = {'class' : CSS+"regionURL"}; + var attr = {'class' : CSS+"regionURL "+CSS+"overlay"}; var item = {'rect' : rect, 'index' : index+1, 'attributes' : attr}; return item; });