# HG changeset patch # User hertzhaft # Date 1349111025 -7200 # Node ID 16215fc22fbf22f83a51b6f7f101be4b33daae8a # Parent e1b29f51d224428bfbe0bcad3551404b82da2dbf better separation of HTML and user defined regions diff -r e1b29f51d224 -r 16215fc22fbf webapp/src/main/webapp/jquery/jquery.digilib.css --- a/webapp/src/main/webapp/jquery/jquery.digilib.css Thu Jul 26 21:38:09 2012 +0200 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.css Mon Oct 01 19:03:45 2012 +0200 @@ -42,32 +42,17 @@ div.dl-digilib div.dl-mark { position: absolute; color: white; - background: url('img/mark-bg-16.png'); + background: url('../greyskin/mark-bg-16.png'); font-family: Verdana, Arial, Helvetica, sans-serif; font-weight: bold; font-size: 11px; - height: 16px; + height: 15px; width: 16px; padding-top: 1px; text-align: center; z-index: 10; } -div.dl-digilib div.dl-annotationmark { - position: absolute; - color: black; - background: url('img/annotationmark-bg-16.png'); - /* background-color: yellow; */ - font-family: Verdana, Arial, Helvetica, sans-serif; - font-weight: bold; - font-size: 11px; - height: 16px; - width: 16px; - padding-top: 1px; - text-align: center; - z-index: 10; -} - div.dl-digilib div.dl-about { position: absolute; padding: 10px; @@ -103,6 +88,10 @@ filter:progid:DXImageTransform.Microsoft.Alpha(opacity=60); } +div.dl-digilib div.dl-regionHTML { + background-color: purple; +} + div.dl-digilib div.dl-region a.dl-regionnumber { color: white; text-decoration: none; @@ -183,27 +172,26 @@ position: absolute; top: 0px; } - -div.dl-digilib div.dl-rgbsliderpreview, -div.dl-digilib div.dl-singlesliderpreview { +div.dl-digilib div.dl-rgbsliderindicator, +div.dl-digilib div.dl-singlesliderindicator { border: 2px solid lightcyan; margin: 10px 0px; } div.dl-digilib table.dl-rgbslider, div.dl-digilib table.dl-rgbslidergrey, -div.dl-digilib table.dl-rgbsliderpreview, +div.dl-digilib table.dl-rgbsliderindicator, div.dl-digilib table.dl-singleslider, div.dl-digilib table.dl-singleslidergrey, -div.dl-digilib table.dl-singlesliderpreview { +div.dl-digilib table.dl-singlesliderindicator { width: 100%; border-collapse: collapse; } div.dl-digilib table.dl-rgbslidergrey td, -div.dl-digilib table.dl-rgbsliderpreview td, +div.dl-digilib table.dl-rgbsliderindicator td, div.dl-digilib table.dl-singleslidergrey td, -div.dl-digilib table.dl-singlesliderpreview td { +div.dl-digilib table.dl-singlesliderindicator td { height: 20px; } diff -r e1b29f51d224 -r 16215fc22fbf webapp/src/main/webapp/jquery/jquery.digilib.regions.js --- a/webapp/src/main/webapp/jquery/jquery.digilib.regions.js Thu Jul 26 21:38:09 2012 +0200 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.regions.js Mon Oct 01 19:03:45 2012 +0200 @@ -41,18 +41,18 @@ var geom = null; var buttons = { - addregion : { - onclick : "defineRegion", + defineurlregion : { + onclick : "defineURLRegion", tooltip : "define a region", icon : "addregion.png" }, - delregion : { - onclick : "removeRegion", + removeurlregion : { + onclick : "removeURLRegion", tooltip : "delete the last region", icon : "delregion.png" }, - delallregions : { - onclick : "removeAllRegions", + removeallurlregions : { + onclick : "removeAllURLRegions", tooltip : "delete all regions", icon : "delallregions.png" }, @@ -69,6 +69,8 @@ }; var defaults = { + // are regions being edited? + 'editRegions' : false, // are regions shown? 'isRegionVisible' : true, // are region numbers shown? @@ -77,22 +79,31 @@ 'processHtmlRegions' : false, // region defined by users and in the URL 'processUserRegions' : true, - // turn any region into a clickable link to its detail view - 'autoZoomRegionLinks' : false, - // use full region as klickable link (instead of only number and text) - 'fullRegionLinks' : false, + // callback for click on region + 'onClickRegion' : null, + // turn any region into a clickable link to its detail view (DEPRECATED) + 'autoZoomOnClick' : false, // css selector for area elements (must also be marked with class "dl-keep") 'htmlRegionsSelector' : 'map.dl-regioncontent area, map.dl-regioncontent a', // buttonset of this plugin - 'regionSet' : ['regions', 'addregion', 'delregion', 'delallregions', 'regioninfo', 'lessoptions'], + 'regionSet' : ['regions', 'defineurlregion', 'removeurlregion', 'removeallurlregions', 'regioninfo', 'lessoptions'], // url param for regions - 'rg' : null + 'rg' : null, + // region attributes to copy from HTML + 'regionAttributes' : { + 'id' :1, + 'href' :1, + 'title' :1, + 'target':1, + 'style' :1, + 'class' :1 + } }; var actions = { // define a region interactively with two clicked points - defineRegion : function(data) { + defineURLRegion : function(data) { if (!data.settings.isRegionVisible) { alert("Please turn on regions visibility!"); return; @@ -108,7 +119,8 @@ var $overlay = $('
'); $body.append($overlay); bodyRect.adjustDiv($overlay); - var $regionDiv = addRegionDiv(data, data.regions.length); + var attr = {'class' : cssPrefix+"regionURL"}; + var $regionDiv = addRegionDiv(data, data.regionsURL, data.regionsURL.length, attr); // mousedown handler: start sizing var regionStart = function (evt) { @@ -146,7 +158,7 @@ // clip region clickRect.clipTo(scalerRect); clickRect.adjustDiv($regionDiv); - storeRegion(data, $regionDiv); + storeURLRegion(data, $regionDiv); // fn.redisplay(data); fn.highlightButtons(data, 'addregion', 0); redisplay(data); @@ -158,29 +170,30 @@ fn.highlightButtons(data, 'addregion', 1); }, - // remove the last added region - removeRegion : function (data) { + // remove the last added URL region + removeURLRegion : function (data) { if (!data.settings.isRegionVisible) { alert("Please turn on regions visibility!"); return; } - var region = data.regions.pop(); - if (region == null) return; - var $regionDiv = region.$div; + var r = data.regionsURL.pop(); + // no more URL regions to delete + if (r == null) return; + var $regionDiv = r.$div; $regionDiv.remove(); redisplay(data); }, - // remove the last added region - removeAllRegions : function (data) { + // remove all manually added regions (defined through URL "rg" parameter) + removeAllURLRegions : function (data) { if (!data.settings.isRegionVisible) { alert("Please turn on regions visibility!"); return; } var cssPrefix = data.settings.cssPrefix; - var $regions = data.$elem.find('div.'+cssPrefix+'region'); + var $regions = data.$elem.find('div.'+cssPrefix+'regionURL'); $regions.remove(); - data.regions = []; + data.regionsURL = []; // remove only URL regions redisplay(data); }, @@ -235,17 +248,63 @@ }); $info.fadeIn(); fn.centerOnScreen(data, $info); + }, + + // show region coordinates in an edit line + showRegionCoords : function (data) { + var $elem = data.$elem; + var cssPrefix = data.settings.cssPrefix; + var infoselector = '#'+cssPrefix+'regionInfo'; + if (fn.find(data, infoselector)) { + fn.withdraw($info); + return; + } + var html = '\ +
\ + \ + \ +
'; + $info = $(html); + $info.appendTo($elem); + var bind = function(name) { + $info.find('.'+name).on('click.regioninfo', function () { + $info.find('div.'+cssPrefix+'info').hide(); + $info.find('div.'+cssPrefix+name).show(); + fn.centerOnScreen(data, $info); + }); + }; + $info.bind('button').on('click.regioninfo', function () { + fn.withdraw($info); + }); + $info.fadeIn(); + fn.centerOnScreen(data, $info); } + }; // store a region div - var storeRegion = function (data, $regionDiv) { - var regions = data.regions; + var storeURLRegion = function (data, $regionDiv) { + var regions = data.regionsURL; var rect = geom.rectangle($regionDiv); - var regionRect = data.imgTrafo.invtransform(rect); - regionRect.$div = $regionDiv; - regions.push(regionRect); - console.debug("regions", data.regions, "regionRect", regionRect); + var rectangle = data.imgTrafo.invtransform(rect); + rectangle.$div = $regionDiv; + regions.push(rectangle); + console.debug("storeURLregion", data.regionsURL, "rectangle", rectangle); + }; + + // open region as detail + var openDetail = function (data, region) { + digilib.actions.zoomArea(data, region); + }; + + // make a coords string + var regionCoordsString = function (rect, sep) { + return [ + fn.cropFloatStr(rect.x), + fn.cropFloatStr(rect.y), + fn.cropFloatStr(rect.width), + fn.cropFloatStr(rect.height) + ].join(sep); }; // html for later insertion @@ -253,14 +312,9 @@ var cssPrefix = data.settings.cssPrefix; var $infoDiv = $('
'); $infoDiv.append($('
').text('')); - $.each(data.regions, function(index, r) { - if (r.fromHtml) return; - var area = [ - fn.cropFloatStr(r.x), - fn.cropFloatStr(r.y), - fn.cropFloatStr(r.width), - fn.cropFloatStr(r.height)].join(','); - $infoDiv.append($('
').text('')); + $.each(data.regionsURL, function(index, r) { + var coords = regionCoordsString(r, ','); + $infoDiv.append($('
').text('')); }); $infoDiv.append($('
').text('')); return $infoDiv; @@ -270,54 +324,50 @@ var regionInfoSVG = function (data) { var cssPrefix = data.settings.cssPrefix; var $infoDiv = $('
'); - $.each(data.regions, function(index, r) { - if (r.fromHtml) return; - var area = [ - fn.cropFloatStr(r.x), - fn.cropFloatStr(r.y), - fn.cropFloatStr(r.width), - fn.cropFloatStr(r.height)].join(' '); - $infoDiv.append($('
').text('"' + area + '"')); + $.each(data.regionsURL, function(index, r) { + var coords = regionCoordsString(r, ' '); + $infoDiv.append($('
').text('"' + coords + '"')); }); return $infoDiv; }; - // SVG-style + // CSV-style var regionInfoCSV = function (data) { var cssPrefix = data.settings.cssPrefix; var $infoDiv = $('
'); - $.each(data.regions, function(index, r) { - if (r.fromHtml) return; - var area = [ - fn.cropFloatStr(r.x), - fn.cropFloatStr(r.y), - fn.cropFloatStr(r.width), - fn.cropFloatStr(r.height)].join(','); - $infoDiv.append($('
').text(index+1 + ": " + area)); + $.each(data.regionsURL, function(index, r) { + var coords = regionCoordsString(r, ','); + $infoDiv.append($('
').text(index+1 + ": " + coords)); }); return $infoDiv; }; - // digilib-style + + // digilib-style (h,w@x,y) var regionInfoDigilib = function (data) { var cssPrefix = data.settings.cssPrefix; var $infoDiv = $('
'); - $.each(data.regions, function(index, r) { + $.each(data.regionsURL, function(index, r) { if (r.fromHtml) return; - var area = r.toString(); - $infoDiv.append($('
').text(area)); + var coords = r.toString(); + $infoDiv.append($('
').text(coords)); }); return $infoDiv; }; // add a region to data.$elem - var addRegionDiv = function (data, index, attributes) { + var addRegionDiv = function (data, regions, index, attributes) { var settings = data.settings; var cssPrefix = settings.cssPrefix; - var nr = index + 1; // we count regions from 1 - var $regionDiv = $('