source: extensions/modus/js/photo.autosize.js @ 30816

Last change on this file since 30816 was 25794, checked in by rvelices, 11 years ago
File size: 3.9 KB
Line 
1function rvas_get_scaled_size(d, available) {
2        var ratio_w = d.w / available.w
3                , ratio_h = d.h / available.h;
4        if (ratio_w>1 || ratio_h>1) {
5                if (ratio_w>ratio_h)
6                        return {w: available.w / available.dpr, h: Math.floor(d.h / ratio_w / available.dpr)};
7                else
8                        return {w: Math.floor(d.w / ratio_h / available.dpr), h: available.h / available.dpr};
9        }
10        return {w: Math.round(d.w / available.dpr), h: Math.round(d.h / available.dpr)};
11}
12
13function rvas_get_available_size(){
14                var width = $("#theImage").width(),
15                        zoom = 1,
16                        docHeight;
17
18                if ("innerHeight" in window) {
19                        docHeight = window.innerHeight;
20                        if (document.documentElement.clientWidth > window.innerWidth && window.innerWidth)
21                                zoom = document.documentElement.clientWidth / window.innerWidth;
22                        docHeight = Math.floor(docHeight*zoom);
23                }
24                else
25                        docHeight = document.documentElement.offsetHeight;
26                var height = docHeight - Math.ceil($("#theImage").offset().top);
27
28                var dpr = window.devicePixelRatio && window.devicePixelRatio>1 ? window.devicePixelRatio : 1;
29                width = Math.floor(width*dpr); height = Math.floor(height*dpr);
30
31                document.cookie= 'phavsz='+width+'x'+height+'x'+dpr+';path='+RVAS.cp;
32                return {w:width, h:height, dpr:dpr, zoom:zoom};
33}
34
35function rvas_choose(relaxed){
36        var best,
37                available = rvas_get_available_size(),
38                $img = $("#theMainImage"),
39                changed = true;
40        for (var i=0; i<RVAS.derivatives.length; i++){
41                var d = RVAS.derivatives[i];
42                if (d.w > available.w*available.zoom || d.h > available.h*available.zoom){
43                        if (available.dpr>1 || !best)
44                                best = d;
45                        break;
46                }
47                else
48                        best = d;
49        }
50        if (best) {
51                if (available.dpr > 1) {
52                        var rescaled = rvas_get_scaled_size(best, available);
53                        if ($img.attr("width") && available.zoom==1) {
54                                var changeRatio = rescaled.h / $img.height()
55                                        , limit = relaxed ? 1.25 : 1.15;
56                                if (changeRatio>=1 && changeRatio<limit
57                                        || (changeRatio<1 && changeRatio>1/limit && $img.width()<available.w/available.dpr) )
58                                                return;
59                        }
60                        if (!$img.data("natural-w") || $img.data("natural-w") < best.w) {
61                                $img.attr("width", rescaled.w).attr("height", rescaled.h)
62                                        .attr("src", best.url)
63                                        .removeAttr("usemap")
64                                        .data("natural-w", best.w);
65                        }
66                        else {
67                                $img.attr("width", rescaled.w).attr("height", rescaled.h);
68                                changed = false;
69                        }
70                }
71                else {
72                        if ($img.attr("width")) {
73                                var changeRatio = best.h / $img.height()
74                                        , limit = relaxed ? 2 : 1.15;
75                                if (changeRatio>=1 && changeRatio<limit
76                                        || (changeRatio<1 && changeRatio>1/limit && $img.width()<available.w) )
77                                                return;
78                        }
79                        $img
80                                .attr("width", best.w).attr("height", best.h)
81                                .attr("src", best.url)
82                                .attr("usemap", "#map"+best.type);
83                }
84                if (changed) {
85                        $('#derivativeSwitchBox .switchCheck').css('visibility','hidden');
86                        $('#derivativeChecked'+best.type).css('visibility','visible');
87                }
88        }
89}
90
91$(document).ready( function() {
92
93        if (window.changeImgSrc) {
94                RVAS.changeImgSrcOrig = changeImgSrc;
95                changeImgSrc = function() {
96                        RVAS.disable = 1;
97                        RVAS.changeImgSrcOrig.apply(undefined, arguments);
98                }
99        }
100
101        $(window).resize(function() {
102                var w = $("body").width(),
103                        de = $(document.documentElement);
104                if (document.location.search.indexOf("slideshow")==-1) {
105                        if (w<1262)
106                                de.removeClass("wide");
107                        else
108                                de.addClass("wide");
109                }
110
111                if (RVAS.disable)
112                        rvas_get_available_size();
113                else
114                        rvas_choose();
115        });
116
117        $("#theMainImage").click( function(e) {
118                if (!$(this).attr("usemap") && e.clientY) {
119                        var pct = (e.pageX - $(this).offset().left) / $(this).width()
120                                , clientY = e.pageY - $(this).offset().top;
121                        if (pct < 0.3) {
122                                if ($("#linkPrev").length && clientY>15)
123                                        window.location = $("#linkPrev").attr("href");
124                        }
125                        else if (pct > 0.7 ) {
126                                if ($("#linkNext").length && clientY>15)
127                                        window.location = $("#linkNext").attr("href");
128                        }
129                        else if (clientY/$(this).height() < 0.5 && clientY>15) {
130                                var href = $(".pwg-icon-arrow-n").parent("a").attr("href");
131                                if (href)
132                                        window.location = href;
133                        }
134                }
135        });
136});
Note: See TracBrowser for help on using the repository browser.