integration/v2/js/slideshow.js
author cavaliet
Mon, 02 Sep 2013 14:41:44 +0200
changeset 246 2bcb2a23fcc2
parent 219 6667fb5455d0
permissions -rw-r--r--
Added tag V00.07.02 for changeset 5dc7e63590c7
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
        
219
6667fb5455d0 Added scrollbar on slideshow caption
veltr
parents: 206
diff changeset
    27
        jqcaption.css("max-height", jqwin.height() - 132);
6667fb5455d0 Added scrollbar on slideshow caption
veltr
parents: 206
diff changeset
    28
        
134
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    29
        lastSlide = slide;
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    30
        
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    31
        if (slide.image && slide.image.width) {
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    32
            var pathcoords = slide.path.match(/[\d\.]+/g),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    33
                pathx = pathcoords.filter(function(p,i) {
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    34
                    return !(i%2);
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    35
                }),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    36
                pathy = pathcoords.filter(function(p,i) {
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    37
                    return (i%2);
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    38
                }),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    39
                minpx = Math.min.apply(Math,pathx),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    40
                maxpx = Math.max.apply(Math,pathx),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    41
                minpy = Math.min.apply(Math,pathy),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    42
                maxpy = Math.max.apply(Math,pathy),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    43
                ww = jqwin.width(),
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    44
                wh = jqwin.height(),
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    45
                cw = jqcaption.outerWidth(),
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    46
                ch = jqcaption.outerHeight(),
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    47
                wi = slide.image.width,
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    48
                hi = slide.image.height,
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    49
                wp = wi * (maxpx - minpx),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    50
                hp = hi * (maxpy - minpy),
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    51
                w1 = ww - 2 * margin, w2 = w1 - cw
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    52
                h1 = wh - 2 * margin, h2 = h1 - ch,
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    53
                ra = Math.max(
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    54
                    Math.min((h1 / hp), (w2 / wp)),
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    55
                    Math.min((h2 / hp), (w1 / wp))
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    56
                ),
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    57
                wa = wp * ra, ha = hp * ra,
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    58
                rb = Math.max(ww / wi, wh / hi),
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    59
                wb = wi * rb, hb = hi * rb,
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    60
                xb = (ww - wb) / 2, yb = (wh - hb) / 2;
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    61
            jqimgcontainer.css({
134
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    62
                width: wa,
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    63
                height: ha
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    64
            });
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
    65
            jqimgcontainer[0].setAttribute("viewBox", [minpx,minpy,(maxpx-minpx),(maxpy-minpy)].join(" "));
134
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    66
            jqbackdrop.css({
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    67
                width: wb,
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    68
                height: hb,
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    69
                left: xb,
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    70
                top: yb
9caa840b2d92 Slideshow fixes
veltr
parents: 120
diff changeset
    71
            });
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    72
            
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    73
        }
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    74
    }
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    75
    
206
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    76
    var playInterval, playing = false;
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    77
    
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    78
    function toggleSlideShow() {
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    79
        clearInterval(playInterval);
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    80
        playing = !playing;
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    81
        var jqppbtn = $(".play-pause");
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    82
        if (playing) {
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    83
            jqppbtn.addClass("pause");
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    84
            playInterval = setInterval(nextSlide,4000,false);
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    85
        } else {
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    86
            jqppbtn.removeClass("pause");
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    87
        }
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    88
        return false;
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    89
    }
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    90
    
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    91
    function nextSlide(resetInterval) {
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    92
        if (!!resetInterval && playing) {
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    93
            playing = false;
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    94
            toggleSlideShow();
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
    95
        }
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    96
        currentSlide = (currentSlide + 1) % slides.length;
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
    97
        showSlide();
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
    
206
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   101
    function prevSlide(resetInterval) {
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   102
        if (!!resetInterval && playing) {
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   103
            playing = false;
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   104
            toggleSlideShow();
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   105
        }
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   106
        currentSlide = (currentSlide > 0 ? currentSlide - 1 : slides.length - 1);
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   107
        showSlide();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   108
        return false;
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   109
    }
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   110
    
203
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   111
    var hideTO, isInArrow = false, jqControls = $(".arrow-wrap,.top-controls");
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   112
    function resetTO() {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   113
        clearTimeout(hideTO);
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   114
        if (!isInArrow) {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   115
            hideTO = setTimeout(function() {
203
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   116
                jqControls.hide();
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   117
            }, 1000);
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   118
        }
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   119
    }
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   120
    $("body").mousemove(function() {
203
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   121
        jqControls.show();
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   122
        resetTO();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   123
        return false;
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   124
    });
203
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   125
    jqControls.hover(function() {
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   126
        isInArrow = true;
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   127
        resetTO();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   128
    }, function() {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   129
        isInArrow = false;
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   130
        resetTO();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   131
    });
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   132
    
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   133
    $(".left-arrow").click(prevSlide);
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   134
    $(".right-arrow").click(nextSlide);
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   135
    
203
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   136
    function fullScreen() {
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   137
        var isFull = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen || false;
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   138
        if (isFull) {
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   139
            (document.cancelFullScreen || document.mozCancelFullScreen || document.webkitCancelFullScreen || function(){}).call(document);
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   140
        } else {
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   141
            (document.body.requestFullScreen || document.body.mozRequestFullScreen || document.body.webkitRequestFullScreen || function(){}).call(document.body);
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   142
        }
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   143
        showSlide();
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   144
        return false;
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   145
    }
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   146
    
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   147
    $(".full-screen").click(fullScreen);
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   148
           
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   149
    if ( typeof document.fullScreen === "undefined"
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   150
        && typeof document.mozFullScreen === "undefined"
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   151
        && typeof document.webkitIsFullScreen === "undefined") {
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   152
        $(".full-screen").remove();
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   153
    }
206
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   154
        
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   155
    $(".play-pause").click(toggleSlideShow);
203
df9a887eae92 Added FullScreen and Play to Slideshow
veltr
parents: 190
diff changeset
   156
    
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   157
    slides.forEach(function(slide, k) {
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
   158
        if (!slide.path) {
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
   159
            slide.path = "M0 0L1 0L1 1L0 1Z"
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
   160
        }
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   161
        slide.image = new Image();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   162
        slide.image.onload = function() {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   163
            if (k === currentSlide) {
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   164
                showSlide();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   165
            }
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   166
        };
190
ebb8b58fc2b8 Added fragment handling in slideshow
veltr
parents: 134
diff changeset
   167
        slide.image.src = imgurlbase + slide.src;
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   168
    });
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   169
    
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   170
    showSlide();
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   171
    
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   172
    jqwin.resize(showSlide);
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   173
    
206
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   174
    $(document).keydown(function(e) {
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   175
        if (e.keyCode === 122) { // F11
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   176
            fullScreen();
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   177
            return false;
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   178
        }
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   179
        if (e.keyCode === 32) { // Space
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   180
            jqControls.show();
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   181
            resetTO();
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   182
            toggleSlideShow();
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   183
            return false;
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   184
        }
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   185
        if (e.keyCode === 37) { // Left-Arrow
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   186
            prevSlide(true);
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   187
            return false;
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   188
        }
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   189
        if (e.keyCode === 39) { // Right-Arrow
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   190
            nextSlide(true);
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   191
            return false;
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   192
        }
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   193
    });
24607434c13b Added keyboard control on slideshow
veltr
parents: 203
diff changeset
   194
    
120
b1e22c229870 Added slideshow
veltr
parents:
diff changeset
   195
});