annotate client/digitallibrary/jquery/jquery.digilib.js @ 609:435f81210a33 jquery

start work on scaler call
author robcast
date Fri, 14 Jan 2011 13:38:36 +0100
parents 774a3f60efd5
children cd9f657d49fa
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 = {
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
9 // base URL to Scaler servlet
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
10 'scalerBaseUrl' : 'http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler',
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
11 // list of Scaler parameters
609
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
12 'scalerParamNames' : ['fn','pn','dw','dh','ww','wh','wx','wy','ws','mo',
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
13 'rot','cont','brgt','rgbm','rgba','ddpi','ddpix','ddpiy'],
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
14 // mode of operation.
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
15 // fullscreen: takes parameters from page URL, keeps state in page URL
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
16 // embedded: takes parameters from Javascript options, keeps state inside object
605
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
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
20 // parameters from the query string
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
21 var queryParams = {};
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
22
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
23 // affine geometry classes
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
24 var geom = dlGeometry();
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
25
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
26 var methods = {
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
27 // digilib initialization
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
28 init : function(options) {
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
29 // settings for this digilib instance are merged from defaults and options
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
30 var settings = $.extend({}, defaults, options);
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
31 var isFullscreen = settings.interactionMode === 'fullscreen';
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
32 if (isFullscreen) {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
33 queryParams = parseQueryParams();
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
34 };
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
35 return this.each(function() {
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
36 var $elem = $(this);
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
37 var data = $elem.data('digilib');
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
38 var elemSettings;
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
39 // if the plugin hasn't been initialized yet
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
40 if (!data) {
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
41 // merge query parameters
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
42 if (isFullscreen) {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
43 elemSettings = $.extend({}, settings, queryParams);
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
44 } else {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
45 elemSettings = $.extend({}, settings, parseImgParams($elem));
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
46 };
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
47 // store in data element
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
48 $elem.data('digilib', {
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
49 target : $elem,
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
50 settings : elemSettings
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
51 });
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
52 }
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
53 // create HTML structure
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
54 setupScalerDiv($elem, elemSettings);
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
55 });
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
56 },
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
57
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
58 // clean up digilib
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
59 destroy : function() {
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
60 return this.each(function(){
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
61 var $this = $(this);
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
62 var data = $this.data('digilib');
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
63 // Namespacing FTW
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
64 $(window).unbind('.digilib'); // unbinds all digilibs(?)
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
65 data.digilib.remove();
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
66 $this.removeData('digilib');
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
67 });
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
68 }
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
69 };
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
70
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
71 // returns parameters from page url
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
72 var parseQueryParams = function() {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
73 return parseQueryString(location.search.slice(1));
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
74 };
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
75
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
76 // returns parameters taken from embedded img-element
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
77 var parseImgParams = function($elem) {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
78 var src = $elem.children('img').attr('src');
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
79 var pos = src.indexOf('?');
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
80 var query = (pos < 0) ? '' : src.substring(pos + 1);
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
81 var scalerUrl = src.substring(0, pos);
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
82 var hash = parseQueryString(query);
609
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
83 hash.scalerBaseUrl = scalerUrl;
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
84 // console.log(hash);
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
85 return hash;
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
86 };
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
87
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
88 // parses query parameter string into parameter object
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
89 var parseQueryString = function(query) {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
90 var pairs = query.split("&");
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
91 var hash = {};
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
92 for (var i = 0; i < pairs.length; i++) {
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
93 var pair = pairs[i].split("=");
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
94 if (pair.length === 2) {
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
95 hash[pair[0]] = pair[1];
607
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
96 };
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
97 };
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
98 return hash;
f5d5cae64828 parameter parsing
hertzhaft
parents: 605
diff changeset
99 };
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
100
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
101 // returns URL and query string for Scaler
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
102 var getScalerString = function (settings) {
609
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
103 var url = settings.scalerBaseUrl + '?';
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
104 var i, parm, latter;
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
105 // go through param names and get values from settings
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
106 for (i = 0; i < settings.scalerParamNames.length; ++i) {
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
107 parm = settings.scalerParamNames[i];
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
108 if (settings[parm]) {
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
109 // first parm gets no '&'
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
110 url += latter ? '&' : '';
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
111 latter = 1;
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
112 // add parm=val
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
113 url += parm + '=' + settings[parm];
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
114 }
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
115 }
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
116 return url;
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
117 };
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
118
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
119 // returns maximum size for scaler img in fullscreen mode
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
120 var getFullscreenImgSize = function($elem) {
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
121 var winH = $(window).height();
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
122 var winW = $(window).width();
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
123 // TODO: account for borders?
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
124 return geom.size(winW, winH);
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
125 };
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
126
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
127 // creates HTML structure for digilib in elem
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
128 var setupScalerDiv = function ($elem, settings) {
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
129 if (settings.interactionMode === 'fullscreen') {
609
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
130 // fullscreen
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
131 var imgSize = getFullscreenImgSize($elem);
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
132 settings.dw = imgSize.width;
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
133 settings.dh = imgSize.height;
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
134 // create new html
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
135 $elem.empty(); // TODO: should we keep stuff for customization?
609
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
136 var scalerUrl = getScalerString(settings);
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
137 var scalerHTML = '<div class="scaler"><img class="pic"/></div>';
609
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
138 $elem.append(scalerHTML);
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
139 var $img = $elem.find("img.pic");
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
140 $img.attr('src', scalerUrl);
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
141 //$img.load(scalerImgLoaded);
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
142 } else {
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
143 // embedded mode -- keep inner img
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
144 var $img = $elem.detach('img');
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
145 $elem.empty(); // TODO: should we keep stuff for customization?
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
146 $img.addClass('pic');
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
147 var $scaler = $('<div class="scaler"/>');
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
148 $scaler.append($img);
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
149 $elem.append($scaler);
435f81210a33 start work on scaler call
robcast
parents: 608
diff changeset
150 //$img.load(scalerImgLoaded);
608
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
151 }
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
152 };
774a3f60efd5 start work on scaler call
robcast
parents: 607
diff changeset
153
605
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
154 // hook plugin into jquery
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
155 $.fn.digilib = function(method) {
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
156 if (methods[method]) {
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
157 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
158 } else if (typeof(method) === 'object' || !method) {
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
159 return methods.init.apply(this, arguments);
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
160 } else {
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
161 $.error( 'Method ' + method + ' does not exist on jQuery.digilib' );
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
162 }
aee94e4a8c48 next version zero of jquery.digilib
robcast
parents: 604
diff changeset
163 };
604
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
164
3a2942d2d5cd version zero of jquery.digilib
robcast
parents:
diff changeset
165 })(jQuery);