You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lychee/src/scripts/view/main.js

140 lines
3.5 KiB

10 years ago
/**
* @description Used to view single photos with view.php
10 years ago
* @copyright 2015 by Tobias Reich
10 years ago
*/
var header = $('header'),
headerTitle = $('#title'),
imageview = $('#imageview'),
api_path = 'php/api.php',
infobox = $('#infobox');
10 years ago
$(document).ready(function(){
/* Event Name */
10 years ago
if ('ontouchend' in document.documentElement) eventName = 'touchend';
else eventName = 'click';
10 years ago
/* Window */
$(window).keydown(key);
/* Infobox */
10 years ago
infobox.find('.header .close').on(eventName, hideInfobox);
$(document) .on(eventName, '#infobox_overlay', hideInfobox);
$('#button_info') .on(eventName, showInfobox);
10 years ago
/* Direct Link */
10 years ago
$('#button_direct').on(eventName, function() {
10 years ago
var link = $('#imageview #image').css('background-image').replace(/"/g,'').replace(/url\(|\)$/ig, '');
window.open(link, '_newtab');
10 years ago
});
10 years ago
loadPhotoInfo(gup('p'));
10 years ago
});
10 years ago
key = function(e) {
10 years ago
var code = (e.keyCode ? e.keyCode : e.which);
if (code===27) {
hideInfobox();
e.preventDefault();
}
10 years ago
}
getPhotoSize = function(photo) {
// Size can be 'big', 'medium' or 'small'
// Default is big
// Small is centered in the middle of the screen
var size = 'big',
scaled = false,
hasMedium = photo.medium!=='',
pixelRatio = window.devicePixelRatio,
view = {
width: $(window).width()-60,
height: $(window).height()-100
};
// Detect if the photo will be shown scaled,
// because the screen size is smaller than the photo
if (photo.width>view.width||
photo.width>view.height) scaled = true;
// Calculate pixel ratio of screen
if (pixelRatio!==undefined&&pixelRatio>1) {
view.width = view.width * pixelRatio;
view.height = view.height * pixelRatio;
}
10 years ago
// Medium available and
// Medium still bigger than screen
if (hasMedium===true&&
(1920>view.width&&1080>view.height)) size = 'medium';
10 years ago
// Photo not scaled
// Photo smaller then screen
if (scaled===false&&
(photo.width<view.width&&
photo.width<view.height)) size = 'small';
10 years ago
return size;
10 years ago
}
10 years ago
showInfobox = function() {
10 years ago
10 years ago
$('body').append("<div id='infobox_overlay' class='fadeIn'></div>");
infobox.addClass('active');
10 years ago
}
10 years ago
hideInfobox = function() {
10 years ago
10 years ago
$('#infobox_overlay').removeClass('fadeIn').addClass('fadeOut');
setTimeout(function() { $('#infobox_overlay').remove() }, 300);
infobox.removeClass('active');
10 years ago
}
10 years ago
loadPhotoInfo = function(photoID) {
10 years ago
var params = 'function=getPhoto&photoID=' + photoID + '&albumID=0&password=""';
10 years ago
$.ajax({type: 'POST', url: api_path, data: params, dataType: 'json', success: function(data) {
10 years ago
var size = getPhotoSize(data);
10 years ago
if (!data.title) data.title = 'Untitled';
document.title = 'Lychee - ' + data.title;
10 years ago
headerTitle.html(data.title);
10 years ago
imageview.attr('data-id', photoID);
if (size==='big') imageview.html("<div id='image' style='background-image: url(" + data.url + ");'></div>");
else if (size==='medium') imageview.html("<div id='image' style='background-image: url(" + data.medium + ");'></div>");
else imageview.html("<div id='image' class='small' style='background-image: url(" + data.url + "); width: " + data.width + "px; height: " + data.height + "px; margin-top: -" + parseInt((data.height/2)-20) + "px; margin-left: -" + data.width/2 + "px;'></div>");
10 years ago
imageview
.removeClass('fadeOut')
.addClass('fadeIn')
.show();
10 years ago
10 years ago
infobox.find('.wrapper').html(build.infoboxPhoto(data, true));
10 years ago
}, error: ajaxError });
}
ajaxError = function(errorThrown, params, data) {
10 years ago
console.error({
description: errorThrown,
params: params,
response: data
});
10 years ago
}