comparison client/digitallibrary/jquery/jquery.digilib.js @ 620:b930fa64c684 jquery

scalerImgLoaded sets up img trafo
author robcast
date Mon, 17 Jan 2011 23:57:09 +0100
parents 1035891fb6f1
children 7f97716b901c
comparison
equal deleted inserted replaced
619:1035891fb6f1 620:b930fa64c684
145 // repository url 145 // repository url
146 'reposUrl' : 'http://digilib.berlios.de', 146 'reposUrl' : 'http://digilib.berlios.de',
147 // base URL to Scaler servlet 147 // base URL to Scaler servlet
148 'scalerBaseUrl' : 'http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler', 148 'scalerBaseUrl' : 'http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler',
149 // list of Scaler parameters 149 // list of Scaler parameters
150 'scalerParamNames' : ['fn','pn','dw','dh','ww','wh','wx','wy','ws','mo', 150 'scalerParamNames' : ['fn','pn','dw','dh','ww','wh','wx','wy','ws','mo',
151 'rot','cont','brgt','rgbm','rgba','ddpi','ddpix','ddpiy'], 151 'rot','cont','brgt','rgbm','rgba','ddpi','ddpix','ddpiy'],
152 // Scaler parameter defaults
153 'ww' : 1.0,
154 'wh' : 1.0,
155 'wx' : 0.0,
156 'wy' : 0.0,
157 'ws' : 1.0,
152 // mode of operation. 158 // mode of operation.
153 // fullscreen: takes parameters from page URL, keeps state in page URL 159 // fullscreen: takes parameters from page URL, keeps state in page URL
154 // embedded: takes parameters from Javascript options, keeps state inside object 160 // embedded: takes parameters from Javascript options, keeps state inside object
155 'interactionMode' : 'fullscreen', 161 'interactionMode' : 'fullscreen',
156 // actions 162 // actions
198 } else { 204 } else {
199 elemSettings = $.extend({}, settings, parseImgParams($elem)); 205 elemSettings = $.extend({}, settings, parseImgParams($elem));
200 }; 206 };
201 // store $(this) element in the settings 207 // store $(this) element in the settings
202 elemSettings.digilibRoot = $elem; 208 elemSettings.digilibRoot = $elem;
209 data = {
210 target : $elem,
211 settings : elemSettings
212 };
203 // store in data element 213 // store in data element
204 $elem.data('digilib', { 214 $elem.data('digilib', data);
205 target : $elem,
206 settings : elemSettings
207 });
208 } 215 }
209 // create HTML structure 216 // create HTML structure
210 setupScalerDiv($elem, elemSettings); 217 setupScalerDiv(data);
211 setupButtons($elem, elemSettings, 'actionsStandard'); 218 setupButtons($elem, elemSettings, 'actionsStandard');
212 // bird's eye view creation - could be deferred? 219 // bird's eye view creation - TODO: could be deferred?
213 setupBirdviewDiv($elem, elemSettings); 220 setupBirdviewDiv($elem, elemSettings);
214 // about window creation - could be deferred? restrict to only one item? 221 // about window creation - TODO: could be deferred? restrict to only one item?
215 setupAboutDiv($elem, elemSettings); 222 setupAboutDiv($elem, elemSettings);
216 }); 223 });
217 }, 224 },
218 225
219 // clean up digilib 226 // clean up digilib
311 return null; 318 return null;
312 } 319 }
313 var pos = src.indexOf('?'); 320 var pos = src.indexOf('?');
314 var query = (pos < 0) ? '' : src.substring(pos + 1); 321 var query = (pos < 0) ? '' : src.substring(pos + 1);
315 var scalerUrl = src.substring(0, pos); 322 var scalerUrl = src.substring(0, pos);
316 var hash = parseQueryString(query); 323 var params = parseQueryString(query);
317 hash.scalerBaseUrl = scalerUrl; 324 params.scalerBaseUrl = scalerUrl;
318 // console.log(hash); 325 // console.log(hash);
319 return hash; 326 return params;
320 }; 327 };
321 328
322 // parses query parameter string into parameter object 329 // parses query parameter string into parameter object
323 var parseQueryString = function(query) { 330 var parseQueryString = function(query) {
324 var pairs = query.split("&"); 331 var pairs = query.split("&");
325 var hash = {}; 332 var params = {};
326 for (var i = 0; i < pairs.length; i++) { 333 for (var i = 0; i < pairs.length; i++) {
327 var pair = pairs[i].split("="); 334 var pair = pairs[i].split("=");
328 if (pair.length === 2) { 335 if (pair.length === 2) {
329 hash[pair[0]] = pair[1]; 336 params[pair[0]] = pair[1];
330 }; 337 };
331 }; 338 };
332 return hash; 339 return params;
333 }; 340 };
334 341
335 // returns a query string from key names from a parameter hash 342 // returns a query string from key names from a parameter hash
336 var makeParamString = function (settings, keys) { 343 var makeParamString = function (settings, keys) {
337 var paramString = ''; 344 var paramString = '';
372 $img.attr('src', scalerUrl); 379 $img.attr('src', scalerUrl);
373 // TODO: update bird view? 380 // TODO: update bird view?
374 }; 381 };
375 382
376 // creates HTML structure for digilib in elem 383 // creates HTML structure for digilib in elem
377 var setupScalerDiv = function ($elem, settings) { 384 var setupScalerDiv = function (data) {
385 var settings = data.settings;
386 var $elem = data.target;
378 var $img; 387 var $img;
379 if (settings.interactionMode === 'fullscreen') { 388 if (settings.interactionMode === 'fullscreen') {
380 // fullscreen 389 // fullscreen
381 var imgSize = getFullscreenImgSize($elem); 390 var imgSize = getFullscreenImgSize($elem);
382 settings.dw = imgSize.width; 391 settings.dw = imgSize.width;
398 $elem.empty(); // TODO: should we keep stuff for customization? 407 $elem.empty(); // TODO: should we keep stuff for customization?
399 var $scaler = $('<div class="scaler"/>'); 408 var $scaler = $('<div class="scaler"/>');
400 $elem.append($scaler); 409 $elem.append($scaler);
401 $scaler.append($img); 410 $scaler.append($img);
402 $img.addClass('pic'); 411 $img.addClass('pic');
403 $img.load(scalerImgLoadedFn(settings)); 412 data.img = $img;
413 $img.load(scalerImgLoadedFn(data));
404 }; 414 };
405 415
406 // creates HTML structure for buttons in elem 416 // creates HTML structure for buttons in elem
407 var setupButtons = function ($elem, settings, actionGroup) { 417 var setupButtons = function ($elem, settings, actionGroup) {
408 if (settings.interactionMode === 'fullscreen') { 418 if (settings.interactionMode === 'fullscreen') {
492 $(this).digilib('toggleAboutDiv'); 502 $(this).digilib('toggleAboutDiv');
493 }); 503 });
494 }; 504 };
495 505
496 // returns function for load event of scaler img 506 // returns function for load event of scaler img
497 var scalerImgLoadedFn = function(settings) { 507 var scalerImgLoadedFn = function(data) {
508 var settings = data.settings;
509 var $elem = data.target;
510 var $img = data.img;
511
498 return function() { 512 return function() {
499 console.debug("img loaded! settings=", settings); 513 console.debug("img loaded! this=", this, " data=", data);
514 var area = geom.rectangle(settings.wx, settings.wy, settings.ww, settings.wh);
515 settings.zoomArea = area;
516 // create Transform from current area and picsize
517 var picpos = $img.offset();
518 var picrect = geom.rectangle(picpos.left, picpos.top, $img.width(), $img.height());
519 var trafo = geom.transform();
520 // subtract area offset and size
521 trafo.concat(trafo.getTranslation(geom.position(area.x, area.y)));
522 trafo.concat(trafo.getScale(geom.size(1/area.width, 1/area.height)));
523 // scale to screen size
524 trafo.concat(trafo.getScale(picrect));
525 trafo.concat(trafo.getTranslation(picrect));
526 data.imgTrafo = trafo;
527 // display marks
528 //digilib.renderMarks();
529 //digilib.showBirdDiv(isBirdDivVisible);
530 //digilib.showArrows(); // show arrow overlays for zoom navigation
531
500 }; 532 };
501 }; 533 };
502 // hook plugin into jquery 534 // hook plugin into jquery
503 $.fn.digilib = function(method) { 535 $.fn.digilib = function(method) {
504 if (methods[method]) { 536 if (methods[method]) {