comparison webapp/src/main/webapp/jquery/jquery.digilib.js @ 954:36102de2301e

code cosmetics
author robcast
date Wed, 04 Jan 2012 14:26:55 +0100
parents 3d5e7458f9ae
children c8c441d1d7a0
comparison
equal deleted inserted replaced
953:3d5e7458f9ae 954:36102de2301e
87 'zoomArrowWidth' : 32, 87 'zoomArrowWidth' : 32,
88 // by what percentage should the arrows move the zoomed area? 88 // by what percentage should the arrows move the zoomed area?
89 'zoomArrowMoveFactor' : 0.5, 89 'zoomArrowMoveFactor' : 0.5,
90 // is the "about" window shown? 90 // is the "about" window shown?
91 'isAboutDivVisible' : false, 91 'isAboutDivVisible' : false,
92 // default size of background image for drag-scroll (same as Bird's Eye View image) 92 // default size of preview image for drag-scroll (same as Bird's Eye View image)
93 'bgImgWidth' : 200, 93 'previewImgWidth' : 200,
94 'bgImgHeight' : 200, 94 'previewImgHeight' : 200,
95 // maximum width or height of background image for drag-scroll 95 // maximum width or height of preview background image for drag-scroll
96 'maxBgSize' : 10000, 96 'maxBgSize' : 10000,
97 // parameters used by background image 97 // parameters used by background image
98 'bgImgParamNames' : ['fn','pn','dw','dh','mo','rot'], 98 'previewImgParamNames' : ['fn','pn','dw','dh','mo','rot'],
99 // reserved space in full page display (default value accounts for vertical scrollbar) 99 // reserved space in full page display (default value accounts for vertical scrollbar)
100 'scalerInset' : 10 100 'scalerInset' : 10
101 }; 101 };
102 102
103 // list of plugins 103 // list of plugins
112 var EPSILON = 0.0001; 112 var EPSILON = 0.0001;
113 // list of buttons 113 // list of buttons
114 var buttons = {}; 114 var buttons = {};
115 115
116 var actions = { 116 var actions = {
117 // init: digilib initialization 117
118 /** init: digilib initialization
119 *
120 * @param options
121 * @returns
122 */
118 init : function(options) { 123 init : function(options) {
119 // import geometry classes 124 // import geometry classes
120 if (plugins.geometry == null) { 125 if (plugins.geometry == null) {
121 $.error("jquery.digilib.geometry plugin not found!"); 126 $.error("jquery.digilib.geometry plugin not found!");
122 // last straw: old version 127 // last straw: old version
243 // send setup event 248 // send setup event
244 $(data).trigger('setup'); 249 $(data).trigger('setup');
245 }); 250 });
246 }, 251 },
247 252
248 // destroy: clean up digilib 253 /** destroy: clean up digilib
254 *
255 * @param data
256 * @returns
257 */
249 destroy : function(data) { 258 destroy : function(data) {
250 return this.each(function(){ 259 return this.each(function(){
251 var $elem = $(this); 260 var $elem = $(this);
252 $(window).off('.digilib'); // unbind all digilibs(?) 261 $(window).off('.digilib'); // unbind all digilibs(?)
253 data.digilib.remove(); 262 data.digilib.remove();
254 $elem.removeData('digilib'); 263 $elem.removeData('digilib');
255 }); 264 });
256 }, 265 },
257 266
258 // show or hide the 'about' window 267 /** show or hide the 'about' window
268 *
269 * @param data
270 * @param show
271 */
259 showAboutDiv : function(data, show) { 272 showAboutDiv : function(data, show) {
260 var on = showDiv(data.settings.isAboutDivVisible, data.$aboutDiv, show); 273 var on = showDiv(data.settings.isAboutDivVisible, data.$aboutDiv, show);
261 data.settings.isAboutDivVisible = on; 274 data.settings.isAboutDivVisible = on;
262 //FIXME: highlightButtons(data, 'help', on); 275 //FIXME: highlightButtons(data, 'help', on);
263 }, 276 },
264 277
265 // goto given page nr (+/-: relative) 278 /** goto given page nr (+/-: relative)
279 *
280 * @param data
281 * @param pageNr
282 * @returns {Boolean}
283 */
266 gotoPage : function (data, pageNr) { 284 gotoPage : function (data, pageNr) {
267 var settings = data.settings; 285 var settings = data.settings;
268 var oldpn = settings.pn; 286 var oldpn = settings.pn;
269 if (pageNr == null) { 287 if (pageNr == null) {
270 pageNr = window.prompt("Goto page number", oldpn); 288 pageNr = window.prompt("Goto page number", oldpn);
289 data.zoomArea = FULL_AREA.copy(); 307 data.zoomArea = FULL_AREA.copy();
290 // then reload 308 // then reload
291 redisplay(data); 309 redisplay(data);
292 }, 310 },
293 311
294 // zoom by a given factor 312 /** zoom by a given factor
313 *
314 * @param data
315 * @param factor
316 */
295 zoomBy : function (data, factor) { 317 zoomBy : function (data, factor) {
296 zoomBy(data, factor); 318 zoomBy(data, factor);
297 }, 319 },
298 320
299 // zoom to area (or interactive) 321 /** zoom to area (or interactive)
322 *
323 * @param data
324 * @param area
325 */
300 zoomArea : function (data, area) { 326 zoomArea : function (data, area) {
301 if (area == null) { 327 if (area == null) {
302 // interactively 328 // interactively
303 zoomArea(data); 329 zoomArea(data);
304 } else { 330 } else {
305 data.zoomArea = geom.rectangle(area); 331 data.zoomArea = geom.rectangle(area);
306 redisplay(data); 332 redisplay(data);
307 } 333 }
308 }, 334 },
309 335
310 // zoom out to full page 336 /** zoom out to full page
337 *
338 * @param data
339 * @param mode
340 */
311 zoomFull : function (data, mode) { 341 zoomFull : function (data, mode) {
312 data.zoomArea = FULL_AREA.copy(); 342 data.zoomArea = FULL_AREA.copy();
313 if (mode === 'width') { 343 if (mode === 'width') {
314 data.dlOpts.fitwidth = 1; 344 data.dlOpts.fitwidth = 1;
315 delete data.dlOpts.fitheight; 345 delete data.dlOpts.fitheight;
321 delete data.dlOpts.fitheight; 351 delete data.dlOpts.fitheight;
322 } 352 }
323 redisplay(data); 353 redisplay(data);
324 }, 354 },
325 355
326 // move zoomed area 356 /** move zoomed area
357 *
358 * @param data
359 * @param dx
360 * @param dy
361 */
327 moveZoomArea : function (data, dx, dy) { 362 moveZoomArea : function (data, dx, dy) {
328 var za = data.zoomArea.copy(); 363 var za = data.zoomArea.copy();
329 var factor = data.settings.zoomArrowMoveFactor; 364 var factor = data.settings.zoomArrowMoveFactor;
330 var deltaX = dx * factor * za.width; 365 var deltaX = dx * factor * za.width;
331 var deltaY = dy * factor * za.height; 366 var deltaY = dy * factor * za.height;
334 za = FULL_AREA.fit(za); 369 za = FULL_AREA.fit(za);
335 setZoomArea(data, za); 370 setZoomArea(data, za);
336 redisplay(data); 371 redisplay(data);
337 }, 372 },
338 373
339 // set a mark by clicking (or giving a position) 374 /** set a mark by clicking (or giving a position)
375 *
376 * @param data
377 * @param mpos
378 */
340 setMark : function (data, mpos) { 379 setMark : function (data, mpos) {
341 if (mpos == null) { 380 if (mpos == null) {
342 // interactive 381 // interactive
343 setMark(data); 382 setMark(data);
344 } else { 383 } else {
346 data.marks.push(pos); 385 data.marks.push(pos);
347 redisplay(data); 386 redisplay(data);
348 } 387 }
349 }, 388 },
350 389
351 // remove the last mark 390 /** remove the last mark
391 *
392 * @param data
393 */
352 removeMark : function (data) { 394 removeMark : function (data) {
353 data.marks.pop(); 395 data.marks.pop();
354 redisplay(data); 396 redisplay(data);
355 }, 397 },
356 398
357 // mirror the image 399 /** mirror the image
400 *
401 * @param data
402 * @param mode
403 */
358 mirror : function (data, mode) { 404 mirror : function (data, mode) {
359 var flags = data.scalerFlags; 405 var flags = data.scalerFlags;
360 if (mode === 'h') { 406 if (mode === 'h') {
361 if (flags.hmir) { 407 if (flags.hmir) {
362 delete flags.hmir; 408 delete flags.hmir;
371 } 417 }
372 } 418 }
373 redisplay(data); 419 redisplay(data);
374 }, 420 },
375 421
376 // rotate the image 422 /** rotate the image
423 *
424 * @param data
425 * @param angle
426 */
377 rotate : function (data, angle) { 427 rotate : function (data, angle) {
378 var rot = data.settings.rot; 428 var rot = data.settings.rot;
379 if (angle == null) { 429 if (angle == null) {
380 angle = window.prompt("Rotation angle:", rot); 430 angle = window.prompt("Rotation angle:", rot);
381 } 431 }
382 data.settings.rot = angle; 432 data.settings.rot = angle;
383 redisplay(data); 433 redisplay(data);
384 }, 434 },
385 435
386 // change brightness 436 /** change brightness
437 *
438 * @param data
439 * @param factor
440 */
387 brightness : function (data, factor) { 441 brightness : function (data, factor) {
388 var brgt = data.settings.brgt; 442 var brgt = data.settings.brgt;
389 if (factor == null) { 443 if (factor == null) {
390 factor = window.prompt("Brightness (-255..255)", brgt); 444 factor = window.prompt("Brightness (-255..255)", brgt);
391 } 445 }
392 data.settings.brgt = factor; 446 data.settings.brgt = factor;
393 redisplay(data); 447 redisplay(data);
394 }, 448 },
395 449
396 // change contrast 450 /** change contrast
451 *
452 * @param data
453 * @param factor
454 */
397 contrast : function (data, factor) { 455 contrast : function (data, factor) {
398 var cont = data.settings.cont; 456 var cont = data.settings.cont;
399 if (factor == null) { 457 if (factor == null) {
400 factor = window.prompt("Contrast (-8, 8)", cont); 458 factor = window.prompt("Contrast (-8, 8)", cont);
401 } 459 }
402 data.settings.cont = factor; 460 data.settings.cont = factor;
403 redisplay(data); 461 redisplay(data);
404 }, 462 },
405 463
406 // reset image parameters to defaults TODO: improve this! 464 /** reset image parameters to defaults
465 * TODO: improve this!
466 *
467 * @param data
468 */
407 reset : function (data) { 469 reset : function (data) {
408 var settings = data.settings; 470 var settings = data.settings;
409 var paramNames = settings.digilibParamNames; 471 var paramNames = settings.digilibParamNames;
410 var params = data.queryParams; 472 var params = data.queryParams;
411 // delete all digilib parameters 473 // delete all digilib parameters
426 delete data.dlOpts.fitwidth; 488 delete data.dlOpts.fitwidth;
427 delete data.dlOpts.fitheight; 489 delete data.dlOpts.fitheight;
428 redisplay(data); 490 redisplay(data);
429 }, 491 },
430 492
431 // presents a reference url (returns value if noprompt) 493 /** presents a reference url (returns value if noprompt)
494 *
495 * @param data
496 * @param noprompt
497 * @returns
498 */
432 reference : function (data, noprompt) { 499 reference : function (data, noprompt) {
433 var url = getDigilibUrl(data); 500 var url = getDigilibUrl(data);
434 if (noprompt == null) { 501 if (noprompt == null) {
435 window.prompt("URL reference to the current view", url); 502 window.prompt("URL reference to the current view", url);
436 } 503 }
437 return url; 504 return url;
438 }, 505 },
439 506
440 // set image quality 507 /** set image quality
508 *
509 * @param data
510 * @param qual
511 */
441 setQuality : function (data, qual) { 512 setQuality : function (data, qual) {
442 var oldq = getQuality(data); 513 var oldq = getQuality(data);
443 if (qual == null) { 514 if (qual == null) {
444 qual = window.prompt("Image quality (0..2)", oldq); 515 qual = window.prompt("Image quality (0..2)", oldq);
445 } 516 }
448 setQuality(data, qual); 519 setQuality(data, qual);
449 redisplay(data); 520 redisplay(data);
450 } 521 }
451 }, 522 },
452 523
453 // calibrate (only faking) 524 /** calibrate (only faking)
525 *
526 * @param data
527 * @param res
528 */
454 calibrate : function (data, res) { 529 calibrate : function (data, res) {
455 var oldRes = data.settings.ddpi; 530 var oldRes = data.settings.ddpi;
456 if (res == null) { 531 if (res == null) {
457 res = window.prompt("Display resolution (dpi)", oldRes); 532 res = window.prompt("Display resolution (dpi)", oldRes);
458 } 533 }
460 data.settings.ddpi = res; 535 data.settings.ddpi = res;
461 redisplay(data); 536 redisplay(data);
462 } 537 }
463 }, 538 },
464 539
465 // set image scale mode 540 /** set image scale mode
541 *
542 * @param data
543 * @param mode
544 */
466 setScaleMode : function (data, mode) { 545 setScaleMode : function (data, mode) {
467 var oldM = getScaleMode(data); 546 var oldM = getScaleMode(data);
468 if (mode == null) { 547 if (mode == null) {
469 mode = window.prompt("Image scale mode (screen, pixel, size)", oldM); 548 mode = window.prompt("Image scale mode (screen, pixel, size)", oldM);
470 } 549 }
476 } 555 }
477 556
478 // end of actions 557 // end of actions
479 }; 558 };
480 559
481 // returns parameters from page url 560 /** return parameters from page url
561 *
562 */
482 var parseQueryParams = function() { 563 var parseQueryParams = function() {
483 return parseQueryString(window.location.search.slice(1)); 564 return parseQueryString(window.location.search.slice(1));
484 }; 565 };
485 566
486 // returns parameters from embedded img-element 567 /** returns parameters from embedded img-element
568 *
569 */
487 var parseImgParams = function($elem) { 570 var parseImgParams = function($elem) {
488 var src = $elem.find('img').first().attr('src'); 571 var src = $elem.find('img').first().attr('src');
489 if (!src) return null; 572 if (!src) return null;
490 var pos = src.indexOf('?'); 573 var pos = src.indexOf('?');
491 var query = (pos < 0) ? '' : src.substring(pos + 1); 574 var query = (pos < 0) ? '' : src.substring(pos + 1);
493 var params = parseQueryString(query); 576 var params = parseQueryString(query);
494 params.scalerBaseUrl = scalerUrl; 577 params.scalerBaseUrl = scalerUrl;
495 return params; 578 return params;
496 }; 579 };
497 580
498 // parses query parameter string into parameter object 581 /** parses query parameter string into parameter object
582 *
583 */
499 var parseQueryString = function(query) { 584 var parseQueryString = function(query) {
500 var params = {}; 585 var params = {};
501 if (query == null) return params; 586 if (query == null) return params;
502 var pairs = query.split("&"); 587 var pairs = query.split("&");
503 //var keys = []; 588 //var keys = [];
509 } 594 }
510 } 595 }
511 return params; 596 return params;
512 }; 597 };
513 598
514 // returns a query string from key names from a parameter hash (ignoring if the same value is in defaults) 599 /** return a query string from key names from a parameter hash
600 * (ignores keys if the same value is in defaults)
601 *
602 */
515 var getParamString = function (settings, keys, defaults) { 603 var getParamString = function (settings, keys, defaults) {
516 var paramString = ''; 604 var paramString = '';
517 var nx = false; 605 var nx = false;
518 for (var i = 0; i < keys.length; ++i) { 606 for (var i = 0; i < keys.length; ++i) {
519 var key = keys[i]; 607 var key = keys[i];
529 } 617 }
530 } 618 }
531 return paramString; 619 return paramString;
532 }; 620 };
533 621
534 // returns URL and query string for Scaler 622 /** returns URL and query string for Scaler
623 *
624 */
535 var getScalerUrl = function (data) { 625 var getScalerUrl = function (data) {
536 packParams(data); 626 packParams(data);
537 var settings = data.settings; 627 var settings = data.settings;
538 if (settings.scalerBaseUrl == null) { 628 if (settings.scalerBaseUrl == null) {
539 alert("ERROR: URL of digilib Scaler servlet missing!"); 629 alert("ERROR: URL of digilib Scaler servlet missing!");
542 var queryString = getParamString(settings, keys, defaults); 632 var queryString = getParamString(settings, keys, defaults);
543 var url = settings.scalerBaseUrl + '?' + queryString; 633 var url = settings.scalerBaseUrl + '?' + queryString;
544 return url; 634 return url;
545 }; 635 };
546 636
547 // returns URL for bird's eye view image 637 /** returns URL for preview background image
548 var getBgImgUrl = function (data, moreParams) { 638 *
639 */
640 var getPreviewImgUrl = function (data, moreParams) {
549 var settings = data.settings; 641 var settings = data.settings;
550 var bgOptions = { 642 var bgOptions = {
551 dw : settings.bgImgWidth, 643 dw : settings.previewImgWidth,
552 dh : settings.bgImgHeight 644 dh : settings.previewImgHeight
553 }; 645 };
554 var bgSettings = $.extend({}, settings, bgOptions); 646 var bgSettings = $.extend({}, settings, bgOptions);
555 // filter scaler flags (use only hmir and vmir) 647 // filter scaler flags (use only hmir and vmir)
556 if (bgSettings.mo != null) { 648 if (bgSettings.mo != null) {
557 var mo = ''; 649 var mo = '';
561 if (data.scalerFlags.vmir != null) { 653 if (data.scalerFlags.vmir != null) {
562 mo += 'vmir'; 654 mo += 'vmir';
563 } 655 }
564 bgSettings.mo = mo; 656 bgSettings.mo = mo;
565 } 657 }
566 var params = getParamString(bgSettings, settings.bgImgParamNames, defaults); 658 var params = getParamString(bgSettings, settings.previewImgParamNames, defaults);
567 var url = settings.scalerBaseUrl + '?' + params; 659 var url = settings.scalerBaseUrl + '?' + params;
568 return url; 660 return url;
569 }; 661 };
570 662
571 // returns URL and query string for current digilib 663 /** returns URL and query string for current digilib
664 *
665 */
572 var getDigilibUrl = function (data) { 666 var getDigilibUrl = function (data) {
573 packParams(data); 667 packParams(data);
574 var settings = data.settings; 668 var settings = data.settings;
575 var paramList = settings.additionalParamNames.concat(settings.digilibParamNames); 669 var paramList = settings.additionalParamNames.concat(settings.digilibParamNames);
576 if (settings.suppressParamNames != null) { 670 if (settings.suppressParamNames != null) {
591 url = url.substring(0, pos); 685 url = url.substring(0, pos);
592 } 686 }
593 return url + '?' + queryString; 687 return url + '?' + queryString;
594 }; 688 };
595 689
596 // loads image information from digilib server via HTTP 690 /** loads image information from digilib server via HTTP
691 *
692 */
597 var loadImageInfo = function (data) { 693 var loadImageInfo = function (data) {
598 var settings = data.settings; 694 var settings = data.settings;
599 // bind default function (only once) 695 // bind default function (only once)
600 $(data).off('imageInfo', handleImageInfo); 696 $(data).off('imageInfo', handleImageInfo);
601 $(data).on('imageInfo', handleImageInfo); 697 $(data).on('imageInfo', handleImageInfo);
608 // send event 704 // send event
609 $(data).trigger('imageInfo', [json]); 705 $(data).trigger('imageInfo', [json]);
610 }); 706 });
611 }; 707 };
612 708
613 // processes some parameters into objects and stuff 709 /** processes some parameters into objects and stuff
710 *
711 */
614 var unpackParams = function (data) { 712 var unpackParams = function (data) {
615 var settings = data.settings; 713 var settings = data.settings;
616 // zoom area 714 // zoom area
617 var zoomArea = geom.rectangle(settings.wx, settings.wy, settings.ww, settings.wh); 715 var zoomArea = geom.rectangle(settings.wx, settings.wy, settings.ww, settings.wh);
618 data.zoomArea = zoomArea; 716 data.zoomArea = zoomArea;
645 data.scalerFlags = flags; 743 data.scalerFlags = flags;
646 data.scaleMode = getScaleMode(data); 744 data.scaleMode = getScaleMode(data);
647 retrieveOptions(data); 745 retrieveOptions(data);
648 }; 746 };
649 747
650 // put area into parameters 748 /** put area into parameters
749 *
750 */
651 var packArea = function (settings, area) { 751 var packArea = function (settings, area) {
652 if (!area) return; 752 if (!area) return;
653 // zoom area 753 // zoom area
654 settings.wx = cropFloat(area.x); 754 settings.wx = cropFloat(area.x);
655 settings.wy = cropFloat(area.y); 755 settings.wy = cropFloat(area.y);
656 settings.ww = cropFloat(area.width); 756 settings.ww = cropFloat(area.width);
657 settings.wh = cropFloat(area.height); 757 settings.wh = cropFloat(area.height);
658 }; 758 };
659 759
660 // put marks into parameters 760 /** put marks into parameters
761 *
762 */
661 var packMarks = function (settings, marks) { 763 var packMarks = function (settings, marks) {
662 if (!marks) return; 764 if (!marks) return;
663 settings.mk = ''; 765 settings.mk = '';
664 for (var i = 0; i < marks.length; i++) { 766 for (var i = 0; i < marks.length; i++) {
665 if (i) { 767 if (i) {
669 cropFloatStr(marks[i].x) + '/' + 771 cropFloatStr(marks[i].x) + '/' +
670 cropFloatStr(marks[i].y); 772 cropFloatStr(marks[i].y);
671 } 773 }
672 }; 774 };
673 775
674 // pack scaler flags into parameters 776 /** pack scaler flags into parameters
777 *
778 */
675 var packScalerFlags = function (settings, flags) { 779 var packScalerFlags = function (settings, flags) {
676 if (!flags) return; 780 if (!flags) return;
677 var mo = ''; 781 var mo = '';
678 for (var f in flags) { 782 for (var f in flags) {
679 if (mo) { 783 if (mo) {
682 mo += f; 786 mo += f;
683 } 787 }
684 settings.mo = mo; 788 settings.mo = mo;
685 }; 789 };
686 790
687 // put objects back into parameters 791 /** put objects back into parameters
792 *
793 */
688 var packParams = function (data) { 794 var packParams = function (data) {
689 var settings = data.settings; 795 var settings = data.settings;
690 packArea(settings, data.zoomArea); 796 packArea(settings, data.zoomArea);
691 packMarks(settings, data.marks); 797 packMarks(settings, data.marks);
692 packScalerFlags(settings, data.scalerFlags); 798 packScalerFlags(settings, data.scalerFlags);
693 // store user interface options in cookie 799 // store user interface options in cookie
694 storeOptions(data); 800 storeOptions(data);
695 }; 801 };
696 802
803 /** store digilib options in a cookie
804 *
805 */
697 var storeOptions = function (data) { 806 var storeOptions = function (data) {
698 // save digilib options in cookie
699 var settings = data.settings; 807 var settings = data.settings;
700 if (data.dlOpts) { 808 if (data.dlOpts) {
701 // save digilib settings in options 809 // save digilib settings in options
702 data.dlOpts.birdview = settings.isBirdDivVisible ? 1 : 0; 810 data.dlOpts.birdview = settings.isBirdDivVisible ? 1 : 0;
703 data.dlOpts.buttons = settings.visibleButtonSets; 811 data.dlOpts.buttons = settings.visibleButtonSets;
721 console.debug("set cookie=", ck, " value=", qs); 829 console.debug("set cookie=", ck, " value=", qs);
722 $.cookie(ck, qs); 830 $.cookie(ck, qs);
723 } 831 }
724 }; 832 };
725 833
834 /** restrieve digilib options from a cookie
835 *
836 */
726 var retrieveOptions = function (data) { 837 var retrieveOptions = function (data) {
727 // clop (digilib options) 838 // clop (digilib options)
728 var opts = {}; 839 var opts = {};
729 var settings = data.settings; 840 var settings = data.settings;
730 if ($.cookie) { 841 if ($.cookie) {
821 // send event 932 // send event
822 $(data).trigger('update'); 933 $(data).trigger('update');
823 }; 934 };
824 935
825 /** handle "update" display event. 936 /** handle "update" display event.
826 * updates overlays etc. 937 * updates image transform, redraws marks etc.
827 */ 938 */
828 var handleUpdate = function (evt) { 939 var handleUpdate = function (evt) {
829 var data = this; 940 var data = this;
830 updateImgTrafo(data); 941 updateImgTrafo(data);
831 renderMarks(data); 942 renderMarks(data);
1333 }; 1444 };
1334 if (newZoomArea != null) { 1445 if (newZoomArea != null) {
1335 // check if aspect ratio has changed 1446 // check if aspect ratio has changed
1336 if (newZoomArea.getAspect() !== data.zoomArea.getAspect()) { 1447 if (newZoomArea.getAspect() !== data.zoomArea.getAspect()) {
1337 console.debug("aspect ratio changed!"); 1448 console.debug("aspect ratio changed!");
1449 // what now?
1338 } 1450 }
1339 // get transform for new zoomArea 1451 // get transform for new zoomArea
1340 imgTrafo = getImgTrafo($img, newZoomArea, data.settings.rot, 1452 imgTrafo = getImgTrafo($img, newZoomArea, data.settings.rot,
1341 data.scalerFlags.hmir, data.scalerFlags.vmir, 1453 data.scalerFlags.hmir, data.scalerFlags.vmir,
1342 data.scaleMode, data); 1454 data.scaleMode, data);
1357 // additional full-size background using CSS3 1469 // additional full-size background using CSS3
1358 fullRect = imgTrafo.transform(FULL_AREA); 1470 fullRect = imgTrafo.transform(FULL_AREA);
1359 if (fullRect.height < data.settings.maxBgSize && fullRect.width < data.settings.maxBgSize) { 1471 if (fullRect.height < data.settings.maxBgSize && fullRect.width < data.settings.maxBgSize) {
1360 // correct offset because background is relative 1472 // correct offset because background is relative
1361 fullRect.addPosition(scalerPos.neg()); 1473 fullRect.addPosition(scalerPos.neg());
1362 var url = getBgImgUrl(data); 1474 var url = getPreviewImgUrl(data);
1363 // add second background url, size and position 1475 // add second background url, size and position
1364 scalerCss['background-image'] += ', url(' + url + ')'; 1476 scalerCss['background-image'] += ', url(' + url + ')';
1365 scalerCss[data.bgSizeName] += ', ' + Math.round(fullRect.width) + 'px ' + Math.round(fullRect.height) + 'px'; 1477 scalerCss[data.bgSizeName] += ', ' + Math.round(fullRect.width) + 'px ' + Math.round(fullRect.height) + 'px';
1366 scalerCss['background-position'] += ', ' + Math.round(fullRect.x) + 'px '+ Math.round(fullRect.y) + 'px'; 1478 scalerCss['background-position'] += ', ' + Math.round(fullRect.x) + 'px '+ Math.round(fullRect.y) + 'px';
1367 } 1479 }