comparison client/digitallibrary/jquery/jquery.digilib.js @ 785:b9a75079aece jquery

geometry as first digilib plugin. special case that only exports classes.
author robcast
date Wed, 16 Feb 2011 14:31:50 +0100
parents dde58c15bbd2
children 868c2e795aca
comparison
equal deleted inserted replaced
784:dde58c15bbd2 785:b9a75079aece
18 */ 18 */
19 19
20 /** 20 /**
21 * digilib jQuery plugin 21 * digilib jQuery plugin
22 **/ 22 **/
23
24 /*requires dlGeometry.js */
25 23
26 /*jslint browser: true, debug: true, forin: true 24 /*jslint browser: true, debug: true, forin: true
27 */ 25 */
28 26
29 // fallback for console.log calls 27 // fallback for console.log calls
248 // is the "about" window shown? 246 // is the "about" window shown?
249 'isAboutDivVisible' : false, 247 'isAboutDivVisible' : false,
250 // maximum width of background image for drag-scroll 248 // maximum width of background image for drag-scroll
251 'maxBgSize' : 10000, 249 'maxBgSize' : 10000,
252 // 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
253 'scalerInset' : 10, 251 'scalerInset' : 10
254 }; 252 };
255 253
256 // affine geometry classes 254 // affine geometry classes
257 var geom = dlGeometry(); 255 var geom;
258 256
259 var FULL_AREA = geom.rectangle(0, 0, 1, 1); 257 var FULL_AREA;
260 258
261 var actions = { 259 var actions = {
262 // init: digilib initialization 260 // init: digilib initialization
263 init : function(options) { 261 init : function(options) {
262 // import geometry classes TODO: move to general plugin mechanism?
263 if ($.fn.digilib.geometry == null) {
264 console.error("You should use jquery.digilib.geometry");
265 geom = dlGeometry();
266 } else {
267 geom = $.fn.digilib.geometry;
268 }
269 FULL_AREA = geom.rectangle(0, 0, 1, 1);
270
264 // settings for this digilib instance are merged from defaults and options 271 // settings for this digilib instance are merged from defaults and options
265 var settings = $.extend({}, defaults, options); 272 var settings = $.extend({}, defaults, options);
266 var isFullscreen = settings.interactionMode === 'fullscreen'; 273 var isFullscreen = settings.interactionMode === 'fullscreen';
267 var queryParams = {}; 274 var queryParams = {};
268 if (isFullscreen) { 275 if (isFullscreen) {
290 // merge query parameters 297 // merge query parameters
291 if (isFullscreen) { 298 if (isFullscreen) {
292 params = queryParams; 299 params = queryParams;
293 } else { 300 } else {
294 params = parseImgParams($elem); 301 params = parseImgParams($elem);
295 if (jQuery.cookie) { 302 if ($.cookie) {
296 // retrieve params from cookie 303 // retrieve params from cookie
297 var ck = "digilib-embed:fn:" + escape(params.fn) + ":pn:" + (params.pn || '1'); 304 var ck = "digilib-embed:fn:" + escape(params.fn) + ":pn:" + (params.pn || '1');
298 var cs = jQuery.cookie(ck); 305 var cs = $.cookie(ck);
299 console.debug("get cookie=", ck, " value=", cs); 306 console.debug("get cookie=", ck, " value=", cs);
300 if (cs) { 307 if (cs) {
301 var cp = parseQueryString(cs); 308 var cp = parseQueryString(cs);
302 // ignore fn and pn from cookie TODO: should we keep pn? 309 // ignore fn and pn from cookie TODO: should we keep pn?
303 delete cp.fn; 310 delete cp.fn;
304 delete cp.pn; 311 delete cp.pn;
305 jQuery.extend(params, cp); 312 $.extend(params, cp);
306 } 313 }
307 } 314 }
308 } 315 }
309 // store $(this) element in the settings 316 // store $(this) element in the settings
310 elemSettings = jQuery.extend({}, settings, params); 317 elemSettings = $.extend({}, settings, params);
311 data = { 318 data = {
312 $elem : $elem, 319 $elem : $elem,
313 settings : elemSettings, 320 settings : elemSettings,
314 queryParams : params 321 queryParams : params
315 }; 322 };
700 var settings = data.settings; 707 var settings = data.settings;
701 var birdDivOptions = { 708 var birdDivOptions = {
702 dw : settings.birdDivWidth, 709 dw : settings.birdDivWidth,
703 dh : settings.birdDivHeight 710 dh : settings.birdDivHeight
704 }; 711 };
705 var birdSettings = jQuery.extend({}, settings, birdDivOptions); 712 var birdSettings = $.extend({}, settings, birdDivOptions);
706 // use only the relevant parameters 713 // use only the relevant parameters
707 if (moreParams == null) { 714 if (moreParams == null) {
708 var params = getParamString(birdSettings, settings.birdDivParams, defaults); 715 var params = getParamString(birdSettings, settings.birdDivParams, defaults);
709 } else { 716 } else {
710 // filter scaler flags 717 // filter scaler flags
738 var settings = data.settings; 745 var settings = data.settings;
739 var p = settings.scalerBaseUrl.indexOf('/servlet/Scaler'); 746 var p = settings.scalerBaseUrl.indexOf('/servlet/Scaler');
740 var url = settings.scalerBaseUrl.substring(0, p) + '/ImgInfo-json.jsp'; 747 var url = settings.scalerBaseUrl.substring(0, p) + '/ImgInfo-json.jsp';
741 url += '?' + getParamString(settings, ['fn', 'pn'], defaults); 748 url += '?' + getParamString(settings, ['fn', 'pn'], defaults);
742 // TODO: better error handling 749 // TODO: better error handling
743 jQuery.getJSON(url, function (json) { 750 $.getJSON(url, function (json) {
744 console.debug("got json data=", json); 751 console.debug("got json data=", json);
745 data.imgInfo = json; 752 data.imgInfo = json;
746 if (complete != null) { 753 if (complete != null) {
747 complete.call(this, data, json); 754 complete.call(this, data, json);
748 } 755 }
833 if (clop) { 840 if (clop) {
834 clop += '&'; 841 clop += '&';
835 } 842 }
836 clop += o + '=' + data.dlOpts[o]; 843 clop += o + '=' + data.dlOpts[o];
837 } 844 }
838 if (jQuery.cookie) { 845 if ($.cookie) {
839 var ck = "digilib:fn:" + escape(settings.fn) + ":pn:" + settings.pn; 846 var ck = "digilib:fn:" + escape(settings.fn) + ":pn:" + settings.pn;
840 console.debug("set cookie=", ck, " value=", clop); 847 console.debug("set cookie=", ck, " value=", clop);
841 jQuery.cookie(ck, clop); 848 $.cookie(ck, clop);
842 } 849 }
843 } 850 }
844 if (settings.interactionMode !== 'fullscreen' && jQuery.cookie) { 851 if (settings.interactionMode !== 'fullscreen' && $.cookie) {
845 // store normal parameters in cookie for embedded mode 852 // store normal parameters in cookie for embedded mode
846 var qs = getParamString(settings, settings.digilibParamNames, defaults); 853 var qs = getParamString(settings, settings.digilibParamNames, defaults);
847 var ck = "digilib-embed:fn:" + escape(settings.fn) + ":pn:" + settings.pn; 854 var ck = "digilib-embed:fn:" + escape(settings.fn) + ":pn:" + settings.pn;
848 console.debug("set cookie=", ck, " value=", qs); 855 console.debug("set cookie=", ck, " value=", qs);
849 jQuery.cookie(ck, qs); 856 $.cookie(ck, qs);
850 } 857 }
851 }; 858 };
852 859
853 var retrieveOptions = function (data) { 860 var retrieveOptions = function (data) {
854 // clop (digilib options) 861 // clop (digilib options)
855 var opts = {}; 862 var opts = {};
856 var settings = data.settings; 863 var settings = data.settings;
857 if (jQuery.cookie) { 864 if ($.cookie) {
858 // read from cookie 865 // read from cookie
859 var ck = "digilib:fn:" + escape(settings.fn) + ":pn:" + settings.pn; 866 var ck = "digilib:fn:" + escape(settings.fn) + ":pn:" + settings.pn;
860 var cp = jQuery.cookie(ck); 867 var cp = $.cookie(ck);
861 console.debug("get cookie=", ck, " value=", cp); 868 console.debug("get cookie=", ck, " value=", cp);
862 // in query string format 869 // in query string format
863 opts = parseQueryString(cp); 870 opts = parseQueryString(cp);
864 } 871 }
865 data.dlOpts = opts; 872 data.dlOpts = opts;
1752 console.debug = logFunction('_debug'); 1759 console.debug = logFunction('_debug');
1753 console.error = logFunction('_error'); 1760 console.error = logFunction('_error');
1754 } 1761 }
1755 1762
1756 // hook plugin into jquery 1763 // hook plugin into jquery
1757 $.fn.digilib = function(action) { 1764 $.fn.digilib = function (action) {
1758 // plugin extension mechanism 1765 // plugin extension mechanism
1759 if (action === 'extendPlugin') { 1766 if (action === 'extendPlugin') {
1760 // for each digilib $elem extend data.settings with obj.options 1767 // for each digilib $elem extend data.settings with obj.options
1761 // TODO: couldn't other plugins just access $elem.data('digilib')? 1768 // TODO: couldn't other plugins just access $elem.data('digilib')?
1762 if (obj.options) { 1769 if (obj.options) {