# HG changeset patch # User hertzhaft # Date 1332705923 -7200 # Node ID 4f17420392a95b54f284f3241586103a99c787f5 # Parent b67f388df888817ff34c8c3d558d33bda877234b factor out calibration/scalemode to new dialogs plugin diff -r b67f388df888 -r 4f17420392a9 webapp/src/main/webapp/jquery/digilib.html --- a/webapp/src/main/webapp/jquery/digilib.html Sat Mar 24 23:01:46 2012 +0100 +++ b/webapp/src/main/webapp/jquery/digilib.html Sun Mar 25 22:05:23 2012 +0200 @@ -19,6 +19,7 @@ + diff -r b67f388df888 -r 4f17420392a9 webapp/src/main/webapp/jquery/jquery.digilib.buttons.js --- a/webapp/src/main/webapp/jquery/jquery.digilib.buttons.js Sat Mar 24 23:01:46 2012 +0100 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.buttons.js Sun Mar 25 22:05:23 2012 +0200 @@ -108,12 +108,14 @@ icon : "size.png" }, calibrationx : { - onclick : "showCalibrationDiv", + // onclick : "showCalibrationDiv", + onclick : "calibrate", tooltip : "calibrate screen resolution", icon : "calibration-x.png" }, scale : { - onclick : "showScaleModeSelector", + // onclick : "showScaleModeSelector", + onclick : "setScaleMode", tooltip : "change image scale", icon : "original-size.png" }, @@ -207,43 +209,6 @@ data.currentInsets['buttons'] = getInsets(data); // persist setting fn.storeOptions(data); - }, - - // shows Calibration Div - showCalibrationDiv : function (data) { - var $elem = data.$elem; - var cssPrefix = data.settings.cssPrefix; - var $calDiv = $elem.find('.'+cssPrefix+'calibration'); - var $input = $elem.find('.'+cssPrefix+'calibration-input'); - $calDiv.fadeIn(); - $input.focus(); - }, - - // shows ScaleModeSelector - showScaleModeSelector : function (data) { - var $elem = data.$elem; - var cssPrefix = data.settings.cssPrefix; - var $div = $elem.find('div#'+cssPrefix+'scalemode'); - if ($div.is(':visible')) { - $div.fadeOut(); - return; - } - // select current mode - var mode = data.scaleMode; - $div.find('option').each(function () { - $(this).prop('selected', $(this).attr('name') == mode); - }); - var $button = $elem.find('div.'+cssPrefix+'button-scale'); - var buttonRect = geom.rectangle($button); - $('body').on("click.scalemode", function(event) { - $div.fadeOut(); - }); - $div.fadeIn(); - var divRect = geom.rectangle($div); - $div.offset({ - left : Math.abs(buttonRect.x - divRect.width - 4), - top : buttonRect.y + 4 - }); } }; @@ -284,10 +249,6 @@ for (var i = 0; i < settings.visibleButtonSets; ++i) { showButtons(data, true, i); } - // create ScaleMode selector; - setupScaleModeDiv(data); - // create Calibration div; - setupCalibrationDiv(data); }; /** @@ -300,107 +261,6 @@ return insets; }; - /** creates HTML structure for the calibration div - */ - var setupCalibrationDiv = function (data) { - var $elem = data.$elem; - var settings = data.settings; - var cssPrefix = settings.cssPrefix; - var html = '\ -
\ -
\ -
Please enter the length of this scale on your screen
\ -
\ - cm\ - \ - \ -
\ -
Please enter a numeric value like this: 12.3
\ -
\ -
'; - var $calDiv = $(html); - $elem.append($calDiv); - var $input = $calDiv.find('input'); - var $ok = $calDiv.find('#'+cssPrefix+'calibrationOk'); - var $cancel = $calDiv.find("#calibrationCancel"); - data.calibrationDiv = $calDiv; - data.calibrationErrorDiv = $calDiv.find('div.'+cssPrefix+'calibration-error'); - data.calibrationInput = $input; - fn.centerOnScreen(data, $calDiv); - var handler = function(event) { - var _data = data; - if (event.keyCode == 27 || event.target.id == cssPrefix+'calibrationCancel') { - $calDiv.fadeOut(); - return false; - } - if (event.keyCode == 13 || event.target.id == cssPrefix+'calibrationOk') { - changeCalibration(_data); - return false; - } - _data.calibrationInput.removeClass(cssPrefix+'error'); - }; - $ok.on("click", handler); - $cancel.on("click", handler); - $input.on("keypress", handler); - }; - - /** creates HTML structure for the scale mode menu - */ - var setupScaleModeDiv = function (data) { - var $elem = data.$elem; - var settings = data.settings; - var cssPrefix = settings.cssPrefix; - var currentMode = digilib.fn.getScaleMode(data); - var $scaleModeDiv = $('\ +
Please enter a numeric value like this: 12.3
\ + \ + '; + $calDiv = $(html); + $calDiv.appendTo($elem); + var $input = $calDiv.find('#'+cssPrefix+'calibrationInput'); + var $ok = $calDiv.find('#'+cssPrefix+'calibrationOk'); + var $cancel = $calDiv.find('#'+cssPrefix+'calibrationCancel'); + var $error = $calDiv.find('#'+cssPrefix+'calibrationError'); + var handler = function(event) { + // var _data = data; + console.log("HANDLER calibration"); + if (event.keyCode == 27 || event.target.id == cssPrefix+'calibrationCancel') { + fn.withdraw($calDiv); + return false; + } + if (event.keyCode == 13 || event.target.id == cssPrefix+'calibrationOk') { + var w = $calDiv.width(); + var cm = $input.val(); + var dpi = fn.cropFloat(w / parseFloat(cm) * 2.54); + console.debug('width', w, 'cm', cm, 'input dpi:', dpi); + if (!fn.isNumber(dpi)) { + $input.addClass(cssPrefix+'error'); + $error.fadeIn(); + return; + } + digilib.actions.calibrate(data, dpi); + fn.withdraw($calDiv); + return false; + } + $error.fadeOut(); + $input.removeClass(cssPrefix+'error'); + }; + $ok.on("click.dialog", handler); + $cancel.on("click.dialog", handler); + $input.on("keypress.dialog", handler); + $input.on("focus.dialog", handler); + $calDiv.fadeIn(); + fn.centerOnScreen(data, $calDiv); + $input.focus(); + return $calDiv; + }; + + /** creates and displays HTML structure for scale mode selection + */ + var showScaleModeDialog = function (data) { + var $elem = data.$elem; + var settings = data.settings; + var cssPrefix = settings.cssPrefix; + var $scaleDiv = $elem.find('#'+cssPrefix+'scalemode'); + if ($scaleDiv.length > 0) return; // already onscreen + var html = '\ + '; var $slider = $(sliderHtml); $elem.append($slider); + $slider.fadeIn(); var $range = $slider.find('input.'+cssClass+'range'); var $text = $slider.find('input.'+cssClass+'text'); // fix non-HTML5 slider @@ -455,14 +452,13 @@ $slider.find('form').on('submit', function () { // console.debug("brgt-form:", this, " sub=", this.sub); callback($text.val()); - $slider.remove(); + fn.withdraw($slider); return false; }); // handle cancel $slider.find('.'+cssClass+'cancel').on('click', function () { - $slider.remove(); + fn.withdraw($slider); }); - $slider.fadeIn(); fn.centerOnScreen(data, $slider); }; diff -r b67f388df888 -r 4f17420392a9 webapp/src/main/webapp/jquery/jquery.range.js --- a/webapp/src/main/webapp/jquery/jquery.range.js Sat Mar 24 23:01:46 2012 +0100 +++ b/webapp/src/main/webapp/jquery/jquery.range.js Sun Mar 25 22:05:23 2012 +0200 @@ -127,15 +127,15 @@ if(options.range){ prev = options.values.slice(); // clone - options.values[0] = pxToValue($handle.position().left); - options.values[1] = pxToValue($handle2.position().left); + options.values[0] = bound(pxToValue($handle.position().left)); + options.values[1] = bound(pxToValue($handle2.position().left)); // set value on original element $original.val(options.values[0] +','+options.values[1]); } else { prev = options.values; - options.values = pxToValue($handle.position().left); + options.values = bound(pxToValue($handle.position().left)); // set value on original element $original.val(options.values); @@ -170,7 +170,9 @@ var valspan = options.max - options.min; var v = px * valspan / w + options.min; if (options.snap) { - var tmp = Math.round(v / options.snap) * options.snap; + var tmp = v < 0 + ? Math.floor(v / options.snap) * options.snap + : Math.round(v / options.snap) * options.snap; // hack to cut off floating point imprecision var result = parseFloat(tmp.toFixed(4)); return result;