Mercurial > hg > digilib-old
changeset 1021:9aa282ceec8a
move sliders out of buttons plugin
author | hertzhaft |
---|---|
date | Wed, 29 Feb 2012 11:28:42 +0100 |
parents | 0eedb4a5b674 |
children | a1bb909dfd38 |
files | webapp/src/main/webapp/jquery/digilib.html webapp/src/main/webapp/jquery/jquery.digilib.buttons.js webapp/src/main/webapp/jquery/jquery.digilib.js |
diffstat | 3 files changed, 16 insertions(+), 387 deletions(-) [+] |
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/digilib.html Tue Feb 21 00:08:04 2012 +0100 +++ b/webapp/src/main/webapp/jquery/digilib.html Wed Feb 29 11:28:42 2012 +0100 @@ -17,6 +17,7 @@ <script type="text/javascript" src="jquery.digilib.geometry.js"></script> <script type="text/javascript" src="jquery.digilib.arrows.js"></script> <script type="text/javascript" src="jquery.digilib.buttons.js"></script> + <!-- <script type="text/javascript" src="jquery.digilib.sliders.js"></script> --> <script type="text/javascript" src="jquery.digilib.birdseye.js"></script> <script type="text/javascript" src="jquery.digilib.marks.js"></script> <script type="text/javascript" src="jquery.digilib.regions.js"></script> @@ -26,7 +27,8 @@ $(document).ready(function(){ var opts = { interactionMode : 'fullscreen', - showRegionNumbers : true + showRegionNumbers : true, + autoRegionLinks : true }; var $div = $('div#digilib'); $div.digilib(opts);
--- a/webapp/src/main/webapp/jquery/jquery.digilib.buttons.js Tue Feb 21 00:08:04 2012 +0100 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.buttons.js Wed Feb 29 11:28:42 2012 +0100 @@ -78,17 +78,17 @@ icon : "mirror-vertical.png" }, rot : { - onclick : "sliderRotate", + onclick : "rotate", tooltip : "rotate image", icon : "rotate.png" }, brgt : { - onclick : "sliderBrightness", + onclick : "brightness", tooltip : "set brightness", icon : "brightness.png" }, cont : { - onclick : "sliderContrast", + onclick : "contrast", tooltip : "set contrast", icon : "contrast.png" }, @@ -138,59 +138,6 @@ } }; - var sliders = { - rot : { - label : "Rotation angle", - tooltip : "rotate image", - icon : "rotate.png", - 'min' : 0, - 'max' : 360, - 'start' : 90 - }, - brgt : { - label : "Brightness", - tooltip : "set numeric value to be added", - icon : "brightness.png", - 'min' : -255, - 'max' : 255, - 'start' : 0 - }, - cont : { - label : "Contrast", - tooltip : "set numeric value to be multiplied", - icon : "contrast.png", - 'min' : -4, - 'max' : 4, - 'start' : 0 - }, - red : { - label : "Red value", - tooltip : "set red value", - icon : "rgb.png", - 'min' : 0, - 'max' : 255, - 'start' : 127 - }, - - green : { - label : "Green value", - tooltip : "set green value", - icon : "rgb.png", - 'min' : 0, - 'max' : 255, - 'start' : 127 - }, - - blue : { - label : "Blue value", - tooltip : "set blue value", - icon : "rgb.png", - 'min' : 0, - 'max' : 255, - 'start' : 127 - }, - }; - var modes = [ { name : "screen", label : "fit to screen", @@ -263,66 +210,6 @@ fn.storeOptions(data); }, - // slider to set a rotation angle - sliderRotate : function (data) { - var $elem = data.$elem; - var $panel = fn.setupPanel(data); - if ($panel == null) { - return; - }; - var opts = { 'start' : parseFloat(data.settings.rot) }; - var $slider = fn.setupSlider(data, 'rot', opts); - var ok = function(d) { - var angle = $slider.slider('getval'); - digilib.actions.rotate(d, angle); - }; - $panel.data['ok'] = ok; - $panel.fadeIn(); - $panel.prepend($slider); - centerOnScreen(data, $panel); - $slider.slider('show'); - }, - - // slider to set a brightness value - sliderBrightness : function (data) { - var $elem = data.$elem; - var $panel = fn.setupPanel(data); - if ($panel == null) { - return; - }; - var opts = { 'start' : parseFloat(data.settings.brgt) }; - var $slider = fn.setupSlider(data, 'brgt', opts); - var ok = function(d) { - var brgt = $slider.slider('getval'); - digilib.actions.brightness(d, brgt); - }; - $panel.data['ok'] = ok; - $panel.fadeIn(); - $panel.prepend($slider); - centerOnScreen(data, $panel); - $slider.slider('show'); - }, - - // slider to set a contrast value - sliderContrast : function (data) { - var $elem = data.$elem; - var $panel = fn.setupPanel(data); - if ($panel == null) { - return; - }; - var opts = { 'start' : parseFloat(data.settings.cont) }; - var $slider = fn.setupSlider(data, 'cont', opts); - var ok = function(d) { - var cont = $slider.slider('getval'); - digilib.actions.contrast(d, cont, true); - }; - $panel.data['ok'] = ok; - $panel.fadeIn(); - $panel.prepend($slider); - centerOnScreen(data, $panel); - $slider.slider('show'); - }, - // shows Calibration Div showCalibrationDiv : function (data) { var $elem = data.$elem; @@ -377,8 +264,6 @@ // export functions fn.createButton = createButton; fn.highlightButtons = highlightButtons; - fn.setupSlider = setupSlider; - fn.setupPanel = setupPanel; }; // plugin initialization @@ -389,7 +274,6 @@ // install event handler var $data = $(data); $data.bind('setup', handleSetup); - sliderPlugin(jQuery, data); }; var handleSetup = function (evt) { @@ -416,271 +300,6 @@ return insets; }; - var centerOnScreen = function (data, $div) { - var r = geom.rectangle($div); - var s = fn.getFullscreenRect(data); - r.setCenter(s.getCenter()); - r.adjustDiv($div); - }; - - // slider - var sliderPlugin = function($, digilibdata) { - var cssPrefix = digilibdata.settings.cssPrefix; - var defaults = { - 'cssclass' : cssPrefix+'slider', - 'label' : 'Slider', - 'direction' : 'x', - 'handlesize' : 16, - 'min' : 0, - 'max' : 100, - 'start' : 33, - 'numberoffset' : -24, - 'labeloffset' : 16, - 'rect' : null, - 'factor' : null, - 'onmove' : null // callback function - }; - var methods = { - init : function( options ) { - // make a slider from each element - return this.each(function() { - var $this = $(this); - // var settings = data.settings; - var settings = $.extend( defaults, options); - console.debug('new slider: ', $this, ' settings:', settings); - $this.data('digilib', digilibdata); - var data = $this.data('settings'); - if (!data) { - $this.data('settings', settings); - $this.addClass(settings.cssclass); - var $handle = $('<div class="'+settings.cssclass+'handle" />'); - var $label = $('<div class="'+settings.cssclass+'label">' - +settings.label+': '+settings.start+'</div>'); - var $min = $('<div class="'+settings.cssclass+'number">'+settings.min+'</div>'); - var $max = $('<div class="'+settings.cssclass+'number">'+settings.max+'</div>'); - $this.append($handle); - $this.append($label); - $this.append($min); - $this.append($max); - $.extend(settings, { - '$handle' : $handle, - '$label' : $label, - '$min' : $min, - '$max' : $max, - 'diff' : settings.max - settings.min, - 'vertical' : settings.direction == 'y', - 'val' : settings.start, - 'handlerect' : geom.rectangle(0, 0, settings.handlesize, settings.handlesize) - }); - } - }); - }, - getval : function(data) { - // returns the slider value - var $this = this; - var settings = $this.data('settings'); - return settings.val; - }, - setval : function(data, val) { - // sets the slider value and moves the handle acordingly - var $this = this; - var settings = $this.data('settings'); - if (val != null) settings.val = val; - var ratio = (settings.val - settings.min) / settings.diff; - var r = settings.rect; - var newpos = settings.vertical - ? geom.position(r.x + r.width / 2, r.y + ratio * r.height) - : geom.position(r.x + ratio * r.width, r.y + r.height / 2); - $this.slider('moveto', newpos); - }, - moveto : function(data, pos, calc) { - // move the handle in response to a mouse position - var $this = this; - var settings = $this.data('settings'); - var r = settings.rect; - var h = settings.handlerect; - var handlepos = r.getCenter(); - if (settings.vertical) { - handlepos.y = Math.min(Math.max(r.y, pos.y), r.y + r.height) - } else { - handlepos.x = Math.min(Math.max(r.x, pos.x), r.x + r.width) - } - h.setCenter(handlepos); - h.adjustDiv(settings.$handle); - if (calc) { - // calculate new slider value - var temp = settings.vertical - ? (handlepos.y - r.y) - : (handlepos.x - r.x); - settings.val = fn.cropFloat(temp * settings.factor + settings.min); - } - if (settings.onmove) { - settings.onmove($this); - } - }, - show : function(data) { - var $this = this; - $this.fadeIn(); - var settings = $this.data('settings'); - // the jquery elements we need - var $body = $('body'); - // some variables for easier calculation - var label = settings.label + ': '; - // calculate positions for the slider elements - var r = geom.rectangle($this); - settings.rect = r; - var v = settings.vertical; - settings.factor = v - ? settings.diff / r.height - : settings.diff / r.width; - var labelpos = geom.position(r.x, r.y + settings.labeloffset); - var minpos = v - ? geom.position(r.x + settings.numberoffset, r.y) - : geom.position(r.x, r.y + settings.numberoffset); - var maxpos = v - ? geom.position(r.x + settings.numberoffset, r.y + r.width) - : geom.position(r.x + r.width - settings.$max.width(), r.y + settings.numberoffset); - // adjust elements - labelpos.adjustDiv(settings.$label); - minpos.adjustDiv(settings.$min); - maxpos.adjustDiv(settings.$max); - // set the handle - $this.slider('setval'); - - // mousedown handler: start sliding - var sliderStart = function (event) { - $body.on("mousemove.slider", sliderMove); - $body.on("mouseup.slider", sliderEnd); - return false; - }; - - // mousemove handler: move slider - var sliderMove = function (event) { - var pos = geom.position(event); - $this.slider('moveto', pos, true); - settings.$label.text(label + settings.val); - return false; - }; - - // mouseup handler: end sliding - var sliderEnd = function (event) { - $body.off("mousemove.slider"); - $body.off("mouseup.slider"); - return false; - }; - - // bind mousedown handler to sliderhandle - settings.$handle.on('mousedown.slider', sliderStart); - console.debug('show slider: ', $this, ' settings:', settings); - }, - destroy : function( ) { - var $this = this; - var settings = $this.data('settings'); - var $handle = settings.$handle; - $handle.off('mousedown.slider'); - $this.fadeOut(function(){ - $this.remove() - }); - } - }; - - // TODO: - // - take start value from a given param - // - set the param after sliding - // - show min/max/current values on slider - $.fn.slider = function( method ) { - if ( methods[method] ) { - // call a method - var $elem = $(this); - var data = $elem.data('digilib'); - var args = Array.prototype.slice.call(arguments, 1); - args.unshift(data); - return methods[method].apply(this, args); - } - else if ( !method || typeof method === 'object' ) { - // call init(), with an optional object containing options - return methods.init.apply( this, arguments ); - } - else { - $.error( 'Method ' + method + ' does not exist on digilib.buttons.slider!' ); - } - }; - }; - - /** creates the HTML structure for a panel div - */ - var setupPanel = function (data) { - var $elem = data.$elem; - var panelClass = data.settings.cssPrefix + 'panel'; - var $panel = $elem.find('.' + panelClass); - // remove panel if it exists already - if ($panel.length > 0) { - $panel.fadeOut(function() { - $panel.remove(); - }); - return null; - } - $panel = $('<div/>'); - $panel.addClass(panelClass); - var $okcancel = setupOkCancel(data); - $panel.append($okcancel); - $elem.append($panel); - return $panel; - }; - - /** creates the HTML structure for a slider div - */ - var setupSlider = function (data, paramname, opts) { - var id = paramname + "-slider"; - var $div = $('#' + id); - if ($div.length == 0) { - // slider not yet created - $div = $('<div/>'); - var options = sliders[paramname]; - if (opts != null) { - $.extend(options, opts); - } - $div.attr('id', paramname + "-slider"); - $div.slider(options); - } - return $div; - }; - - /** creates the HTML structure for a ok and cancel div - */ - var setupOkCancel = function (data) { - var settings = data.settings; - var cssPrefix = settings.cssPrefix; - var html = '\ - <div>\ - <button class="'+cssPrefix+'button" id="'+cssPrefix+'Ok">OK</button>\ - <button class="'+cssPrefix+'button" id="'+cssPrefix+'Cancel">Cancel</button>\ - </div>'; - var $div = $(html); - var handler = function(event) { - var $panel = $(this).parents('.'+cssPrefix+'panel'); - if (event.keyCode == 27 || event.target.id == cssPrefix+'Cancel') { - var callback = $panel.data['cancel']; - if (callback) { - callback(data); - } - } - if (event.keyCode == 13 || event.target.id == cssPrefix+'Ok') { - var callback = $panel.data['ok']; - if (callback) { - callback(data); - } - } - $panel.fadeOut(function() { - $panel.remove(); - }); - return false; - }; - $div.children().on('click', handler); - return $div; - }; - - /** creates HTML structure for the calibration div */ var setupCalibrationDiv = function (data) { @@ -707,7 +326,7 @@ data.calibrationDiv = $calDiv; data.calibrationErrorDiv = $calDiv.find('div.'+cssPrefix+'calibration-error'); data.calibrationInput = $input; - centerOnScreen(data, $calDiv); + fn.centerOnScreen(data, $calDiv); var handler = function(event) { var _data = data; if (event.keyCode == 27 || event.target.id == cssPrefix+'calibrationCancel') {
--- a/webapp/src/main/webapp/jquery/jquery.digilib.js Tue Feb 21 00:08:04 2012 +0100 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.js Wed Feb 29 11:28:42 2012 +0100 @@ -1607,6 +1607,13 @@ return cropFloat(x).toString(); }; + var centerOnScreen = function (data, $div) { + var r = geom.rectangle($div); + var s = fn.getFullscreenRect(data); + r.setCenter(s.getCenter()); + r.adjustDiv($div); + }; + // fallback for console.log calls if (customConsole) { var logFunction = function(type) { @@ -1657,7 +1664,8 @@ getFullscreenRect : getFullscreenRect, getBorderWidth : getBorderWidth, cropFloat : cropFloat, - cropFloatStr : cropFloatStr + cropFloatStr : cropFloatStr, + centerOnScreen : centerOnScreen }; // hook digilib plugin into jquery