comparison client/digitallibrary/jquery/jquery.digilib.js @ 608:774a3f60efd5 jquery

start work on scaler call
author robcast
date Fri, 14 Jan 2011 11:23:56 +0100
parents f5d5cae64828
children 435f81210a33
comparison
equal deleted inserted replaced
607:f5d5cae64828 608:774a3f60efd5
4 */ 4 */
5 5
6 (function($) { 6 (function($) {
7 7
8 var defaults = { 8 var defaults = {
9 /* base URL to Scaler servlet */ 9 // base URL to Scaler servlet
10 'scalerUrl' : 'http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler', 10 'scalerBaseUrl' : 'http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler',
11 /* digilib image path i.e. fn */ 11 // list of Scaler parameters
12 'scalerParamNames' : ['fn','pn','dw','dh','ww','wh','wx','wy','ws','mo'],
13 // digilib image path
12 'fn' : '', 14 'fn' : '',
13 /* mode of operation. 15 // mode of operation.
14 * fullscreen: takes parameters from page URL, keeps state in page URL 16 // fullscreen: takes parameters from page URL, keeps state in page URL
15 * embedded: takes parameters from Javascript options, keeps state inside object 17 // embedded: takes parameters from Javascript options, keeps state inside object
16 */
17 'interactionMode' : 'fullscreen' 18 'interactionMode' : 'fullscreen'
18 }; 19 };
19 20
20 /* parameters from the query string */ 21 // parameters from the query string
21 var queryParams = {}; 22 var queryParams = {};
23
24 // affine geometry classes
25 var geom = dlGeometry();
22 26
23 var methods = { 27 var methods = {
28 // digilib initialization
24 init : function(options) { 29 init : function(options) {
30 // settings for this digilib instance are merged from defaults and options
25 var settings = $.extend({}, defaults, options); 31 var settings = $.extend({}, defaults, options);
26 var isFullscreen = settings.interactionMode === 'fullscreen'; 32 var isFullscreen = settings.interactionMode === 'fullscreen';
27 if (isFullscreen) { 33 if (isFullscreen) {
28 queryParams = parseQueryParams(); 34 queryParams = parseQueryParams();
29 }; 35 };
30 return this.each(function() { 36 return this.each(function() {
31 var $elem = $(this); 37 var $elem = $(this);
32 var data = $elem.data('digilib'); 38 var data = $elem.data('digilib');
33 var elemSettings; 39 var elemSettings;
34 // If the plugin hasn't been initialized yet 40 // if the plugin hasn't been initialized yet
35 if (!data) { 41 if (!data) {
36 // settings for this digilib instance are merged from defaults and options
37 // merge query parameters 42 // merge query parameters
38 if (isFullscreen) { 43 if (isFullscreen) {
39 elemSettings = $.extend({}, settings, queryParams); 44 elemSettings = $.extend({}, settings, queryParams);
40 } else { 45 } else {
41 elemSettings = $.extend({}, settings, parseImgParams($elem)); 46 elemSettings = $.extend({}, settings, parseImgParams($elem));
44 $elem.data('digilib', { 49 $elem.data('digilib', {
45 target : $elem, 50 target : $elem,
46 settings : elemSettings 51 settings : elemSettings
47 }); 52 });
48 } 53 }
54 // create HTML structure
55 setupScalerDiv($elem, elemSettings);
49 }); 56 });
50 }, 57 },
58
59 // clean up digilib
51 destroy : function() { 60 destroy : function() {
52 return this.each(function(){ 61 return this.each(function(){
53 var $this = $(this); 62 var $this = $(this);
54 var data = $this.data('digilib'); 63 var data = $this.data('digilib');
55 // Namespacing FTW 64 // Namespacing FTW
58 $this.removeData('digilib'); 67 $this.removeData('digilib');
59 }); 68 });
60 } 69 }
61 }; 70 };
62 71
63 // returns object with parameters from the query string or an embedded img-tag (depending on interactionMode) 72 // returns parameters from page url
64 var parseQueryParams = function() { 73 var parseQueryParams = function() {
65 return parseQueryString(location.search.slice(1)); 74 return parseQueryString(location.search.slice(1));
66 }; 75 };
67 76
77 // returns parameters taken from embedded img-element
68 var parseImgParams = function($elem) { 78 var parseImgParams = function($elem) {
69 var src = $elem.children('img').attr('src'); 79 var src = $elem.children('img').attr('src');
70 var pos = src.indexOf('?'); 80 var pos = src.indexOf('?');
71 var query = (pos < 0) ? '' : src.substring(pos + 1); 81 var query = (pos < 0) ? '' : src.substring(pos + 1);
72 var scalerUrl = src.substring(0, pos); 82 var scalerUrl = src.substring(0, pos);
74 hash.scalerUrl = scalerUrl; 84 hash.scalerUrl = scalerUrl;
75 // console.log(hash); 85 // console.log(hash);
76 return hash; 86 return hash;
77 }; 87 };
78 88
89 // parses query parameter string into parameter object
79 var parseQueryString = function(query) { 90 var parseQueryString = function(query) {
80 var pairs = query.split("&"); 91 var pairs = query.split("&");
81 var hash = {}; 92 var hash = {};
82 for (var i = 0; i < pairs.length; i++) { 93 for (var i = 0; i < pairs.length; i++) {
83 var pair = pairs[i].split("="); 94 var pair = pairs[i].split("=");
84 if (pair.length === 2) { 95 if (pair.length === 2) {
85 hash[pair[0]] = pair[1] 96 hash[pair[0]] = pair[1];
86 }; 97 };
87 }; 98 };
88 return hash; 99 return hash;
89 }; 100 };
90 101
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
91 // hook plugin into jquery 119 // hook plugin into jquery
92 $.fn.digilib = function(method) { 120 $.fn.digilib = function(method) {
93 if (methods[method]) { 121 if (methods[method]) {
94 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); 122 return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
95 } else if (typeof(method) === 'object' || !method) { 123 } else if (typeof(method) === 'object' || !method) {