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