All files / web/bundles/pimui/lib/slimbox2 slimbox2.js

62.02% Statements 80/129
43.94% Branches 29/66
38.1% Functions 8/21
50% Lines 37/74

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105          169x 169x 169x 169x 1x 1x 1x   1x 169x                             1x       1x 1x             1x               1x 1x 1x   1x     1x 1x 1x 1x 1x 1x         1x 1x   1x         1x 1x 1x     1x   1x   1x 1x 1x 1x 1x                   1x              
/*
	Slimbox v2.04 - The ultimate lightweight Lightbox clone for jQuery
	(c) 2007-2010 Christophe Beyls <http://www.digitalia.be>
	MIT-style license.
*/
(function (w) {
var E = w(window), u, f, F = -1, n, x, D, v, y, L, r, m = !window.XMLHttpRequest, s = [], l = document.documentElement, k = {}, t = new Image(), J = new Image(), H, a, g, p, I, d, G, c, A, K;w(function () {
    w("body").append(w([H = w('<div id="lbOverlay" />')[0], a = w('<div id="lbCenter" />')[0], G = w('<div id="lbBottomContainer" />')[0]]).css("display", "none"));g = w('<div id="lbImage" />').appendTo(a).append(p = w('<div style="position: relative;" />').append([I = w('<a id="lbPrevLink" href="#" />').click(B)[0], d = w('<a id="lbNextLink" href="#" />').click(e)[0]])[0])[0];c = w('<div id="lbBottom" />').appendTo(G).append([w('<a id="lbCloseLink" href="#" />').add(H).click(C)[0], A = w('<div id="lbCaption" />')[0], K = w('<div id="lbNumber" />')[0], w('<div style="clear: both;" />')[0]])[0]
});w.slimbox = function (O, N, M) {
    u = w.extend({loop: false, overlayOpacity: 0.8, overlayFadeDuration: 400, resizeDuration: 400, resizeEasing: "swing", initialWidth: 250, initialHeight: 250, imageFadeDuration: 400, captionAnimationDuration: 400, counterText: "Image {x} of {y}", closeKeys: [27, 88, 67], previousKeys: [37, 80], nextKeys: [39, 78]}, M);Eif (typeof O == "string") {
        O = [[O, N]];N = 0
    }y = E.scrollTop() + (E.height() / 2);L = u.initialWidth;r = u.initialHeight;w(a).css({top: Math.max(0, y - (r / 2)), width: L, height: r, marginLeft: -L / 2}).show();v = m || (H.currentStyle && (H.currentStyle.position != "fixed"));Iif (v) {
        H.style.position = "absolute"
    }w(H).css("opacity", u.overlayOpacity).fadeIn(u.overlayFadeDuration);z();j(1);f = O;u.loop = u.loop && (f.length > 1);return b(N)
};w.fn.slimbox = function (M, P, O) {
    P = P || function (Q) {
        return [Q.href, Q.title]
    };O = O || function () {
        return true
    };var N = this;return N.off("click").click(function () {
        var S = this, U = 0, T, Q = 0, R;T = w.grep(N, function (W, V) {
            return O.call(S, W, V)
        });for (R = T.length; Q < R; ++Q) {
            if (T[Q] == S) {
                U = Q
            }T[Q] = P(T[Q], Q)
        }return w.slimbox(T, U, M)
    })
};function z() {
    var N = E.scrollLeft(), M = E.width();w([a, G]).css("left", N + (M / 2));Iif (v) {
        w(H).css({left: N, top: E.scrollTop(), width: M, height: E.height()})
    }
}function j(M) {
    Eif (M) {
        w("object").add(m ? "select" : "embed").each(function (O, P) {
            s[O] = [P, P.style.visibility];P.style.visibility = "hidden"
        })
    }else {
        w.each(s, function (O, P) {
            P[0].style.visibility = P[1]
        });s = []
    }var N = M ? "bind" : "unbind";E[N]("scroll resize", z);w(document)[N]("keydown", o)
}function o(O) {
    var N = O.keyCode, M = w.inArray;return (M(N, u.closeKeys) >= 0) ? C() : (M(N, u.nextKeys) >= 0) ? e() : (M(N, u.previousKeys) >= 0) ? B() : false
}function B() {
    return b(x)
}function e() {
    return b(D)
}function b(M) {
    Eif (M >= 0) {
        F = M;n = f[F][0];x = (F || (u.loop ? f.length : 0)) - 1;D = ((F + 1) % f.length) || (u.loop ? 0 : -1);q();a.className = "lbLoading";k = new Image();k.onload = i;k.src = n
    }return false
}function i() {
    a.className = "";
 
    // https://stackoverflow.com/questions/3257059/limit-slimbox-lightbox-image-to-window-size
    const winWidth = w(window).width() - 20;
    const winHeight = w(window).height() - 20;
    const maxSize = (winWidth > winHeight) ? winHeight : winWidth;
    let my_w = k.width;
    let my_h = k.height;
    Iif (my_w > my_h)
    {
        my_h = maxSize * my_h / my_w;
        my_w = maxSize;
    } else {
        my_w = maxSize * my_w / my_h;
        my_h = maxSize;
    }
    Iif (k.width > my_w || k.height > my_h) {
        w(g).css({backgroundImage: "url(" + n + ")", backgroundSize: my_w + "px " + my_h + "px", visibility: "hidden", display: ""});
        w(p).width(my_w);
        w([p, I, d]).height(my_h);
    } else {
        w(g).css({backgroundImage: "url(" + n + ")", visibility: "hidden", display: ""});
        w(p).width(k.width);
        w([p, I, d]).height(k.height);
    }
 
    w(A).html(f[F][1] || "");w(K).html((((f.length > 1) && u.counterText) || "").replace(/{x}/, F + 1).replace(/{y}/, f.length));Iif (x >= 0) {
        t.src = f[x][0]
    }Iif (D >= 0) {
        J.src = f[D][0]
    }L = g.offsetWidth;r = g.offsetHeight;var M = Math.max(0, y - (r / 2));Eif (a.offsetHeight != r) {
        w(a).animate({height: r, top: M}, u.resizeDuration, u.resizeEasing)
    }Eif (a.offsetWidth != L) {
        w(a).animate({width: L, marginLeft: -L / 2}, u.resizeDuration, u.resizeEasing)
    }w(a).queue(function () {
        w(G).css({width: L, top: M + r, marginLeft: -L / 2, visibility: "hidden", display: ""});w(g).css({display: "none", visibility: "", opacity: ""}).fadeIn(u.imageFadeDuration, h)
    })
}function h() {
    if (x >= 0) {
        w(I).show()
    }if (D >= 0) {
        w(d).show()
    }w(c).css("marginTop", -c.offsetHeight).animate({marginTop: 0}, u.captionAnimationDuration);G.style.visibility = ""
}function q() {
    k.onload = null;k.src = t.src = J.src = n;w([a, g, c]).stop(true);w([I, d, g, G]).hide()
}function C() {
    if (F >= 0) {
        q();F = x = D = -1;w(a).hide();w(H).stop().fadeOut(u.overlayFadeDuration, j)
    }return false
}
})(jQuery);