git » galala » flex » tree

[flex] / static / galala.js

/* Operations on the images list */

function findImageIndex(anchor) {
    for (var i = 0; i < images.length; i++) {
        if (images[i].anchor == anchor) {
            return i;
        }
    }

    return -1;
}

function nextImageIndex(anchor) {
    var i = findImageIndex(anchor) + 1;
    if (i >= images.length) {
        return images.length - 1;
    }

    return i;
}

function nextImage(anchor) {
    return images[nextImageIndex(anchor)];
}

function prevImageIndex(anchor) {
    var i = findImageIndex(anchor) - 1;
    if (i < 0) {
        return 0;
    }

    return i;
}

function prevImage(anchor) {
    return images[prevImageIndex(anchor)];
}


/* Operations on the main <img> */

function setMain(anchor) {
    var main = $("img#main");
    var img = images[findImageIndex(anchor)];
    main.attr("src", img.image);
    main.attr("alt", img.title);
    main.data().anchor = img.anchor;

    $("span#title").text(img.title);
    $("span#desc").text(img.description);

    document.location.hash = img.anchor;

    scrollToThumbnail(img.anchor);
    updatePreload();
}

function scrollToThumbnail(anchor) {
    // We need to use the long selector because anchor can have a '.'.
    var thumb = $('img[id="' + anchor + '"]');

    $("div.thumbnails").animate(
        { scrollTop: thumb[0].offsetTop },
        { duration: "fast"});
}

function advanceMain() {
    var next = nextImage($("img#main").data("anchor"));
    setMain(next.anchor);
}

function retreatMain() {
    var prev = prevImage($("img#main").data("anchor"));
    setMain(prev.anchor);
}

function updatePreload() {
    var next = nextImage($("img#main").data("anchor"));
    var preload1 = $("img#preload1");
    preload1.attr("src", next.image);

    next = nextImage(next.anchor);
    var preload2 = $("img#preload2");
    preload2.attr("src", next.image);
}

$(document).ready(function() {
    // Binding for clicks, swipes and keys.
    $("img#main").click(advanceMain);

    $("img#main").swipe({
        swipeLeft: advanceMain,
        swipeRight: retreatMain,
    });

    $("html").keydown(function(e) {
        switch (e.which) {
            case 39: // Right.
                advanceMain();
                break;
            case 37: // Left.
                retreatMain();
                break;
        }
    });

    $("img.thumb").click(function() {
        var anchor = this.id;
        setMain(anchor);
    });

    // Set the first image.
    if (document.location.hash != "") {
        setMain(document.location.hash.substr(1));
    } else {
        setMain(images[0].anchor);
    }
});