annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
1 /*
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
2 * digilib jQuery plugin
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
3 *
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
4 */
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
5
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
6 (function($) {
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
7
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
8 var defaults = {
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
9 /* base URL to Scaler servlet */
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
10 'scalerUrl' : 'http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler',
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
11 /* digilib image path i.e. fn */
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
12 'fn' : '',
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
13 /* mode of operation.
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
14 * fullscreen: takes parameters from page URL, keeps state in page URL
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
15 * embedded: takes parameters from Javascript options, keeps state inside object
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
16 */
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
17 'interactionMode' : 'fullscreen'
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
18 };
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
19
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
20 /* parameters from the query string */
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
21 var queryParams = {};
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
22
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
23 var methods = {
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
24 init : function(options) {
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
25 var settings = $.extend({}, defaults, options);
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
26 var isFullscreen = settings.interactionMode === 'fullscreen';
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
27 if (isFullscreen) {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
28 queryParams = parseQueryParams();
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
29 };
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
30 return this.each(function() {
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
31 var $elem = $(this);
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
32 var data = $elem.data('digilib');
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
33 var elemSettings;
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
34 // If the plugin hasn't been initialized yet
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
35 if (!data) {
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
36 // settings for this digilib instance are merged from defaults and options
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
37 // merge query parameters
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
38 if (isFullscreen) {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
39 elemSettings = $.extend({}, settings, queryParams);
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
40 } else {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
41 elemSettings = $.extend({}, settings, parseImgParams($elem));
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
42 };
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
43 // store in data element
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
44 $elem.data('digilib', {
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
45 target : $elem,
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
46 settings : elemSettings
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
47 });
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
48 }
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
49 });
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
50 },
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
51 destroy : function() {
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
52 return this.each(function(){
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
53 var $this = $(this);
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
54 var data = $this.data('digilib');
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
55 // Namespacing FTW
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
56 $(window).unbind('.digilib'); // unbinds all digilibs(?)
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
57 data.digilib.remove();
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
58 $this.removeData('digilib');
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
59 });
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
60 }
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
61 };
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
62
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
63 // returns object with parameters from the query string or an embedded img-tag (depending on interactionMode)
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
64 var parseQueryParams = function() {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
65 return parseQueryString(location.search.slice(1));
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
66 };
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
67
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
68 var parseImgParams = function($elem) {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
69 var src = $elem.children('img').attr('src');
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
70 var pos = src.indexOf('?');
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
71 var query = (pos < 0) ? '' : src.substring(pos + 1);
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
72 var scalerUrl = src.substring(0, pos);
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
73 var hash = parseQueryString(query);
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
74 hash.scalerUrl = scalerUrl;
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
75 // console.log(hash);
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
76 return hash;
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
77 };
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
78
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
79 var parseQueryString = function(query) {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
80 var pairs = query.split("&");
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
81 var hash = {};
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
82 for (var i = 0; i < pairs.length; i++) {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
83 var pair = pairs[i].split("=");
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
84 if (pair.length === 2) {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
85 hash[pair[0]] = pair[1]
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
86 };
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
87 };
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
88 return hash;
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
89 };
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
90
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
91 // hook plugin into jquery
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
92 $.fn.digilib = function(method) {
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
93 if (methods[method]) {
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
94 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
95 } else if (typeof(method) === 'object' || !method) {
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
96 return methods.init.apply(this, arguments);
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
97 } else {
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
98 $.error( 'Method ' + method + ' does not exist on jQuery.digilib' );
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
99 }
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
100 };
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
101
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
102 })(jQuery);