# HG changeset patch # User hertzhaft # Date 1332746126 -7200 # Node ID ad769aaea7593c4d3172e737b3b7cc7093e3252c # Parent 301ef9bf1965e6d2b49a45af7a78355d09df3223 adapt digilibSVG plugin to new plugin architecture diff -r 301ef9bf1965 -r ad769aaea759 webapp/src/main/webapp/jquery/jquery-test-svg.html --- a/webapp/src/main/webapp/jquery/jquery-test-svg.html Mon Mar 26 08:18:40 2012 +0200 +++ b/webapp/src/main/webapp/jquery/jquery-test-svg.html Mon Mar 26 09:15:26 2012 +0200 @@ -4,39 +4,41 @@ jQuery.digilibSVG test - - + + + + + + + + + - - -
- +
+

digilib doesn't work! Please switch on Javascript or notify the server administrator!

+
DEBUG
diff -r 301ef9bf1965 -r ad769aaea759 webapp/src/main/webapp/jquery/jquery.digilib.dialogs.js --- a/webapp/src/main/webapp/jquery/jquery.digilib.dialogs.js Mon Mar 26 08:18:40 2012 +0200 +++ b/webapp/src/main/webapp/jquery/jquery.digilib.dialogs.js Mon Mar 26 09:15:26 2012 +0200 @@ -69,7 +69,6 @@ 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; diff -r 301ef9bf1965 -r ad769aaea759 webapp/src/main/webapp/jquery/svg/jquery.digilibSVG.js --- a/webapp/src/main/webapp/jquery/svg/jquery.digilibSVG.js Mon Mar 26 08:18:40 2012 +0200 +++ b/webapp/src/main/webapp/jquery/svg/jquery.digilibSVG.js Mon Mar 26 09:15:26 2012 +0200 @@ -36,10 +36,13 @@ } (function($) { - console.debug('installing jquery.digilibSVG'); - var pluginName = 'digilibSVG'; - var geom; + // plugin object with digilib data + var digilib = null; + // the functions made available by digilib + var fn = null; + // affine geometry plugin + var geom = null; var defaults = { // choice of colors offered by toolbar @@ -99,6 +102,46 @@ gridCopies : 10 }; + var actions = { + "test" : function(options) { + var onLoadXML = function (xml) { + settings.xml = xml; + settings.$toolBar = setupToolBar(settings); + $digilib.each(function() { + var $elem = $(this); + $elem.data(pluginName, settings); + }); + }; + var onLoadScalerImg = function () { + var $svgDiv = $('
'); + $('body').append($svgDiv); + // size SVG div like scaler img + var $scalerImg = $digilib.find('img.pic'); + var scalerImgRect = geom.rectangle($scalerImg); + scalerImgRect.adjustDiv($svgDiv); + console.debug('$svgDiv', scalerImgRect); + var $svg = $svgDiv.svg({ + 'onLoad' : drawInitial + }); + settings.$elem = $digilib; + settings.$svgDiv = $svgDiv; + settings.$svg = $svg; + // set SVG data + $svg.data('digilib', data); + $svg.data(pluginName, settings); + }; + // fetch the XML measuring unit list + $.ajax({ + type : "GET", + url : "svg/archimedes.xml", + dataType : "xml", + success : onLoadXML + }); + data.$img.load(onLoadScalerImg); + return this; + } + }; + // setup a div for accessing the main SVG functionality var setupToolBar = function(settings) { var $toolBar = $('
'); @@ -174,72 +217,48 @@ {stroke: 'red', strokeWidth: 2}); }; - var actions = { - "init" : function(options) { - var $digilib = this; - var data = $digilib.data('digilib'); - var plugins = data.plugins; - geom = plugins.geometry.init(); - var settings = $.extend({}, defaults, options); - // prepare the AJAX callback - // TODO: return unless interactiveMode === 'fullscreen'? - var onLoadXML = function (xml) { - settings.xml = xml; - settings.$toolBar = setupToolBar(settings); - $digilib.each(function() { - var $elem = $(this); - $elem.data(pluginName, settings); - }); - }; - var onLoadScalerImg = function () { - var $svgDiv = $('
'); - $('body').append($svgDiv); - // size SVG div like scaler img - var $scalerImg = $digilib.find('img.pic'); - var scalerImgRect = geom.rectangle($scalerImg); - scalerImgRect.adjustDiv($svgDiv); - console.debug('$svgDiv', scalerImgRect); - var $svg = $svgDiv.svg({ - 'onLoad' : drawInitial - }); - settings.$elem = $digilib; - settings.$svgDiv = $svgDiv; - settings.$svg = $svg; - // set SVG data - $svg.data('digilib', data); - $svg.data(pluginName, settings); - }; - // fetch the XML measuring unit list - $.ajax({ - type : "GET", - url : "svg/archimedes.xml", - dataType : "xml", - success : onLoadXML - }); - data.$img.load(onLoadScalerImg); - return this; - } - }; + // plugin installation called by digilib on plugin object. + var install = function (plugin) { + digilib = plugin; + console.debug('installing digilibSVG plugin. digilib:', digilib); + fn = digilib.fn; + // import geometry classes + geom = fn.geometry; + // add defaults, actions, buttons + $.extend(true, digilib.defaults, defaults); // make deep copy + $.extend(digilib.actions, actions); + // export functions + // fn.test = test; + }; - // hook plugin into jquery - $.fn[pluginName] = function(action) { - if (actions[action]) { - // call action on this with the remaining arguments (inserting data as first argument) - var $elem = $(this); - var data = $elem.data('digilib'); - if (!data) { - return $.error(pluginName + ' action ' + action + ' needs a digilib element'); - } - var args = Array.prototype.slice.call(arguments, 1); - args.unshift(data); - return actions[action].apply(this, args); - } else if (typeof(action) === 'object' || !action) { - // call init on this - return actions.init.apply(this, arguments); - } else { - $.error('action ' + action + ' does not exist on jQuery.' + pluginName); - } + // plugin initialization + var init = function (data) { + console.debug('initialising digilibSVG plugin. data:', data); + var $data = $(data); + $data.bind('setup', handleSetup); }; + var handleSetup = function (evt) { + console.debug("digilibSVG: handleSetup"); + var data = this; + var settings = data.settings; + }; + + // plugin object with name and init + // shared objects filled by digilib on registration + var plugin = { + name : 'digilibSVG', + install : install, + init : init, + buttons : {}, + actions : {}, + fn : {}, + plugins : {} + }; + + if ($.fn.digilib == null) { + $.error("jquery.digilibSVG must be loaded after jquery.digilib!"); + } else { + $.fn.digilib('plugin', plugin); + } })(jQuery); -