annotate client/digitallibrary/jquery/jquery.digilib.js @ 602:c6f62be59683 jquery

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