integration/v2/js/slideshow.js
author veltr
Thu, 27 Jun 2013 18:47:14 +0200
changeset 190 ebb8b58fc2b8
parent 134 9caa840b2d92
child 203 df9a887eae92
permissions -rw-r--r--
Added fragment handling in slideshow
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
     1
$(function() {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
     2
    
134
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
     3
    var currentSlide = 0, jqwin = $(window), jqcaption = $(".caption"),
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
     4
        margin = 50,
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
     5
        jqimgcontainer = $(".image-container"),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
     6
        jqmainimg = $(".main-image"),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
     7
        jqbackdrop = $(".backdrop"),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
     8
        jqpath = $(".clip-path"),
134
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
     9
        lastSlide = null;
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    10
    
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    11
    function showSlide() {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    12
        var slide = slides[currentSlide];
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    13
        
134
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    14
        if (slide !== lastSlide) {
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    15
            jqcaption.find("h2").text(slide.title);
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    16
            jqcaption.find("h3").text(slide.author);
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    17
            var captiondiv = jqcaption.find(".caption-description");
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    18
            captiondiv.empty();
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    19
            slide.description.split(/\s*[\r\n]\s*/gm).forEach(function(p) {
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    20
                captiondiv.append($("<p>").text(p));
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    21
            });
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    22
            jqmainimg.attr("xlink:href", slide.image.src);
134
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    23
            jqbackdrop.attr("src", slide.image.src);
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    24
            jqpath.attr("d", slide.path);
134
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    25
        }
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    26
        
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    27
        lastSlide = slide;
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    28
        
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    29
        if (slide.image && slide.image.width) {
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    30
            var pathcoords = slide.path.match(/[\d\.]+/g),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    31
                pathx = pathcoords.filter(function(p,i) {
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    32
                    return !(i%2);
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    33
                }),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    34
                pathy = pathcoords.filter(function(p,i) {
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    35
                    return (i%2);
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    36
                }),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    37
                minpx = Math.min.apply(Math,pathx),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    38
                maxpx = Math.max.apply(Math,pathx),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    39
                minpy = Math.min.apply(Math,pathy),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    40
                maxpy = Math.max.apply(Math,pathy),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    41
                ww = jqwin.width(),
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    42
                wh = jqwin.height(),
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    43
                cw = jqcaption.outerWidth(),
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    44
                ch = jqcaption.outerHeight(),
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    45
                wi = slide.image.width,
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    46
                hi = slide.image.height,
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    47
                wp = wi * (maxpx - minpx),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    48
                hp = hi * (maxpy - minpy),
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    49
                w1 = ww - 2 * margin, w2 = w1 - cw
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    50
                h1 = wh - 2 * margin, h2 = h1 - ch,
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    51
                ra = Math.max(
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    52
                    Math.min((h1 / hp), (w2 / wp)),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    53
                    Math.min((h2 / hp), (w1 / wp))
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    54
                ),
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    55
                wa = wp * ra, ha = hp * ra,
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    56
                rb = Math.max(ww / wi, wh / hi),
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    57
                wb = wi * rb, hb = hi * rb,
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    58
                xb = (ww - wb) / 2, yb = (wh - hb) / 2;
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    59
            jqimgcontainer.css({
134
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    60
                width: wa,
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    61
                height: ha
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    62
            });
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    63
            jqimgcontainer[0].setAttribute("viewBox", [minpx,minpy,(maxpx-minpx),(maxpy-minpy)].join(" "));
134
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    64
            jqbackdrop.css({
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    65
                width: wb,
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    66
                height: hb,
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    67
                left: xb,
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    68
                top: yb
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    69
            });
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    70
            
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    71
        }
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    72
    }
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    73
    
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    74
    function nextSlide() {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    75
        currentSlide = (currentSlide + 1) % slides.length;
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    76
        showSlide();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    77
        return false;
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    78
    }
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    79
    
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    80
    function prevSlide() {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    81
        currentSlide = (currentSlide > 0 ? currentSlide - 1 : slides.length - 1);
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    82
        showSlide();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    83
        return false;
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    84
    }
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    85
    
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    86
    var hideTO, isInArrow = false, jqArrows = $(".arrow-wrap");
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    87
    function resetTO() {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    88
        clearTimeout(hideTO);
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    89
        if (!isInArrow) {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    90
            hideTO = setTimeout(function() {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    91
                jqArrows.hide();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    92
            }, 1000);
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    93
        }
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    94
    }
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    95
    $("body").mousemove(function() {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    96
        jqArrows.show();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    97
        resetTO();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    98
        return false;
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    99
    });
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   100
    jqArrows.hover(function() {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   101
        isInArrow = true;
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   102
        resetTO();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   103
    }, function() {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   104
        isInArrow = false;
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   105
        resetTO();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   106
    });
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   107
    
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   108
    $(".left-arrow").click(prevSlide);
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   109
    $(".right-arrow").click(nextSlide);
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   110
    
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   111
    slides.forEach(function(slide, k) {
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
   112
        if (!slide.path) {
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
   113
            slide.path = "M0 0L1 0L1 1L0 1Z"
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
   114
        }
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   115
        slide.image = new Image();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   116
        slide.image.onload = function() {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   117
            if (k === currentSlide) {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   118
                showSlide();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   119
            }
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   120
        };
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
   121
        slide.image.src = imgurlbase + slide.src;
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   122
    });
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   123
    
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   124
    showSlide();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   125
    
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   126
    jqwin.resize(showSlide);
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   127
    
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   128
});