119 lines
4.4 KiB
PHP
119 lines
4.4 KiB
PHP
<!DOCTYPE html>
|
|
<!-- Copyright (C) 2021 Alexander Rosenberg
|
|
- This file is AGPL v3. See LICENSE file for more information
|
|
-->
|
|
<html>
|
|
<head>
|
|
<?php
|
|
const INITIAL_ALBUMS = 15;
|
|
require 'options.php';
|
|
require 'library.php';
|
|
require 'Album.php';
|
|
if ($_SERVER['REQUEST_METHOD'] != 'GET' && $_SERVER['REQUEST_METHOD'] != 'HEAD') {
|
|
http_response_code(406);
|
|
display_error_message('Request method not supported');
|
|
exit(0);
|
|
}
|
|
?>
|
|
<title>
|
|
<?php
|
|
echo htmlspecialchars($LIBRARY_INFO['name'], ENT_QUOTES | ENT_HTML5);
|
|
?>
|
|
</title>
|
|
<link rel="stylesheet" href="global.css" />
|
|
<link rel="stylesheet" href="index.css" />
|
|
<link rel="stylesheet" href="Album.css" />
|
|
<link rel="icon" type="image/svg" href="favicon.svg" />
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<div id="library-name">
|
|
<?php
|
|
echo htmlspecialchars($LIBRARY_INFO['name'], ENT_QUOTES | ENT_HTML5);
|
|
?>
|
|
</div>
|
|
</header>
|
|
<div id="thumbnail-grid-wrapper">
|
|
<?php
|
|
$size = min(count($LIBRARY_INFO['albums']), INITIAL_ALBUMS);
|
|
for ($i = 0; $i < $size; ++$i) {
|
|
$album = new Album($LIBRARY_INFO['albums'][$i]);
|
|
if (!$album->is_valid()) {
|
|
display_error_message("Could not open album: '" . $album->get_name() . "'");
|
|
} else {
|
|
echo $album->get_html();
|
|
}
|
|
}
|
|
?>
|
|
</div>
|
|
<script>
|
|
var last_index = <?php echo $size; ?> - 1;
|
|
var thumbnail_wrapper = document.getElementById('thumbnail-grid-wrapper');
|
|
var last_album = thumbnail_wrapper.children[last_index];
|
|
var all_images = <?php echo $size < INITIAL_ALBUMS ? 'true' : 'false'; ?>;
|
|
|
|
function get_more_images() {
|
|
if (!all_images) {
|
|
var req = new XMLHttpRequest();
|
|
req.open('GET', 'get-album-entries.php?start=' + (last_index + 1) + '&end=' + (last_index + <?php echo INITIAL_ALBUMS; ?>));
|
|
|
|
req.onreadystatechange = function() {
|
|
var DONE = 4;
|
|
var OK = 200;
|
|
if (req.readyState === DONE) {
|
|
if (req.status === OK) {
|
|
if (req.responseText.length === 0) {
|
|
all_images = true;
|
|
} else {
|
|
observer.unobserve(last_album);
|
|
last_index += <?php echo INITIAL_ALBUMS; ?>;
|
|
thumbnail_wrapper.innerHTML += req.responseText;
|
|
last_album = thumbnail_wrapper.children[last_index];
|
|
observer.observe(last_album);
|
|
}
|
|
} else {
|
|
thumbnail_wrapper.innerHTML += '<div style="font-size: 2vw; color: red;">Could not connect to server</div>';
|
|
all_images = true;
|
|
}
|
|
}
|
|
}
|
|
req.send(null);
|
|
}
|
|
}
|
|
|
|
var observer = new IntersectionObserver(function(entries) {
|
|
if(entries[0].isIntersecting === true) {
|
|
get_more_images();
|
|
}
|
|
}, { threshold: [0] });
|
|
|
|
observer.observe(last_album);
|
|
|
|
// Handle resize stuff
|
|
function windowResizeHandler() {
|
|
albums = document.querySelectorAll('.album-wrapper');
|
|
if (window.innerWidth < 1000) {
|
|
albums.forEach((e) => {
|
|
img = e.firstChild;
|
|
c = e.children[1];
|
|
t = e.lastChild;
|
|
img.style.width = "85vw";
|
|
img.style.height = "85vw";
|
|
});
|
|
} else {
|
|
albums.forEach((e) => {
|
|
img = e.firstChild;
|
|
c = e.children[1];
|
|
t = e.lastChild;
|
|
img.style.width = "20vw";
|
|
img.style.height = "20vw";
|
|
});
|
|
}
|
|
}
|
|
|
|
window.addEventListener("resize", windowResizeHandler, true);
|
|
window.onload = windowResizeHandler;
|
|
</script>
|
|
</body>
|
|
</html>
|