1
0
This repository has been archived on 2021-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
gallery3-contrib/js/pear.js
Fredrik Erlandsson f17acfd6c8 Squashed '3.0/themes/pear4gallery3/' changes from b24d37b..11c3c2a
11c3c2a version 3.0
063ad6f move of context menu to top of thumb
0188d22 closes #4, now the form-dialog is just loaded once
508366d annoying "
4047609 fixes #8, support for slideshow duration
5ed2ff0 updated options page
b65bc7b fixes #7, image animation
d6d5319 Removed temporary sidebarToggle
9499b7b Attempt to fix #3, support for a sidebar
13b0419 fixes #5, issues with hovering thumbnails
e0fcc41 Fix for broken slideshow, fixes #6
0bdd3c6 Fix for slideShowImages when album is empty.
ca62330 Fix for broken dialogs
f0d9e34 Copy of gallery.dialog.js from G3.0.0
e4a18f3 Updated jqury version.
7be51a8 Added support for breadcrumbs and sidebar (enable via theme options)
fad0fe4 Hash update
9d3b519 Fix for detail hash Imgage preload
a2cfa32 Fix for IE Support for using 'esc' to hide detailView
41a9863 fix so only Grid mode is supported if album does not contain any images
92c70a1 themeing the exif data
22386c3 Combined viewMode.png and removed some depricated files.
dc10f0a New icons.
cad0376 Fix for height of thumbs.
5c21b24 updated paginator with support for hash
6a13dab Updated theme
b305613 fix for pageheight, with paginator
ae87410 lNavBar fix
751bd86 New ui-theme
9a937a1 first attempt for item-option-overlay
d024eba Fix for setTimeout.
e167b2d JSLint take 2, reoder function reorder
82e0f38 Reindent and JSLint take 1.

git-subtree-dir: 3.0/themes/pear4gallery3
git-subtree-split: 11c3c2ac87
2012-01-10 15:07:23 +01:00

605 lines
21 KiB
JavaScript

