Mercurial > hg > digilib
changeset 1572:046d89ff70b3 measure-maps
merge in newer files from default branch
author | hertzhaft |
---|---|
date | Mon, 07 Nov 2016 01:40:01 +0100 |
parents | 001e6fa1c7fb |
children | 6f15d2ad5333 |
files | webapp/src/main/webapp/jquery/jquery.digilib.birdseye.js webapp/src/main/webapp/jquery/jquery.digilib.css webapp/src/main/webapp/jquery/jquery.digilib.js webapp/src/main/webapp/jquery/jquery.digilib.regions.js webapp/src/main/webapp/jquery/jquery.digilib.sliders.js |
diffstat | 5 files changed, 158 insertions(+), 61 deletions(-) [+] |
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/jquery.digilib.birdseye.js Thu Nov 03 22:55:51 2016 +0100 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.birdseye.js Mon Nov 07 01:40:01 2016 +0100 @@ -35,7 +35,7 @@ var FULL_AREA; var buttons = { - bird : { + bird: { 'onclick' : "showBirdDiv", 'tooltip' : "show bird's eye view", 'icon' : "birds-eye.png" @@ -56,7 +56,7 @@ var actions = { // event handler: toggles the visibility of the bird's eye window - showBirdDiv : function (data, show) { + showBirdDiv: function (data, show) { var settings = data.settings; if (data.$birdDiv == null) { // no bird div: create it @@ -87,8 +87,11 @@ // insert in button list -- not elegant if (digilib.plugins.buttons != null) { // if (digilib.defaults.buttonSettings != null) { - digilib.defaults.buttonSettings.fullscreen.standardSet.splice(9, 0, 'bird'); - digilib.defaults.buttonSettings.embedded.standardSet.splice(5, 0, 'bird'); + var fset = digilib.defaults.buttonSettings.fullscreen.standardSet; + var eset = digilib.defaults.buttonSettings.embedded.standardSet; + // dynamic insert before [about, reset, moreoptions] + fset.splice(fset.length - 3, 0, 'bird'); + eset.splice(eset.length - 3, 0, 'bird'); } }; @@ -140,8 +143,8 @@ var getBirdImgUrl = function (data) { var settings = data.settings; var birdDivOptions = { - dw : settings.birdDivWidth, - dh : settings.birdDivHeight + dw: settings.birdDivWidth, + dh: settings.birdDivHeight }; var birdSettings = $.extend({}, settings, birdDivOptions); // use only the relevant parameters @@ -275,7 +278,7 @@ newRect = null; data.$elem.find('.'+cssPrefix+'overlay').hide(); // hide all overlays (marks/regions) // hide image - digilib.fn.fadeScalerImg(data, 0); + digilib.fn.fadeScalerImg(data, 'hide'); $document.on("mousemove.dlBirdMove", birdZoomMove); $document.on("mouseup.dlBirdMove", birdZoomEndDrag); return false;
--- a/webapp/src/main/webapp/jquery/jquery.digilib.css Thu Nov 03 22:55:51 2016 +0100 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.css Mon Nov 07 01:40:01 2016 +0100 @@ -113,7 +113,6 @@ background-color: red; opacity: 0.3; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; - filter: alpha(opacity=30); } div.dl-digilib div.dl-region a:link, @@ -131,7 +130,6 @@ border: none; opacity: 0.3; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; - filter: alpha(opacity=30); } div.dl-digilib div.dl-regionHTML { @@ -164,7 +162,6 @@ border: 5px solid aqua; opacity: 0.8; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; - filter: alpha(opacity=80); } div.dl-digilib div.dl-findregion { @@ -172,7 +169,6 @@ border: 5px solid aqua; opacity: 0.8; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; - filter: alpha(opacity=80); } div.dl-digilib select.dl-finddata { @@ -355,7 +351,6 @@ background-color: black; opacity: 0.3; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; - filter: alpha(opacity=30); } div.dl-digilib table.dl-scalertable img.button { @@ -428,7 +423,6 @@ background-color: gray; opacity: 0.5; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); z-index: 100; }
--- a/webapp/src/main/webapp/jquery/jquery.digilib.js Thu Nov 03 22:55:51 2016 +0100 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.js Mon Nov 07 01:40:01 2016 +0100 @@ -102,6 +102,10 @@ 'previewImgParamNames' : ['fn','pn','dw','dh','mo','rot'], // reserved space in full page display (default value accounts for body margins) 'scalerInsets' : { 'x' : 26, 'y': 20 }, + // how transparent does the background image get while changing the zoom area? + 'scalerFadedOpacity' : 0.6, + // show a little window with file size and zoom information + 'showZoomInfo' : false, // number of decimal places, for cropping parameters wx,wy,wh,ww 'decimals' : 4 }; @@ -261,6 +265,10 @@ // create HTML structure for scaler setupScalerDiv(data); // additional initializations before setup (e.g. for single nested settings) + if (settings.showZoomInfo) { + actions.zoomInfo(data); + loadImageInfo(data); + } if (typeof hook === 'function') { hook(data); console.debug('init hook', hook, data); @@ -320,6 +328,28 @@ centerOnScreen(data, $about); }, + /** show the 'zoominfo' window + * + * @param data + */ + zoomInfo : function(data) { + var $elem = data.$elem; + var settings = data.settings; + var cssPrefix = settings.cssPrefix; + var zoomInfoSelector = '#'+cssPrefix+'zoominfo'; + if (isOnScreen(data, zoomInfoSelector)) { + $(zoomInfoSelector).fadeToggle(); + return; + } + var html = '\ + <div id="'+cssPrefix+'zoominfo" class="'+cssPrefix+'zoominfo" style="display:none">\ + <div id="'+cssPrefix+'zoominfo1" />\ + <div id="'+cssPrefix+'zoominfo2" />\ + </div>'; + var $zoominfo = $(html); + $zoominfo.appendTo($elem); + }, + /** goto given page nr (+/-: relative) * * @param data @@ -375,9 +405,9 @@ // interactively var onComplete = function(data, rect) { if (rect == null) return; + // hide image, show dimmed background + fadeScalerImg(data, 'fadeOut'); setZoomArea(data, rect); - // reset modes - setFitMode(data, 'both'); setScaleMode(data, 'screen'); redisplay(data); }; @@ -394,9 +424,9 @@ * @param mode */ zoomFull : function (data, mode) { + setFitMode(data, mode); + data.$scaler.css('opacity', data.settings.scalerFadedOpacity); setZoomArea(data, FULL_AREA.copy()); - setFitMode(data, mode); - // zoom full only works in screen mode setScaleMode(data, 'screen'); redisplay(data); }, @@ -506,6 +536,8 @@ var settings = data.settings; var paramNames = settings.digilibParamNames; var params = data.queryParams; + // dim image, show something is happening + data.$scaler.css('opacity', data.settings.scalerFadedOpacity); // delete all digilib parameters for (var i = 0; i < paramNames.length; i++) { var paramName = paramNames[i]; @@ -562,8 +594,7 @@ } return url; }, - - + /** set image quality * * @param data @@ -995,11 +1026,12 @@ loadImageInfo(data); } } - // update if we have a preview - if (data.hasPreviewBg) { - $(data).trigger('update'); - } - //FIXME: highlightButtons(data); + // update if we have a preview + // --- too early here, 'update' is triggered by scalerImgLoadedHandler + // if (data.hasPreviewBg) { + // $(data).trigger('update'); + // } + // FIXME: highlightButtons(data); // send event $(data).trigger('redisplay'); } catch (e) { @@ -1059,6 +1091,20 @@ var data = this; updateImgTrafo(data); setupZoomDrag(data); + updateZoomInfo(data); + }; + + var updateZoomInfo = function (data) { + if (!data.settings.showZoomInfo) { + return; + } + var $zoominfo = $('#'+data.settings.cssPrefix+'zoominfo'); + // console.debug(data.$elem.width(), data.zoomArea.width, json.width); + var json = data.imgInfo; + var px = data.$img.width(); + var percent = Math.round(px / data.zoomArea.width / json.width * 100); + $zoominfo.children().first().text(json.width+'x'+json.height); + $zoominfo.children().last().text('zoom '+percent+'%'); }; /** @@ -1278,14 +1324,15 @@ $scaler.css('cursor', 'auto'); // adjust scaler div size (beware: setting position makes the element relative) imgRect.getSize().adjustDiv($scaler); + // initial load of scaler background (for preview) + if (!data.hasPreviewBg) { + setPreviewBg(data, data.zoomArea); + } // show image in case it was hidden (for example in zoomDrag) - $img.css('visibility', 'visible'); - $img.fadeIn(); - // $scaler.css({'opacity' : '1'}); - $scaler.fadeTo('slow', 1); - data.hasPreviewBg = false; + fadeScalerImg(data, 'fadeIn'); // update display (render marks, etc.) updateDisplay(data); + // console.debug("* load handler finished"); }; }; @@ -1300,6 +1347,8 @@ var handleImageInfo = function (evt, json) { console.debug("handleImageInfo:", json); var data = this; + var $zoominfo = $('#'+data.settings.cssPrefix+'zoominfo'); + $zoominfo.fadeIn(); updateDisplay(data); }; @@ -1307,7 +1356,7 @@ * */ var handleChangeZoomArea = function (evt, newZa) { - console.debug("handleChangeZoomArea:", newZa); + // console.debug("handleChangeZoomArea:", newZa); var data = this; // hide all overlays (marks/regions) data.$elem.find('.'+data.settings.cssPrefix+'overlay').hide(); @@ -1328,9 +1377,11 @@ newarea.y -= 0.5 * (newarea.height - area.height); newarea = FULL_AREA.fit(newarea); setZoomArea(data, newarea); + // hide image, show dimmed background + fadeScalerImg(data, 'fadeOut'); // reset modes setScaleMode(data, 'screen'); - setFitMode(data, 'both'); + // setFitMode(data, 'both'); // ###? redisplay(data); }; @@ -1423,14 +1474,15 @@ 'cursor' : 'move' }; if (newZoomArea != null) { - // check if aspect ratio has changed - if (Math.abs(newZoomArea.getAspect() - data.zoomArea.getAspect()) > 0.001 ) { - var newRect = data.imgTrafo.transform(newZoomArea); + // check if aspect ratio has changed + if (Math.abs(newZoomArea.getAspect() - data.zoomArea.getAspect()) > 0.001) { + var newRect = imgTrafo.transform(newZoomArea); var newAspect = newRect.getAspect(); var newSize = data.maxImgSize.fitAspect(newAspect); // set scaler to presumed new size newSize.adjustDiv($scaler); - console.debug("adjusting aspect ratio for preview", data.maxImgSize, newSize); + console.debug("adjusting aspect ratio of preview:", + data.maxImgSize.toString(), '=>', newSize.toString()); } // get transform for new zoomArea (use 'screen' instead of data.scaleMode) imgTrafo = getImgTrafo($scaler, newZoomArea, data.settings.rot, @@ -1461,8 +1513,8 @@ scalerCss[data.bgSizeName] += ', ' + Math.round(fullRect.width) + 'px ' + Math.round(fullRect.height) + 'px'; scalerCss['background-position'] += ', ' + Math.round(fullRect.x) + 'px '+ Math.round(fullRect.y) + 'px'; } - // console.debug('setPreviewBg', scalerCss); } + // console.debug('* setPreviewBg', scalerCss[data.bgSizeName], 'pos', scalerCss['background-position']); $scaler.css(scalerCss); data.hasPreviewBg = true; }; @@ -1488,10 +1540,8 @@ $elem.find('.'+data.settings.cssPrefix+'overlay').hide(); // hide all overlays (marks/regions) startPos = geom.position(evt); delta = null; - // hide the scaler img, show background of div instead - $img.css('visibility', 'hidden'); - $img.hide(); - $scaler.fadeTo('slow', 0.7); + // hide image, show dimmed background + fadeScalerImg(data, 'hide'); // set low res background immediately on mousedown setPreviewBg(data); $document.on("mousemove.dlZoomDrag", dragMove); @@ -1519,12 +1569,8 @@ $document.off("mousemove.dlZoomDrag", dragMove); $document.off("mouseup.dlZoomDrag", dragEnd); if (delta == null || delta.distance() < 2) { - // no movement - $img.css('visibility', 'visible'); - $img.fadeIn(); - $scaler.fadeTo('slow', 1); - // $scaler.css({'opacity' : '1', 'background-image' : 'none'}); - data.hasPreviewBg = false; + // no change, show image again + fadeScalerImg(data, 'fadeIn'); // unhide marks etc. updateDisplay(data); return false; @@ -1581,6 +1627,35 @@ return parseInt(q[1], 10); }; + /** hide or show image, fade scaler background + * + */ + var fadeScalerImg = function (data, show) { + var $img = data.$img; + var $scaler = data.$scaler; + if (show == null || show === 'hide') { + $scaler.css('opacity', data.settings.scalerFadedOpacity); + $img.fadeOut(function(){ + // console.debug("* img hide", $img.css('display')); + }); + } else if (show === 'fadeOut') { + $scaler.fadeTo('fast', data.settings.scalerFadedOpacity, function() { + // console.debug("* scaler fadeOut", $img.css('display'), $img.css('opacity')); + $img.fadeOut(function(){ + console.debug("* img fadeOut", $img.css('display')); + }); + }); + } else { + data.hasPreviewBg = false; + $img.fadeIn(function(){ + // console.debug("* img fadeIn", $img.css('display')); + }); + $scaler.fadeTo('slow', 1, function() { + // console.debug("* scaler fadeIn", $img.css('display'), $img.css('opacity')); + }); + } + }; + /** set image quality as a number (0..2). * */ @@ -1882,6 +1957,7 @@ storeOptions : storeOptions, redisplay : redisplay, updateDisplay : updateDisplay, + fadeScalerImg : fadeScalerImg, showDiv : showDiv, defineArea : defineArea, setZoomArea : setZoomArea,
--- a/webapp/src/main/webapp/jquery/jquery.digilib.regions.js Thu Nov 03 22:55:51 2016 +0100 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.regions.js Mon Nov 07 01:40:01 2016 +0100 @@ -171,9 +171,9 @@ } var onComplete = function (data, rect) { if (rect == null) return; - var count = getRegions(data, 'regionURL').length; + var index = getRegions(data, 'regionURL').length + 1; var attr = {'class' : CSS+'regionURL '+CSS+'overlay'}; - var item = {'rect' : rect, 'index' : count, 'attributes' : attr}; + var item = {'rect' : rect, 'index' : index, 'attributes' : attr}; var $regionDiv = addRegionDiv(data, item); fn.highlightButtons(data, 'defineregion', 0); redisplay(data); @@ -232,7 +232,7 @@ var show = !data.settings.isRegionVisible; data.settings.isRegionVisible = show; fn.highlightButtons(data, 'regions', show); - renderRegions(data, 0); + renderRegions(data, 1); return show; }, @@ -689,7 +689,7 @@ za.setCenter(rect.getCenter()).stayInside(FULL_AREA); fn.setZoomArea(data, za); // hide image - fn.fadeScalerImg(data, 0); + fn.fadeScalerImg(data, 'fadeOut'); fn.redisplay(data); }; @@ -762,7 +762,7 @@ console.debug("regions: handleUpdate"); var settings = data.settings; fn.highlightButtons(data, 'regions' , settings.isRegionVisible); - renderRegions(data); + renderRegions(data, 1); }; // additional buttons
--- a/webapp/src/main/webapp/jquery/jquery.digilib.sliders.js Thu Nov 03 22:55:51 2016 +0100 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.sliders.js Mon Nov 07 01:40:01 2016 +0100 @@ -100,6 +100,9 @@ var actions = { // shows brightness slider sliderBrgt : function (data) { + if (removeSlider(data)) { + return; + } // adjust min and max for contrast value (not nice to change sliderOptions) var maxBrgt = Math.max(Math.round(255 * Math.pow(2, data.settings.cont)), 255); var options = sliderOptions.brightness; @@ -117,6 +120,9 @@ // shows contrast slider sliderCont : function (data) { + if (removeSlider(data)) { + return; + } var options = sliderOptions.contrast; var onChange = function($slider, val) { var m = Math.pow(2, parseFloat(val)); @@ -132,6 +138,9 @@ // shows rotate slider sliderRot : function (data) { + if (removeSlider(data)) { + return; + } var options = sliderOptions.rotation; var onChange = null; var onSubmit = function(val) { @@ -142,6 +151,9 @@ // shows RGB sliders sliderRGB : function (data) { + if (removeSlider(data)) { + return; + } var onSubmit = function(m, a) { digilib.actions.setRGB(data, m, a); }; @@ -248,8 +260,6 @@ var cls = cssPrefix + cssSuffix; var tiny = cssPrefix + 'tinyslider'; var $elem = data.$elem; - var sliderSelector = '#'+cssPrefix+'slider'; - if (fn.isOnScreen(data, sliderSelector)) return null; // already onscreen var html = '\ <div id="'+cssPrefix+'slider" class="'+cls+'">\ <form class="'+cls+'">\ @@ -303,6 +313,19 @@ return $div; }; + /** removes slider window if on screen + */ + var removeSlider = function (data) { + var selector = '#'+ data.settings.cssPrefix + 'slider'; + if (fn.isOnScreen(data, selector)) { + var $div = $(selector); + fn.withdraw($div); + return true; + } + return false; + }; + + /** creates a TinyRange slider */ var tinySlider = function (data, options, startvalue) { @@ -366,9 +389,10 @@ the new value is passed to the "onSubmit" function. */ var singleSlider = function (data, options, onChange, onSubmit) { + var settings = data.settings; var classname = 'singleslider'; - var $div = $('<div/>'); - var startvalue = data.settings[options.param] || options.start; + var $div = $('<div>'); + var startvalue = settings[options.param] || options.start; var $slider = tinySlider(data, options, startvalue); var getValue = function () { // get the new value and do something with it @@ -381,7 +405,7 @@ setupFormDiv(data, $div, classname, getValue); var hasPreview = options.preview; if (hasPreview) { - var cls = data.settings.cssPrefix + classname; + var cls = settings.cssPrefix + classname; var $preview = preview(cls); $div.append($preview); $slider.data({ @@ -398,8 +422,8 @@ var rgbSlider = function (data, onSubmit) { var css = data.settings.cssPrefix; var cls = css + 'rgbslider'; - var $div = $('<div/>'); - var $table = $('<table class="'+cls+'" />'); + var $div = $('<div>'); + var $table = $('<table>', { class: cls }); var $preview = preview(cls); $div.append($table); $div.append($preview); @@ -407,7 +431,7 @@ var insertTableRow = function(index, value) { var color = colorVals[value]; // start values are set in "handleSetup" - var $tr = $('<tr/>').appendTo($table); + var $tr = $('<tr>').appendTo($table); var html = '\ <td class="'+css+'color '+css+value+'">\ <div>'+color.label+'</div>\ @@ -417,8 +441,8 @@ var $cont = tinySlider(data, sliderOptions.contrast, color.m); $table.data(value+'a', $brgt.data('$text')); $table.data(value+'m', $cont.data('$text')); - $('<td class="'+css+'rgb"/>').append($brgt).appendTo($tr); - $('<td class="'+css+'rgb"/>').append($cont).appendTo($tr); + $('<td>', { class: css+'rgb' }).append($brgt).appendTo($tr); + $('<td>', { class: css+'rgb' }).append($cont).appendTo($tr); }; var onChange = function ($slider) { // show effects of color brightness/contrast on a grey scale