# HG changeset patch # User robcast # Date 1297949568 -3600 # Node ID 868c2e795aca0224539e5c3bf76b9369323debef # Parent b9a75079aece2bf48061b8b88b79b72b5e62f143 new plugin architecture. diff -r b9a75079aece -r 868c2e795aca client/digitallibrary/jquery/jquery.digilib.geometry.js --- a/client/digitallibrary/jquery/jquery.digilib.geometry.js Wed Feb 16 14:31:50 2011 +0100 +++ b/client/digitallibrary/jquery/jquery.digilib.geometry.js Thu Feb 17 14:32:48 2011 +0100 @@ -474,12 +474,18 @@ return transform(traf); }; - // export functions to digilib plugin - $.fn.digilib.geometry = { - size : size, - position : position, - rectangle : rectangle, - transform : transform + // export constructor functions to digilib plugin + var init = function () { + return { + size : size, + position : position, + rectangle : rectangle, + transform : transform + }; }; - + if ($.fn.digilib == null) { + $.error("jquery.digilib.geometry must be loaded after jquery.digilib!"); + } else { + $.fn.digilib('plugin', {name : 'geometry', init : init}); + } })(jQuery); diff -r b9a75079aece -r 868c2e795aca client/digitallibrary/jquery/jquery.digilib.js --- a/client/digitallibrary/jquery/jquery.digilib.js Wed Feb 16 14:31:50 2011 +0100 +++ b/client/digitallibrary/jquery/jquery.digilib.js Thu Feb 17 14:32:48 2011 +0100 @@ -251,7 +251,10 @@ 'scalerInset' : 10 }; - // affine geometry classes + // list of plugins + var plugins = {}; + + // affine geometry plugin stub var geom; var FULL_AREA; @@ -259,12 +262,12 @@ var actions = { // init: digilib initialization init : function(options) { - // import geometry classes TODO: move to general plugin mechanism? - if ($.fn.digilib.geometry == null) { - console.error("You should use jquery.digilib.geometry"); + // import geometry classes + if (plugins.geometry == null) { + $.error("jquery.digilib.geometry plugin not found!"); geom = dlGeometry(); } else { - geom = $.fn.digilib.geometry; + geom = plugins.geometry.init(); } FULL_AREA = geom.rectangle(0, 0, 1, 1); @@ -348,6 +351,10 @@ } } } + // initialise plugins + for (p in plugins) { + plugins[p].init(data); + } // get image info from server if needed if (data.scaleMode === 'pixel' || data.scaleMode === 'size') { loadImageInfo(data, updateDisplay); // updateDisplay(data) on completion @@ -1763,8 +1770,13 @@ // hook plugin into jquery $.fn.digilib = function (action) { // plugin extension mechanism - if (action === 'extendPlugin') { - // for each digilib $elem extend data.settings with obj.options + if (action === 'plugin') { + var plugin = arguments[1]; + // each plugin needs a name + if (plugin.name != null) { + plugins[plugin.name] = plugin; + } + /* for each digilib $elem extend data.settings with obj.options // TODO: couldn't other plugins just access $elem.data('digilib')? if (obj.options) { this.each(function() { @@ -1782,7 +1794,7 @@ } // extend the plugin actions (to make this useful, // maybe we need to expose some more internal functions) - $.extend(actions, obj); + $.extend(actions, obj); */ } else if (actions[action]) { // call action on this with the remaining arguments (inserting data as first argument) var $elem = $(this);