annotate client/digitallibrary/jquery/jquery.digilib.js @ 601:4da7592149e7 jquery

start work on scaler call
author robcast
date Fri, 14 Jan 2011 11:23:56 +0100
parents 9da729b90004
children c6f62be59683
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
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
12 'scalerParamNames' : ['fn','pn','dw','dh','ww','wh','wx','wy','ws','mo'],
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
13 // digilib image path
600
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
14 'fn' : '',
601
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
15 // mode of operation.
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
16 // fullscreen: takes parameters from page URL, keeps state in page URL
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
17 // embedded: takes parameters from Javascript options, keeps state inside object
598
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
18 'interactionMode' : 'fullscreen'
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
19 };
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
20
601
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
21 // parameters from the query string
600
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
22 var queryParams = {};
601
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
23
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
24 // affine geometry classes
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
25 var geom = dlGeometry();
597
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
26
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
27 var methods = {
601
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
28 // digilib initialization
597
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
29 init : function(options) {
601
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
30 // settings for this digilib instance are merged from defaults and options
600
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
31 var settings = $.extend({}, defaults, options);
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
32 var isFullscreen = settings.interactionMode === 'fullscreen';
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
33 if (isFullscreen) {
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
34 queryParams = parseQueryParams();
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
35 };
597
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
36 return this.each(function() {
598
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
37 var $elem = $(this);
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
38 var data = $elem.data('digilib');
600
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
39 var elemSettings;
601
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
40 // if the plugin hasn't been initialized yet
597
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
41 if (!data) {
598
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
42 // merge query parameters
600
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
43 if (isFullscreen) {
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
44 elemSettings = $.extend({}, settings, queryParams);
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
45 } else {
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
46 elemSettings = $.extend({}, settings, parseImgParams($elem));
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
47 };
598
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
48 // store in data element
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
49 $elem.data('digilib', {
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
50 target : $elem,
600
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
51 settings : elemSettings
597
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
52 });
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
53 }
601
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
54 // create HTML structure
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
55 setupScalerDiv($elem, elemSettings);
597
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
56 });
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
57 },
601
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
58
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
59 // clean up digilib
597
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
60 destroy : function() {
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
61 return this.each(function(){
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
62 var $this = $(this);
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
63 var data = $this.data('digilib');
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
64 // Namespacing FTW
598
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
65 $(window).unbind('.digilib'); // unbinds all digilibs(?)
597
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
66 data.digilib.remove();
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
67 $this.removeData('digilib');
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
68 });
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
69 }
598
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
70 };
597
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
71
601
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
72 // returns parameters from page url
600
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
73 var parseQueryParams = function() {
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
74 return parseQueryString(location.search.slice(1));
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
75 };
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
76
601
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
77 // returns parameters taken from embedded img-element
600
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
78 var parseImgParams = function($elem) {
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
79 var src = $elem.children('img').attr('src');
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
80 var pos = src.indexOf('?');
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
81 var query = (pos < 0) ? '' : src.substring(pos + 1);
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
82 var scalerUrl = src.substring(0, pos);
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
83 var hash = parseQueryString(query);
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
84 hash.scalerUrl = scalerUrl;
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
85 // console.log(hash);
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
86 return hash;
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
87 };
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
88
601
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
89 // parses query parameter string into parameter object
600
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
90 var parseQueryString = function(query) {
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
91 var pairs = query.split("&");
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
92 var hash = {};
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
93 for (var i = 0; i < pairs.length; i++) {
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
94 var pair = pairs[i].split("=");
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
95 if (pair.length === 2) {
601
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
96 hash[pair[0]] = pair[1];
600
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
97 };
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
98 };
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
99 return hash;
9da729b90004 parameter parsing
hertzhaft
parents: 598
diff changeset
100 };
597
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
101
601
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
102 // returns URL and query string for Scaler
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
103 var getScalerString = function (settings) {
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
104 var url = settings.scalerUrl;
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
105
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
106 };
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
107
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
108 // creates HTML structure for digilib in elem
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
109 var setupScalerDiv = function ($elem, settings) {
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
110 if (settings.interactionMode === 'fullscreen') {
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
111 // fullscreen -- create new
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
112 $elem.empty(); // TODO: should we keep stuff for customization?
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
113 var scalerHTML = '<div class="scaler"><img class="pic"/></div>';
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
114 $elem.add(scalerHTML);
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
115
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
116 }
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
117 };
4da7592149e7 start work on scaler call
robcast
parents: 600
diff changeset
118
598
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
119 // hook plugin into jquery
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
120 $.fn.digilib = function(method) {
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
121 if (methods[method]) {
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
122 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
123 } else if (typeof(method) === 'object' || !method) {
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
124 return methods.init.apply(this, arguments);
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
125 } else {
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
126 $.error( 'Method ' + method + ' does not exist on jQuery.digilib' );
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
127 }
81723e7efe82 next version zero of jquery.digilib
robcast
parents: 597
diff changeset
128 };
597
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
129
33605dd3e9c6 version zero of jquery.digilib
robcast
parents:
diff changeset
130 })(jQuery);