summaryrefslogtreecommitdiff
path: root/lib/gallery.show_full_size.js
blob: c32195f697a7a8fde4f420728c3c8ed2e295417c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
(function($) {
   /**
    * @todo Move inline CSS out to external style sheet (theme style sheet)
    */
   $.gallery_show_full_size = function(image_url, image_width, image_height) {
     /*
      * Calculate the size of the image panel based on the size of the image and the size of the
      * window.  Scale the image so the entire panel fits in the view port.
      */
     function _auto_fit(imageWidth, imageHeight) {
       // ui-dialog gives a padding of 2 pixels
       var windowWidth = $(window).width() - 10;
       var windowHeight = $(window).height() - 10;

       /* If the width is greater then scale the image width first */
       if (imageWidth > windowWidth) {
	 var ratio = windowWidth / imageWidth;
	 imageWidth *= ratio;
	 imageHeight *= ratio;
       }
       /* after scaling the width, check that the height fits */
       if (imageHeight > windowHeight) {
	 var ratio = windowHeight / imageHeight;
	 imageWidth *= ratio;
	 imageHeight *= ratio;
       }

       // handle the case where the calculation is almost zero (2.14e-14)
       return {
	 top: Number((windowHeight - imageHeight) / 2),
	 left: Number((windowWidth - imageWidth) / 2),
	 width: Number(imageWidth),
	 height: Number(imageHeight)
       };
     }

     var width = $(document).width();
     var height = $(document).height();

     $("body").append('<div id="gFullsizeOverlay" class="ui-dialog-overlay" ' +
		      'style="border: none; margin: 0; padding: 0; background-color: #000; ' +
		      'position: absolute; top: 0px; left: 0px; ' +
		      'width: ' + width + 'px; height: ' + height + 'px; opacity: 0.7; filter: alpha(opacity=70);' +
		      '-moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; ' +
		      '-moz-background-inline-policy: -moz-initial; z-index: 1001;"> </div>');

     var image_size = _auto_fit(image_width, image_height);

     $("body").append('<div id="gFullsize" class="ui-dialog ui-widget" ' +
		      'style="overflow: hidden; display: block; ' +
		      'position: absolute; z-index: 1002; outline-color: -moz-use-text-color; ' +
		      'outline-style: none; outline-width: 0px; ' +
		      'height: ' + image_size.height + 'px; ' +
		      'width: ' + image_size.width + 'px; ' +
		      'top: ' + image_size.top + 'px; left: ' + image_size.left + 'px;">' +
		      '<img id="gFullSizeImage" src="' + image_url + '"' +
		      'height="' + image_size.height + '" width="' + image_size.width + '"/></div>');

     $("#gFullsize").append('<span id="gFullsizeClose" class="fg-button ui-icon ui-state-default ' +
			    'ui-icon-closethick ui-corner-all" style="z-index: 1003; position: absolute; ' +
			    'right: 1em; top: 1em;"></span>');
     $("#gFullsizeClose").click(function() {
				  $("#gFullsizeOverlay*").remove();
				  $("#gFullsize").remove();
				});
     $(window).resize(function() {
			$("#gFullsizeOverlay").width($(document).width())
			  .height($(document).height());
			image_size = _auto_fit(image_width, image_height);
			$("#gFullsize").height(image_size.height)
			  .width(image_size.width)
			  .css("top", image_size.top)
			  .css("left", image_size.left);
			$("#gFullSizeImage").height(image_size.height)
			  .width(image_size.width);
		      });
   };
})(jQuery);