comparison client/digitallibrary/jquery/jquery.digilib.js @ 607:f5d5cae64828 jquery

parameter parsing
author hertzhaft
date Thu, 13 Jan 2011 19:22:17 +0100
parents aee94e4a8c48
children 774a3f60efd5
comparison
equal deleted inserted replaced
606:8204615dad77 607:f5d5cae64828
7 7
8 var defaults = { 8 var defaults = {
9 /* base URL to Scaler servlet */ 9 /* base URL to Scaler servlet */
10 'scalerUrl' : 'http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler', 10 'scalerUrl' : 'http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler',
11 /* digilib image path i.e. fn */ 11 /* digilib image path i.e. fn */
12 'imagePath' : '', 12 'fn' : '',
13 /* mode of operation. 13 /* mode of operation.
14 * fullscreen: takes parameters from page URL, keeps state in page URL 14 * fullscreen: takes parameters from page URL, keeps state in page URL
15 * embedded: takes parameters from Javascript options, keeps state inside object 15 * embedded: takes parameters from Javascript options, keeps state inside object
16 */ 16 */
17 'interactionMode' : 'fullscreen' 17 'interactionMode' : 'fullscreen'
18 }; 18 };
19 19
20 /* parameters from the query string */ 20 /* parameters from the query string */
21 var params = {}; 21 var queryParams = {};
22 22
23 var methods = { 23 var methods = {
24 init : function(options) { 24 init : function(options) {
25 var settings = $.extend({}, defaults, options);
26 var isFullscreen = settings.interactionMode === 'fullscreen';
27 if (isFullscreen) {
28 queryParams = parseQueryParams();
29 };
25 return this.each(function() { 30 return this.each(function() {
26 var $elem = $(this); 31 var $elem = $(this);
27 var data = $elem.data('digilib'); 32 var data = $elem.data('digilib');
33 var elemSettings;
28 // If the plugin hasn't been initialized yet 34 // If the plugin hasn't been initialized yet
29 if (!data) { 35 if (!data) {
30 // settings for this digilib instance are merged from defaults and options 36 // settings for this digilib instance are merged from defaults and options
31 var settings = $.extend({}, defaults, options);
32 // merge query parameters 37 // merge query parameters
33 settings = $.extend(settings, parseParams(settings.interactionMode)); 38 if (isFullscreen) {
39 elemSettings = $.extend({}, settings, queryParams);
40 } else {
41 elemSettings = $.extend({}, settings, parseImgParams($elem));
42 };
34 // store in data element 43 // store in data element
35 $elem.data('digilib', { 44 $elem.data('digilib', {
36 target : $elem, 45 target : $elem,
37 settings : settings 46 settings : elemSettings
38 }); 47 });
39 } 48 }
40 }); 49 });
41 }, 50 },
42 destroy : function() { 51 destroy : function() {
50 }); 59 });
51 } 60 }
52 }; 61 };
53 62
54 // returns object with parameters from the query string or an embedded img-tag (depending on interactionMode) 63 // returns object with parameters from the query string or an embedded img-tag (depending on interactionMode)
55 var parseParams = function(interactionMode) { 64 var parseQueryParams = function() {
56 alert("parseParams() not implemented"); 65 return parseQueryString(location.search.slice(1));
57 }; 66 };
67
68 var parseImgParams = function($elem) {
69 var src = $elem.children('img').attr('src');
70 var pos = src.indexOf('?');
71 var query = (pos < 0) ? '' : src.substring(pos + 1);
72 var scalerUrl = src.substring(0, pos);
73 var hash = parseQueryString(query);
74 hash.scalerUrl = scalerUrl;
75 // console.log(hash);
76 return hash;
77 };
78
79 var parseQueryString = function(query) {
80 var pairs = query.split("&");
81 var hash = {};
82 for (var i = 0; i < pairs.length; i++) {
83 var pair = pairs[i].split("=");
84 if (pair.length === 2) {
85 hash[pair[0]] = pair[1]
86 };
87 };
88 return hash;
89 };
58 90
59 // hook plugin into jquery 91 // hook plugin into jquery
60 $.fn.digilib = function(method) { 92 $.fn.digilib = function(method) {
61 if (methods[method]) { 93 if (methods[method]) {
62 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 94 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));