/*jslint browser: true, regexp: true, sub: false, vars: false, white: false, nomen: false, sloppy: true, undef: false, plusplus: true */
/*global jQuery, $, Event, refresh, escape, unescape, slideshowImages, ImageFlow */
var viewMode = "";
var skimimg = 0;
var bgcolor = "black";
var detailViewMode = false;
var savedHeight = 0;
var savedWidth = 0;
var iRatio = 0, iWidth = 0, iHeight = 0;
var currentImg = 0;
var mosaicView = false;
var slideShowMode = false;
var slideShow = null;
var slideShowId;
var pearCarousel;
var hideHoverV = null;
var hovering = false;
var maxSize;
var mosaicEffect = "";
var slideshowTimeout = 5000;
function thumbPadding() {
var size, width, margin;
/* Padding on thumbs to make them flow nicer */
size = Math.ceil((mosaicView) ? $('#imgSlider').slider('value') / 2 : $('#imgSlider').slider('value')) + 10;
width = $('#mosaicGridContainer').innerWidth() - 15;
margin = width / Math.floor(width / size) - size;
// console.log(size, width, margin, "px");
$('.gallery-thumb').css({'margin-left': Math.ceil(margin / 2) + 'px', 'margin-right': Math.floor(margin / 2) + 'px'});
}
function setCookie(c_name, value, expiredays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie = c_name + "=" + escape(value) + ((expiredays === null) ? "" : ";expires=" + exdate.toGMTString());
}
function getCookie(c_name) {
if (document.cookie.length > 0) {
var c_start, c_end;
c_start = document.cookie.indexOf(c_name + "=");
if (c_start !== -1) {
c_start = c_start + c_name.length + 1;
c_end = document.cookie.indexOf(";", c_start);
if (c_end === -1) {
c_end = document.cookie.length;
}
return unescape(document.cookie.substring(c_start, c_end));
}
}
return "";
}
function mosaicResize() {
if ($('#mosaicGridContainer').length === 0) {
return; //no element found
}
var myWidth = 0, myHeight = 0;
if (typeof (window.innerWidth) === 'number') {
//Non-IE
myWidth = window.innerWidth;
myHeight = window.innerHeight;
} else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
//IE 6+ in 'standards compliant mode'
myWidth = document.documentElement.clientWidth;
myHeight = document.documentElement.clientHeight;
} else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
//IE 4 compatible
myWidth = document.body.clientWidth;
myHeight = document.body.clientHeight;
}
if ($('#imageflow').length !== 0) {
$('#imageflow').css({'height': (myHeight - 53) + 'px', 'width': (((myWidth * 0.5) < (myHeight - 53)) ? myWidth : ((myHeight - 65) * 2)) + 'px'});
}
$('#detailImageView').css({'height': myHeight - 165 + "px"});
if (iRatio > (myWidth / (myHeight - 165))) {
$('#img_detail').css({'height': myWidth / iRatio + "px", 'width': myWidth + "px"});
} else {
$('#img_detail').css({'height': myHeight - 165 + "px", 'width': (myHeight - 165) * iRatio + "px"});
}
if (iHeight < (myHeight - 165) && iWidth < myWidth) {
$('#img_detail').css({'height': iHeight + "px", 'width': iWidth + "px"});
}
myWidth = myWidth - 7;
myHeight = myHeight - $('#g-site-status').outerHeight(true) - $('#paginator').outerHeight(true);
$('#pearFlowPadd').css({'height': myHeight - 90 - (Math.round(myWidth / 2.4)) + 'px'});
myHeight -= 138;
$('#g-header').css('top', $('#gsNavBar').outerHeight(true) + $('#g-site-status').outerHeight(true) - 4);
if ($('#g-movie').length) {
myHeight += 18;
}
/*Sidebar*/
if ($('#sidebarContainer').is(':visible')) { myWidth = myWidth - $('#sidebarContainer').width(); }
$('#sidebarContainer').css('height', (myHeight + 53) + "px");
if (!mosaicView) {
$('#mosaicGridContainer').css({'height': (myHeight + 33) + "px", 'width': myWidth + "px"});
} else {
$('#mosaicDetail').css('width', Math.floor(myWidth * 0.65) + "px");
$('#mosaicGridContainer').css({'height': (myHeight + 33) + "px", 'width': Math.floor(myWidth * 0.35) + "px"});
//Resize the image..
myWidth = myWidth * 0.65;
if (iRatio > (myWidth / myHeight)) {
$('#mosaicImg').attr({height: myWidth / iRatio, width: myWidth});
} else {
$('#mosaicImg').attr({height: myHeight, width: myHeight * iRatio});
}
if (iHeight < myHeight && iWidth < myWidth) {
$('#mosaicImg').attr({height: iHeight, width: iWidth});
}
}
thumbPadding();
if ($('#conf_imageflow').length) {
refresh();
}
}
$(window).resize(function () {
if (window.innerHeight === savedHeight && window.innerWidth === savedWidth) { return; }
savedHeight = window.innerHeight;
savedWidth = window.innerWidth;
mosaicResize();
});
function getViewMode() {
var vm = detailViewMode ? "detail" : viewMode;
if (vm !== '') {
vm = "&viewMode=" + vm;
}
return vm;
}
function updateHash() {
var hash, img = "", val, i;
if (currentImg !== 0) {
img = "img=" + currentImg;
}
hash = "#" + img + getViewMode() + "&bgcolor=" + bgcolor;
if($('#paginator')) { $('#paginator a').each(function () { val = $(this).attr("href"); i = val.indexOf("#"); if (i !== -1) { val = val.substr(0, i); } $(this).attr("href", val + hash); });
}
window.location.hash = hash;
}
function swatchSkin(intSkin) {
setCookie('swatchSkin', intSkin, 1);
$('#black').removeClass().addClass("swatch");
$('#dkgrey').removeClass().addClass("swatch");
$('#ltgrey').removeClass().addClass("swatch");
$('#white').removeClass().addClass("swatch");
switch (intSkin) {
// dkgrey
case 'dkgrey':
case 1:
$('div.gallery-thumb-round').css('backgroundPosition', "-200px 0px");
$('#mosaicTable,.pear,.g-paginator').css('backgroundColor', "#262626");
$('p.giTitle').css("color", "#a9a9a9");
$("#dkgrey").addClass("dkgrey sel dkgrey-with-sel-with-swatch");
bgcolor = "dkgrey";
break;
// ltgrey
case 'ltgrey':
case 2:
$('div.gallery-thumb-round').css('backgroundPosition', "-400px 0px");
$('#mosaicTable,.pear,.g-paginator').css('backgroundColor', "#d9d9d9");
$('p.giTitle').css("color", "#333333");
$("#ltgrey").addClass("ltgrey sel ltgrey-with-sel-with-swatch");
bgcolor = "ltgrey";
break;
// white
case 'white':
case 3:
$('div.gallery-thumb-round').css('backgroundPosition', "-600px 0px");
$('#mosaicTable,.pear,.g-paginator').css('backgroundColor', "#ffffff");
$('p.giTitle').css("color", "#444444");
$("#white").addClass("white sel white-with-sel-with-swatch");
bgcolor = "white";
break;
// Black is default
default:
$('div.gallery-thumb-round').css('backgroundPosition', "0px 0px");
$('#mosaicTable,.pear,.g-paginator').css('backgroundColor', "#000");
$('p.giTitle').css("color", "#a3a3a3");
$("#black").addClass("black sel black-with-sel-with-swatch");
bgcolor = "black";
break;
}
updateHash();
}
//Set a updating timer so users can't update before the image has appeard..
function swatchImg(imageId) {
if (imageId < 0 || imageId >= slideshowImages.length) {
return;
}
currentImg = imageId;
iWidth = parseFloat(slideshowImages[imageId][2].replace(/,/gi, "."));
iHeight = parseFloat(slideshowImages[imageId][3].replace(/,/gi, "."));
iRatio = iWidth / iHeight;
if (isNaN(iRatio)) {
iRatio = 1.3333;
}
if (mosaicView) {
var options = {};
if ( mosaicEffect === "scale" ) { options = { percent: 0 }; }
$('#mosaicDetail').hide(mosaicEffect, options, "fast", function () {
$('#imageTitle').html("<h2>" + slideshowImages[imageId][4] + "</h2>");
$('#mosaicImg').attr('src', slideshowImages[imageId][0]);
$('#mosaicImg').css('cursor', "pointer");
$('#mosaicDetail').show(mosaicEffect, options, "slow");});
}
mosaicResize();
/* Set controls for hover view. */
if (currentImg === 0) {
$('#prev_detail').addClass('prev_detail_disabled');
$('#prev_detail').removeClass('prev_detail');
} else {
$('#prev_detail').removeClass('prev_detail_disabled');
$('#prev_detail').addClass('prev_detail');
}
if (currentImg === slideshowImages.length - 1) {
$('#next_detail').addClass('next_detail_disabled');
$('#next_detail').removeClass('next_detail');
} else {
$('#next_detail').removeClass('next_detail_disabled');
$('#next_detail').addClass('next_detail');
}
/* Update image and title in focus view */
$('#img_detail').attr('src', slideshowImages[currentImg][0]);
$('#imageTitleLabel').html("<h2>" + slideshowImages[imageId][4] + "</h2>");
if (detailViewMode) {
//Image count.
$.get(slideshowImages[currentImg][6]);
}
updateHash();
$('#info_detail').attr('href', slideshowImages[currentImg][1]);
}
function hideHoverView() {
if (!hovering) { $('#hoverView').fadeOut(); }
hideHoverV = null;
}
function showHoverView() {
if (hideHoverV !== null) { clearTimeout(hideHoverV); }
$('#hoverView').show();
hideHoverV = setTimeout("hideHoverView()", 3000);
}
function focusImage(id, redirected) {
currentImg = id;
$('#imageTitleLabel').html("<h2>" + slideshowImages[id][4] + "</h2>");
$('#play_detail').hide();
$('#pause_detail').hide();
swatchImg(id);
$('#detailView').fadeIn('slow');
hideHoverV = setTimeout("hideHoverView()", 3000);
detailViewMode = true;
updateHash();
//Image count.
if (!redirected) { $.get(slideshowImages[currentImg][6]); }
$('#info_detail').attr('href', slideshowImages[currentImg][1]);
}
function toggleReflex(hide) {
if (hide) {
// $$('.Fer').each(function(s) { cvi_reflex.remove(s); });
$('mosaicGridContainer').select('img[class="Fer"]').each(function (s, index) { Event.observe(s, 'click', function () { if (mosaicView) { swatchImg(index); } else { focusImage(index); } }); });
} else {
// $$('.Fer').each(function(s) { cvi_reflex.add(s, {height: 20, distance: 0 }); });
$('mosaicGridContainer').select('canvas[class="Fer"]').each(function (s, index) { Event.observe(s, 'click', function () { if (mosaicView) { swatchImg(index); } else { focusImage(index); } }); });
}
}
function scaleIt(v, sliding) {
//if(maxSize<100)maxSize=150;
// Remap the 0-1 scale to fit the desired range
//v=.26+(v*(1.0-.26));
var size = (mosaicView) ? v / 2 : v;
toggleReflex(true);
$(".p-photo").each(function (i) {
$(this).attr({height: size + 'px', width: size + 'px'});
$(this).css({height: size + 'px', width: size + 'px'});
});
$(".g-photo").css({width: size + 'px'});
if (!mosaicView && !sliding) {
toggleReflex(false);
}
thumbPadding();
}
function checkCookie() {
var co = getCookie('slider');
if (co !== null && co !== "") {
$('#imgSlider').slider("value", co);
}
co = getCookie('swatchSkin');
if (co !== null && co !== "") {
swatchSkin(co);
} else {
swatchSkin('black');
}
}
function getAlbumHash(img) {
return "#img=" + img + getViewMode() + "&bgcolor=" + bgcolor;
}
function togglePlayPause() {
//We are paused
if (slideShow === null) {
$('#play_detail').hide();
$('#pause_detail').show();
slideShow = setTimeout("slideShowUpdate()", slideshowTimeout);
} else { //We are playing
$('#pause_detail').hide();
$('#play_detail').show();
clearTimeout(slideShow);
slideShow = null;
}
}
function startSlideshow() {
slideShowMode = true;
$('#play_detail').hide();
$('#pause_detail').show();
$('#detailView').fadeIn('slow');
hideHoverV = setTimeout("hideHoverView()", 3000);
slideShowId = currentImg;
swatchImg(slideShowId);
togglePlayPause();
}
function slideShowUpdate() {
slideShowId = slideShowId + 1;
if (slideShowId > slideshowImages.length) {
slideShowId = 0;
}
swatchImg(slideShowId);
slideShow = setTimeout("slideShowUpdate()", slideshowTimeout);
}
function switchMode(mode) {
$('#mosaic,#grid,#carousel').removeClass("sel sel-with-viewSwitcher");
$('#' + mode).addClass("sel sel-with-viewSwitcher");
updateHash();
}
function switchToGrid(userSet) {
if (userSet === true) {
viewMode = "grid";
}
toggleReflex(true);
$('#pearImageFlow,#pearFlowPadd').hide();
$('#mosaicTable').show();
if (!$('#mosaicGridContainer').length) { return; }
mosaicView = false;
maxSize = 225;
checkCookie();
$('#mosaicDetail').hide();
$('#mosaicGridContainer').show();
$('p.giTitle,div.giInfo').each(function (s) { $(this).show(); });
switchMode('grid');
mosaicResize();
}
function switchToMosaic(userSet) {
if (userSet === true) {
viewMode = "mosaic";
}
toggleReflex(false);
$('#pearImageFlow,#pearFlowPadd').hide();
$('#mosaicTable').show();
if (!$('#mosaicGridContainer').length) { return; }
mosaicView = true;
maxSize = 125;
checkCookie();
$('#mosaicDetail').show();
$('#mosaicGridContainer').show();
$('p.giTitle,div.giInfo').each(function (s) { $(this).hide(); });
switchMode('mosaic');
swatchImg(currentImg);
mosaicResize();
}
function startImageFlow(userSet) {
var i, img;
if (userSet === true) {
viewMode = "carousel";
}
$('#mosaicTable').hide();
$('#pearImageFlow,#pearFlowPadd').show();
toggleReflex(true);
if (!pearCarousel) {
for (i = 0; i < slideshowImages.length; i++) {
//var img = '<div class="item"><img class="content" src="' + slideshowImages[i][0] + '"/><div class="caption">' + $('#mosaicGridContainer img').eq(i).attr('alt') + '"</div></div>';
img = '<img src="' + slideshowImages[i][0] + '" longdesc="' + i + '" width="' + slideshowImages[i][2] + '" height="' + slideshowImages[i][3] + '" alt="' + slideshowImages[i][4] + '" style="display: none;">';
// console.log(img);
$('#pearImageFlow').append(img);
}
pearCarousel = new ImageFlow();
pearCarousel.init({ImageFlowID: 'pearImageFlow', aspectRatio: 2.4, imagesHeight: 0.6, opacity: true, reflections: false, startID: currentImg + 1, onClick: function () { focusImage($(this).attr('longdesc')); }, startAnimation: true, xStep: 200, imageFocusM: 1.7, imageFocusMax: 4, opacityArray: [10, 9, 6, 2], percentOther: 130, captions: false, slider: false});
}
switchMode('carousel');
mosaicResize();
}
function hideDetailView() {
$('#detailView').hide();
slideShowMode = detailViewMode = false;
if (slideShow !== null) { clearTimeout(slideShow); }
slideShow = null;
updateHash();
}
function setKeys() {
/* Fixes the back button issue */
/* window.onunload = function()
{
document = null;
}
*/
$(document).keydown(function (e) {
var charCode = e.keyCode || e.which;
switch (charCode) {
case 32: /* Space */
if (slideShowMode) { togglePlayPause(); }
break;
case 39: /* Right arrow key */
case 78: /* N */
swatchImg(currentImg + 1);
// if($('imageflow')) handle(-1);
break;
case 80: /* P */
case 37: /* Left arrow key */
swatchImg(currentImg - 1);
// if($('imageflow')) handle(1);
break;
case 27: /* Esc-key */
hideDetailView();
break;
}
});
}
function bodyLoad(vm, bgcolor) {
var h, co, view;
viewMode = vm;
/* Parse hash */
h = $.parseQuery(window.location.hash.substring(1));
if (h.img !== undefined) {
currentImg = parseInt(h.img, 10);
}
if (h.bgcolor !== undefined) {
swatchSkin(h.bgcolor);
}
if (h.viewMode !== undefined) {
vm = h.viewMode;
}
/* end parse hash */
if (navigator.appVersion.search(/MSIE [0-7]/i) !== -1) {
$('.track').each(function (s) {$(this).css('top', '-16px'); }); //Fix for IE's poor page rendering.
}
/*
58.5 225
32.5 125
*/
$('#imgSlider').slider({ min: 75, max: 250, step: 2, value: 125,
slide: function (event, ui) { scaleIt(ui.value); },
change: function (event, ui) { scaleIt(ui.value); setCookie('slider', ui.value, '1'); } });
if (!$('#mosaicGridContainer').length) { $('#loading').hide(); maxSize = 0; return; }
//Set event for Thumb Click.
$('.p-photo').each(function (index) { $(this).click(function () { if (mosaicView) { swatchImg(index); } else {focusImage(index); } }); });
$('#mosaicDetail').click(function () { focusImage(currentImg); });
$('#prev_detail').click(function () { swatchImg(currentImg - 1); });
$('#next_detail').click(function () { swatchImg(currentImg + 1); });
co = getCookie('swatchSkin');
if (co === null || co === "") {
swatchSkin(bgcolor);
}
if (typeof slideshowImages !== 'undefined' && !slideshowImages.length) {
viewMode = vm = 'grid';
}
if (vm === 'detail') {view = viewMode; focusImage(currentImg, h.redirected);} else {view = viewMode = vm;}
switch (view) {
case 'carousel':
startImageFlow(false);
break;
case 'grid':
switchToGrid(false);
break;
case 'mosaic':
switchToMosaic(false);
break;
default:
mosaicResize();
checkCookie();
}
$('#loading').hide();
window.setTimeout("preFetch()", 500);
setKeys();
// Initialize thumbnail hover effect
$(".g-item").hover(
function() {
if(mosaicView) { return; }
// Insert a placeholder to hold the item's position in the grid
var placeHolder = $(this).clone().attr("id", "g-place-holder");
$(this).after($(placeHolder));
// Style and position the hover item
var position = $(this).position();
$(this).css("top", position.top).css("left", position.left);
$(this).addClass("g-hover-item");
// Initialize the contextual menu
$(this).gallery_context_menu();
// Set the hover item's height
$(this).height("auto");
var context_menu = $(this).find(".g-context-menu");
var adj_height = $(this).height() + context_menu.height();
if ($(this).next().height() > $(this).height()) {
$(this).height($(this).next().height());
} else if ($(this).prev().height() > $(this).height()) {
$(this).height($(this).prev().height());
} else {
$(this).height(adj_height);
}
},
function() {
var sib_height;
if (mosaicView) { return; }
// Reset item height and position
if ($(this).next().height()) {
sib_height = $(this).next().height();
} else {
sib_height = $(this).prev().height();
}
if ($.browser.msie && $.browser.version >= 8) {
sib_height = sib_height + 1;
}
$(this).css({"height": "", "position": "", "top": "", "left": ""});
// Remove the placeholder and hover class from the item
$(this).removeClass("g-hover-item");
$("#g-place-holder").remove();
}
);
if (slideshowImages.length !== 0) {
$(".viewSwitcher").hover( function() { $(this).addClass("hover-with-viewSwitcher"); }, function() { $(this).removeClass("hover-with-viewSwitcher"); });
$("#grid").click(function () { switchToGrid(true); });
$("#mosaic").click(function () { switchToMosaic(true); });
$("#carousel").click(function () { startImageFlow(true); });
$('#slideshow').click(function () { startSlideshow(); });
} else {
$("#grid, #mosaic, #carousel, #slideshow").addClass("disabled");
}
}
function preFetch() {
var i, cache = [];
for (i = 0; i < slideshowImages.length; i=i+1) {
// var tempImage = new Element('img', {'src': slideshowImages[i][0]});
var cacheImage = document.createElement('img');
cacheImage.src = slideshowImages[i][0];
cache.push(cacheImage);
}
}
function sidebarInit(mode) {
switch (mode) {
case 'toggle':
$('#sidebarContainer').width(5);
$('#sidebarContainer').hover(function () {
$('#sidebarContainer').animate( { width: '225' }, 500);
//$('#sidebar').show('slide', { direction: 'right'}, 1000);
$('#mosaicGridContainer').animate( { width: '-=225' }, 500, function () { mosaicResize(); }); },
function () {
$('#sidebarContainer').animate( { width: '5' }, 500);
//$('#sidebar').hide('slide', { direction: 'right'}, 1000);
$('#mosaicGridContainer').animate( { width: '+=225' }, 500, function () { mosaicResize(); });
});
break;
case 'static':
break;
//case 'hidden':
default:
$('#sidebarContainer').hide();
break;
}
}