comparison client/digitallibrary/jquery/jquery.digilib.js @ 786:868c2e795aca jquery

new plugin architecture.
author robcast
date Thu, 17 Feb 2011 14:32:48 +0100
parents b9a75079aece
children b322f553f92e
comparison
equal deleted inserted replaced
785:b9a75079aece 786:868c2e795aca
249 'maxBgSize' : 10000, 249 'maxBgSize' : 10000,
250 // space to be left free in full page display, default value is for scrollbar 250 // space to be left free in full page display, default value is for scrollbar
251 'scalerInset' : 10 251 'scalerInset' : 10
252 }; 252 };
253 253
254 // affine geometry classes 254 // list of plugins
255 var plugins = {};
256
257 // affine geometry plugin stub
255 var geom; 258 var geom;
256 259
257 var FULL_AREA; 260 var FULL_AREA;
258 261
259 var actions = { 262 var actions = {
260 // init: digilib initialization 263 // init: digilib initialization
261 init : function(options) { 264 init : function(options) {
262 // import geometry classes TODO: move to general plugin mechanism? 265 // import geometry classes
263 if ($.fn.digilib.geometry == null) { 266 if (plugins.geometry == null) {
264 console.error("You should use jquery.digilib.geometry"); 267 $.error("jquery.digilib.geometry plugin not found!");
265 geom = dlGeometry(); 268 geom = dlGeometry();
266 } else { 269 } else {
267 geom = $.fn.digilib.geometry; 270 geom = plugins.geometry.init();
268 } 271 }
269 FULL_AREA = geom.rectangle(0, 0, 1, 1); 272 FULL_AREA = geom.rectangle(0, 0, 1, 1);
270 273
271 // settings for this digilib instance are merged from defaults and options 274 // settings for this digilib instance are merged from defaults and options
272 var settings = $.extend({}, defaults, options); 275 var settings = $.extend({}, defaults, options);
346 var bp = url.indexOf('/servlet/Scaler'); 349 var bp = url.indexOf('/servlet/Scaler');
347 elemSettings.digilibBaseUrl = url.substring(0, bp) + '/digilib.jsp'; 350 elemSettings.digilibBaseUrl = url.substring(0, bp) + '/digilib.jsp';
348 } 351 }
349 } 352 }
350 } 353 }
354 // initialise plugins
355 for (p in plugins) {
356 plugins[p].init(data);
357 }
351 // get image info from server if needed 358 // get image info from server if needed
352 if (data.scaleMode === 'pixel' || data.scaleMode === 'size') { 359 if (data.scaleMode === 'pixel' || data.scaleMode === 'size') {
353 loadImageInfo(data, updateDisplay); // updateDisplay(data) on completion 360 loadImageInfo(data, updateDisplay); // updateDisplay(data) on completion
354 } 361 }
355 // create buttons before scaler 362 // create buttons before scaler
1761 } 1768 }
1762 1769
1763 // hook plugin into jquery 1770 // hook plugin into jquery
1764 $.fn.digilib = function (action) { 1771 $.fn.digilib = function (action) {
1765 // plugin extension mechanism 1772 // plugin extension mechanism
1766 if (action === 'extendPlugin') { 1773 if (action === 'plugin') {
1767 // for each digilib $elem extend data.settings with obj.options 1774 var plugin = arguments[1];
1775 // each plugin needs a name
1776 if (plugin.name != null) {
1777 plugins[plugin.name] = plugin;
1778 }
1779 /* for each digilib $elem extend data.settings with obj.options
1768 // TODO: couldn't other plugins just access $elem.data('digilib')? 1780 // TODO: couldn't other plugins just access $elem.data('digilib')?
1769 if (obj.options) { 1781 if (obj.options) {
1770 this.each(function() { 1782 this.each(function() {
1771 var $elem = $(this); 1783 var $elem = $(this);
1772 // console.debug('extending:', $elem); 1784 // console.debug('extending:', $elem);
1780 }); 1792 });
1781 delete(obj.options); 1793 delete(obj.options);
1782 } 1794 }
1783 // extend the plugin actions (to make this useful, 1795 // extend the plugin actions (to make this useful,
1784 // maybe we need to expose some more internal functions) 1796 // maybe we need to expose some more internal functions)
1785 $.extend(actions, obj); 1797 $.extend(actions, obj); */
1786 } else if (actions[action]) { 1798 } else if (actions[action]) {
1787 // call action on this with the remaining arguments (inserting data as first argument) 1799 // call action on this with the remaining arguments (inserting data as first argument)
1788 var $elem = $(this); 1800 var $elem = $(this);
1789 var data = $elem.data('digilib'); 1801 var data = $elem.data('digilib');
1790 var args = Array.prototype.slice.call(arguments, 1); 1802 var args = Array.prototype.slice.call(arguments, 1);