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