Update default theme

This commit is contained in:
Knah Tsaeb 2025-02-07 15:09:04 +01:00
parent c917a1a6e6
commit ad96ebfe89
56 changed files with 574 additions and 280 deletions

1
.gitignore vendored
View file

@ -6,5 +6,6 @@ composer.lock
/public/photos/*
!/public/photos/.gitkeep
!/public/photos/Demo
/public/photos/Demo/File example/
/cache/*
!/cache/.gitkeep

View file

@ -2,7 +2,7 @@ FROM ubuntu/apache2
MAINTAINER Knah Tsaeb <knah-tsaeb_nanogal@knah-tsaeb.org>
LABEL version="0.2.0"
LABEL version="0.3.0"
LABEL description="Apache 2 / PHP / NanoGal"
ENV DEBIAN_FRONTEND=noninteractive
@ -30,7 +30,7 @@ WORKDIR /var/www/
ENTRYPOINT "start.sh"
# Build image
# docker build -t nanogal:0.2.0 .
# docker build -t nanogal:0.3.0 .
# Run container
# docker run -v nanogal_datas:/var/www/datas:ro -v nanogal_photos:/var/www/public/photos:ro -e TZ=UTC -p 8187:80 --name nanogal nanogal:0.2.0
# docker run -v /opt/nanogal/datas:/var/www/datas:ro -v /opt/nanogal/photos:/var/www/public/photos:ro -e TZ=UTC -p 8187:80 --name nanogal nanogal:0.2.0
# docker run -v nanogal_datas:/var/www/datas:ro -v nanogal_photos:/var/www/public/photos:ro -e TZ=UTC -p 8187:80 --name nanogal nanogal:0.3.0
# docker run -v /opt/nanogal/datas:/var/www/datas:ro -v /opt/nanogal/photos:/var/www/public/photos:ro -e TZ=UTC -p 8187:80 --name nanogal nanogal:0.3.0

View file

@ -6,7 +6,7 @@ NanoGal is fork of [MinigalNano](https://github.com/sebsauvage/MinigalNano) and
Why fork ? Because I love understand and adapte application for my usage.
NanoGal is a very simple image gallery. It adheres to the KISS principle and is very easy to install. NanoGal does not have a web admin interface: You just upload your images in the photo folder on your server (using FTP, SFTP...). It only requires php and GD (no database, no special libraries like PEAR or ImageMagick).
NanoGal is a very simple image gallery. It adheres to the KISS principle and is very easy to install. NanoGal does not have a web admin interface: You just upload your images in the photo folder on your server (using FTP, SFTP...). It's only requires PHP 8 with two extension mbstring and GD (no database), you need composer too.
NanoGal uses a javascript [gLightBox](https://github.com/biati-digital/glightbox), but it degrades gracefully if javascript is disabled.
@ -35,7 +35,7 @@ Image use
```shell
wget https://forge.leslibres.org/Knah-Tsaeb/NanoGal/raw/branch/main/Dockerfile
docker buildx build --no-cache -t nanogal:0.2.0 .
docker buildx build --no-cache -t nanogal:0.3.0 .
```
#### Start container
@ -43,30 +43,31 @@ docker buildx build --no-cache -t nanogal:0.2.0 .
You can use native docker volume.
```shell
docker run -v nanogal_datas:/var/www/datas:ro -v nanogal_photos:/var/www/public/photos:ro -e TZ=UTC -p 8187:80 --name nanogal nanogal:0.2.0
docker run -v nanogal_datas:/var/www/datas:ro -v nanogal_photos:/var/www/public/photos:ro -e TZ=UTC -p 8187:80 --name nanogal nanogal:0.3.0
```
Or use absolute path
```shell
docker run -v /opt/nanogal/datas:/var/www/datas:ro -v /opt/nanogal/photos:/var/www/public/photos:ro -e TZ=UTC -p 8187:80 --name nanogal nanogal:0.2.0
docker run -v /opt/nanogal/datas:/var/www/datas:ro -v /opt/nanogal/photos:/var/www/public/photos:ro -e TZ=UTC -p 8187:80 --name nanogal nanogal:0.3.0
```
### Classic way
- Requires `php` (8 or higher) and two extension `php-gd` and `php-mbstring`.
- Place all the files in a directory on your server.
- Run `composer install --no-dev`
- Configure your web server to serve `public/` directory.
- Upload your photos to the `photos/` subdirectory.
- That's all.
## Usage
### WARNING
> <svg id="admonition-caution" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" style="width:2em;fill:#c43933;vertical-align:middle"><path d="M7.254.545L.545 7.255v9.49l6.71 6.71h9.49l6.71-6.71v-9.49l-6.71-6.71h-9.49zm.79 1.91h7.911l5.59 5.59v7.91l-5.59 5.59h-7.91l-5.59-5.59V8.046l5.59-5.59zm3 3.815v7.64h1.912V6.27h-1.912zm0 9.55v1.91h1.912v-1.91h-1.912z" transform="translate(-1.142 -1.142) scale(2.09516)"/></svg> Caution<br>
>
> ### When you upload your file, some data are share, particularly [Exif data](https://en.wikipedia.org/wiki/Exif). Exif data can expose the GPS coordinates of where the photos/videos were taken. This may not be what you want.
> If you want, you can delete this data. Under GNU/Linux you can install `exiftool`. In the `bin` directory you have bash script (`remove_gps_datas.sh`) for remove this data in all file present in your gallery. USE AT OUR RISK.
When you upload your file, some data are share, particularly [Exif data](https://en.wikipedia.org/wiki/Exif). Exif data can expose the GPS coordinates of where the photos/videos were taken. This may not be what you want.
If you want, you can delete this data. Under GNU/Linux you can install `exiftool`. In the `bin` directory you have bash script (`remove_gps_datas.sh`) for remove this data in all file present in your gallery. USE AT OUR RISK.
### Adding your photos
@ -101,10 +102,11 @@ If some thumbnails are wrong, you can purge this directory: Thumbnails will be a
<?php
$userConfig = [
'templateFile' => 'board', // Template filename (must be placed in 'public/templates' folder)
'iconsTheme' => null, // Icons theme (must be placed in 'public/templates/{iconsTheme}/assets/icons folder)
'title' => 'NanoGal', // Text to be displayed in browser titlebar
'description' => 'My gallery', // Use in meta tag "description"
'author' => 'NanoGal', // Your name
'skipObjects' => ['comment.html', '.gitkeep', 'aFolder', 'aFile.ext'], //Those files and folders will not be displayed
'skipObjects' => ['comment.html', '.gitkeep', 'aFolder', 'aFile.ext'], // Those files and folders will not be displayed
'imageCaptionPosition' => 'right', // Position of caption in lightbox
'sortBy' => 'name', // Sort by name or date
'orderBy' => 'desc', // Order by asc or desc
@ -119,6 +121,7 @@ $userConfig = [
| Option | Type | Default | Description |
| --- | --- | --- | --- |
| templateFile | string | board | Template filename (must be placed in 'public/templates' folder) |
| iconsTheme | string | null | Icons theme (must be placed in 'public/templates/{iconsTheme}/assets/icons folder) |
| title | string | NanoGal | Text to be displayed in browser titlebar |
| description | string | My gallery | Use in meta tag "description" |
| author | string | NanoGal | Your name |
@ -132,11 +135,20 @@ $userConfig = [
| showShareLink | boll | false | Show share link for thumb, full, markdown link (thumb + link to full) |
| nbItemsAtom | int | 25 | Number of item in atom feed
#### Notes
If you change the thumbsize, thumbnails are not re-create. If the difference between older and newer size are small, I think you don't need regen all thumb. But if you prefer, you can delete `cache/thumbs/*` for force re-create thumbnails.
> <svg version="1.1" id="admonition-warning" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" style="width:2em; fill:#cc5e20;vertical-align:middle"><path d="M24 0a2 2 0 00-1.79 1.105l-22 44A2 2 0 002 48h44a2 2 0 001.79-2.895l-22-44A2 2 0 0024 0zm0 6.473L42.764 44H5.236L24 6.473zm-2.95 10.406l.872 16.828h4.19l.872-16.828h-5.933zm2.968 19.55c-.838 0-1.56.223-2.164.665-.582.442-.874 1.197-.874 2.267 0 1.024.292 1.77.874 2.235.605.442 1.326.664 2.164.664.814 0 1.511-.222 2.093-.664.605-.466.909-1.21.909-2.235 0-1.07-.304-1.825-.909-2.267-.582-.442-1.279-.664-2.093-.664z"/></svg> Warning<br>
>
> The `skipObjects` option hide folder or/and picture, but not blocking access. The ressource can be show in browser with direct URL.
>
> It's not a bug, it's a feature :-) For example, you can have a hidden folder containing images for your blog. The folder won't be directly visible in your gallery, but the images inside it can still be used directly in an article.
If you change any parameter, the cache file (html file and atom file) are delete and recreate.
> <svg version="1.1" id="admonition-note" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" style="width:2em; fill:#206ccc;vertical-align:middle"><path d="M24 0C10.745 0 0 10.745 0 24s10.745 24 24 24 24-10.745 24-24S37.255 0 24 0zm0 4c10.587 0 20 9.413 20 20s-9.413 20-20 20S4 34.587 4 24 13.413 4 24 4zm-1.988 9v4.002h3.98V13h-3.98zM20 19.016v3.998h2v7.984h-2V35h8.004v-4.002h-2.002V19.016H20z"/></svg> Note <br>
>
>If you change the thumbsize, thumbnails are not re-create. If the difference between older and newer size are small, I think you don't need regen all thumb. But if you prefer, you can delete `cache/thumbs/*` for force re-create thumbnails.
>
If you change any parameter in config, the cache file (html file and atom file) are delete and recreate.
## Ideas
@ -166,11 +178,14 @@ The same idea can be use with another sync tool of course.
NanoGal is licensed under the GNU AFFERO GENERAL PUBLIC LICENSE v3 (https://gnu.org/licenses/agpl-3.0.txt).
Icons :
Base icons (public/assets/icons) :
- Author: [Vectopus](https://github.com/Vectopus/Atlas-icons-font?ref=svgrepo.com)
- License: [MIT License](https://github.com/Vectopus/Atlas-icons-font/blob/main/LICENSE)
- Collection: [Atlas Variety Line Icons](https://www.svgrepo.com/collection/atlas-variety-line-icons/)
KT Icons :
- See [KT-Color-Scheme](https://forge.leslibres.org/Knah-Tsaeb/KT-Color-Scheme) for all detail
Origin
- [MinigalNano by SebSauvage](https://github.com/sebsauvage/MinigalNano)

View file

@ -16,17 +16,18 @@ class FileAndDir {
private $config = [];
private $fileExtensions = [
'deny' => ['sh', 'html', 'js', 'vbs', 'exe', 'md'],
'txt' => ['txt', 'md'],
'img' => ['jpeg', 'jpg', 'jpe', 'bmp', 'webp', 'gif', 'png'],
'pdf' => ['pdf'],
'zip' => ['7z', 'zip', 'gz', 'tar', 'rar', 'r[0-9]{2,}'],
'doc' => ['odt', 'doc', 'docx'],
'pres' => ['odp', 'ppt', 'pptx'],
'spread' => ['ods', 'xls', 'xlsx'],
'video' => ['ogv', 'mp4', 'mpg', 'mpeg', 'mov', 'avi', 'wmv', 'flv', 'webm'],
'audio' => ['aiff', 'aif', 'wma', 'aac', 'flac', 'mp3', 'ogg', 'm4a'],
'file-text' => ['txt', 'md'],
'file-img' => ['jpeg', 'jpg', 'jpe', 'bmp', 'webp', 'gif', 'png'],
'file-pdf' => ['pdf'],
'file-zip' => ['7z', 'zip', 'gz', 'tar', 'rar', 'r[0-9]{2,}'],
'file-doc' => ['odt', 'doc', 'docx'],
'file-pres' => ['odp', 'ppt', 'pptx'],
'file-spread' => ['ods', 'xls', 'xlsx'],
'file-video' => ['ogv', 'mp4', 'mpg', 'mpeg', 'mov', 'avi', 'wmv', 'flv', 'webm'],
'file-audio' => ['aiff', 'aif', 'wma', 'aac', 'flac', 'mp3', 'ogg', 'm4a'],
];
private $appUrl;
private $iconsTheme = '/assets/icons/';
/**
* Initializes the object with directory paths and configuration settings.
@ -55,6 +56,9 @@ class FileAndDir {
if ($config['showShareLink'] === true) {
$this->appUrl = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'];
}
if ($config['iconsTheme'] !== null) {
$this->iconsTheme = 'templates/' . $config['iconsTheme'] . '/assets/icons/';
}
}
/**
@ -80,13 +84,13 @@ class FileAndDir {
$path .= $item;
if ($index === count($navitems) - 1) {
$breadcrumb_navigation .= '<li>'.htmlspecialchars($item).'</li>';
$breadcrumb_navigation .= '<li>' . htmlspecialchars($item) . '</li>';
} else {
$breadcrumb_navigation .= '<li><a href="?dir=/' . htmlspecialchars($path) . '">' . htmlspecialchars($item) . '</a></li>';
$path .= '/';
}
}
return $breadcrumb_navigation.'</ul>';
return $breadcrumb_navigation . '</ul>';
} else {
return '';
}
@ -138,16 +142,20 @@ class FileAndDir {
}
if (is_dir($this->currentDir . '/' . $file)) {
if ($file != "." && $file != "..") {
$type = 'folder';
if ($this->defineThumbnailDir($file)) {
$thumb = $this->makeFolderThumbUrl($file);
} else {
$thumb = $this->getfirstImage($file);
}
if (str_ends_with($thumb, 'folder-empty.svg')) {
$type = 'folder-empty';
}
$listDir[] = [
'name' => $file,
'thumb' => $thumb,
'link' => '?dir=' . urlencode($this->requestedDir . '/' . $file),
'type' => 'folder',
'type' => $type,
'date' => date("Y-m-d", filemtime($this->currentDir . '/' . $file)),
'size' => filesize($this->currentDir . '/' . $file),
'dataAttr' => null,
@ -160,8 +168,12 @@ class FileAndDir {
if ($extension === 'deny') {
continue;
}
if ($extension !== 'img') {
$thumb = '/assets/images/filetype_' . $extension . '.svg';
if ($extension !== 'file-img') {
if (file_exists($this->iconsTheme . $extension . '.svg')) {
$thumb = $this->iconsTheme . $extension . '.svg';
} else {
$thumb = '/assets/icons/' . $extension . '.svg';
}
} else {
$thumb = $this->makeImageThumbUrl($file);
}
@ -210,7 +222,7 @@ class FileAndDir {
if (in_array($directory->getFilename(), $this->config['skipObjects'])) {
continue;
}
if (in_array($file->getExtension(), $this->fileExtensions['img'])) {
if (in_array($file->getExtension(), $this->fileExtensions['file-img'])) {
$allFile[] = [
'url' => $this->appUrl . '/' . $file->getPathname(),
'thumb' => $this->appUrl . '/' . $this->makeImageThumbUrl($file->getPathname()),
@ -236,13 +248,11 @@ class FileAndDir {
*
* @param string $file The name of the file whose extension is to be checked.
*
* @return string The category name of the file type based on its extension. Possible values
* include 'img', 'md', 'pdf', 'zip', 'rar', 'tar', 'gzip', 'doc', 'pres',
* 'ods', 'video', 'audio', or 'other' if the extension is not recognized.
* @return string The category name of the file type based on its extension or 'other' for unknow file
*/
private function getExtension(string $file): string {
if (!is_readable($this->currentDir . '/' . $file) || !is_file($this->currentDir . '/' . $file)) {
return 'broken';
return 'file-broken';
}
$fileExtension = strtolower(pathinfo($file, PATHINFO_EXTENSION));
@ -253,7 +263,7 @@ class FileAndDir {
}
}
}
return 'other';
return 'file-other';
}
/**
@ -311,10 +321,10 @@ class FileAndDir {
private function makeImageThumbUrl(string $file): string {
$pathinfo = pathinfo($file);
$ext = strtolower($pathinfo['extension']);
if (in_array($ext, $this->fileExtensions['img'])) {
if (in_array($ext, $this->fileExtensions['file-img'])) {
$imageName = $file;
if(empty($this->currentDir)){
if (empty($this->currentDir)) {
$path = $imageName;
} else {
$path = $this->currentDir . '/' . $imageName;
@ -328,7 +338,11 @@ class FileAndDir {
'&amp;'
);
} else {
$imgParams = 'assets/images/default.svg';
if (file_exists($this->iconsTheme . 'folder-empty.svg')) {
$imgParams = $this->iconsTheme . 'folder-empty.svg';
} else {
$imgParams = '/assets/icons/folder-empty.svg';
}
}
return $imgParams;
}
@ -346,7 +360,12 @@ class FileAndDir {
*/
private function getFirstImage(string $dir): string {
$fullPath = $this->currentDir . '/' . $dir;
$imageName = 'assets/images/default.svg';
if (file_exists($this->iconsTheme . 'folder-empty.svg')) {
$imageName = $this->iconsTheme . 'folder-empty.svg';
} else {
$imageName = '/assets/icons/folder-empty.svg';
}
if (!is_dir($fullPath)) {
return $imageName;
@ -362,7 +381,7 @@ class FileAndDir {
continue;
}
$ext = strtolower($pathinfo['extension']);
if (in_array($ext, $this->fileExtensions['img'])) {
if (in_array($ext, $this->fileExtensions['file-img'])) {
$imageName = 'createthumb.php?' . http_build_query(
array(
'filename' => $fullPath . '/' . $file
@ -516,7 +535,7 @@ class FileAndDir {
* @return string|null The Lightbox class name if the resource type is valid, otherwise `null`.
*/
static function addToLightBox(string $ressourceType): string|null {
if (in_array($ressourceType, ['video', 'img'])) {
if (in_array($ressourceType, ['file-video', 'file-img'])) {
return 'glightbox';
}
return null;

View file

@ -27,6 +27,6 @@
"tests"
],
"dependencies": {
"glightbox": "^3.3.0"
"glightbox": "^3.3.1"
}
}

View file

@ -1,12 +1,41 @@
{
"require": {
"stefangabos/zebra_image": "^2.8",
"league/commonmark": "^2.5"
"stefangabos/zebra_image": "^3.0",
"league/commonmark": "^2.6"
},
"autoload": {
"psr-4": {
"App\\" : "app/",
"App\\": "app/",
"Utils\\": "app/"
}
},
"repositories": {
"kt-color-scheme": {
"type": "vcs",
"url": "https://forge.leslibres.org/knah-tsaeb/kt-color-scheme"
}
},
"scripts": {
"copy-css": "php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/css/kt-scheme.css', 'public/templates/default/assets/css/kt-scheme.css');\"",
"copy-icons": [
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/file-audio.svg', 'public/templates/default/assets/icons/file-audio.svg');\"",
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/file-block.svg', 'public/templates/default/assets/icons/file-block.svg');\"",
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/file-broken.svg', 'public/templates/default/assets/icons/file-broken.svg');\"",
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/filetype-doc.svg', 'public/templates/default/assets/icons/file-doc.svg');\"",
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/file-unknown.svg', 'public/templates/default/assets/icons/file-other.svg');\"",
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/filetype-pdf.svg', 'public/templates/default/assets/icons/file-pdf.svg');\"",
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/file-pres.svg', 'public/templates/default/assets/icons/file-pres.svg');\"",
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/file-spread.svg', 'public/templates/default/assets/icons/file-spread.svg');\"",
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/file-text.svg', 'public/templates/default/assets/icons/file-text.svg');\"",
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/file-video.svg', 'public/templates/default/assets/icons/file-video.svg');\"",
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/file-zip.svg', 'public/templates/default/assets/icons/file-zip.svg');\"",
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/folder-empty.svg', 'public/templates/default/assets/icons/folder-empty.svg');\"",
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/ui-light-dark.svg', 'public/templates/default/assets/icons/ui-light-dark.svg');\"",
"php -r \"copy('vendor/knah-tsaeb/kt-color-scheme/public/assets/icons/ui-arrow-up.svg', 'public/templates/default/assets/icons/ui-arrow-up.svg');\""
],
"build-sprite": "php vendor/knah-tsaeb/kt-color-scheme/bin/svg_sprite_generator.php -f public/templates/default/svg-preset -o public/templates/default/assets/icons/sprite.svg"
},
"require-dev": {
"knah-tsaeb/kt-color-scheme": "^0.2.0"
}
}
}

View file

@ -0,0 +1,20 @@
<svg viewBox="-2.4 -2.4 48 48" id="prefix__Layer_1" data-name="Layer 1" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier" transform="translate(-4.346 -4.346) scale(2.16216)">
<defs id="defs1">
<style id="style1">
.prefix__cls-1 {
fill: none;
stroke: #333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M8.18 17.73a1 1 0 111 .95 1 1 0 01-1-.95" id="path1" />
<circle class="prefix__cls-1" cx="14.86" cy="16.77" r=".95" id="circle1" />
<path class="prefix__cls-1" d="M15.82 16.77v-5.73l-5.73.96v5.73" id="path2" />
<path class="prefix__cls-1" d="M20.59 6.27V22.5H3.41v-21h12.41z" id="path3" />
<path class="prefix__cls-1" d="M20.59 6.27v.96h-5.73V1.5h.96z" id="path4" />
</g>
</svg>

After

(image error) Size: 914 B

View file

@ -0,0 +1,19 @@
<svg viewBox="-2.4 -2.4 48 48" id="prefix__Layer_1" data-name="Layer 1" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier" transform="translate(-4.346 -4.346) scale(2.16216)">
<defs id="defs1">
<style id="style1">
.prefix__cls-1 {
fill: none;
stroke: #333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M20.59 6.27v.96h-5.73V1.5h.96z" id="path1" />
<path class="prefix__cls-1"
d="M20.59 12l-2.86 1.91L14.86 12l-2.87 1.91L9.14 12l-2.87 1.91L3.41 12V1.5h12.41l4.77 4.77zm0 3.82l-2.86 1.91-2.87-1.91-2.87 1.91-2.85-1.91-2.87 1.91-2.86-1.91v6.68h17.18z"
id="path2" />
</g>
</svg>

After

(image error) Size: 859 B

View file

@ -0,0 +1,19 @@
<svg viewBox="-2.4 -2.4 48 48" id="prefix__Layer_1" data-name="Layer 1" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier" transform="translate(-4.346 -4.346) scale(2.16216)">
<defs id="defs1">
<style id="style1">
.prefix__cls-1 {
fill: none;
stroke: #333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M20.59 6.27v.96h-5.73V1.5h.96z" id="path1" />
<path class="prefix__cls-1"
d="M20.59 12l-2.86 1.91L14.86 12l-2.87 1.91L9.14 12l-2.87 1.91L3.41 12V1.5h12.41l4.77 4.77zm0 3.82l-2.86 1.91-2.87-1.91-2.87 1.91-2.85-1.91-2.87 1.91-2.86-1.91v6.68h17.18z"
id="path2" />
</g>
</svg>

After

(image error) Size: 808 B

View file

@ -0,0 +1,18 @@
<svg viewBox="-2.4 -2.4 48 48" id="prefix__Layer_1" data-name="Layer 1" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier" transform="translate(-4.346 -4.346) scale(2.16216)">
<defs id="defs1">
<style id="style1">
.prefix__cls-1 {
fill: none;
stroke: #333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M6.27 14.86h7.64m-7.64-3.81h7.64m-7.64 7.63h7.64m2.86-10.5V22.5H3.41V5.32h10.5z"
id="path1" />
<path class="prefix__cls-1" d="M16.77 18.68h3.82V4.36L17.73 1.5H7.23v3.82" id="path2" />
</g>
</svg>

After

(image error) Size: 722 B

View file

@ -0,0 +1,19 @@
<svg viewBox="-2.4 -2.4 48 48" id="prefix__Layer_1" data-name="Layer 1" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier" transform="translate(-4.346 -4.346) scale(2.16216)">
<defs id="defs1">
<style id="style1">
.prefix__cls-1 {
fill: none;
stroke: #333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M20.59 6.27V22.5H3.41v-21h12.41z" id="path1" />
<path class="prefix__cls-1"
d="M20.59 6.27v.96h-5.73V1.5h.96zm-9.54 12.41h1.9M12 16.77v-1.12a1.92 1.92 0 01.56-1.35l.79-.79a1.88 1.88 0 00.56-1.35V12A1.92 1.92 0 0012 10.09 1.92 1.92 0 0010.09 12"
id="path2" />
</g>
</svg>

After

(image error) Size: 806 B

View file

@ -0,0 +1,18 @@
<svg viewBox="-2.4 -2.4 48 48" id="prefix__Layer_1" data-name="Layer 1" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier" transform="translate(-4.346 -4.346) scale(2.16216)">
<defs id="defs1">
<style id="style1">
.prefix__cls-1 {
fill: none;
stroke: #333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M2.45 12.95h13.36v5.73H2.45z" id="path1" />
<path class="prefix__cls-1" d="M4.36 18.68v3.82h17.19V6.27L16.77 1.5H4.36v11.46" id="path2" />
<path class="prefix__cls-1" d="M21.55 6.27v.96h-5.73V1.5h.95z" id="path3" />
</g>
</svg>

After

(image error) Size: 751 B

View file

@ -1,7 +1,7 @@
<svg width="800" height="800" viewBox="-2.4 -2.4 28.8 28.8" id="prefix__prefix__Layer_1" data-name="Layer 1"
version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<style>
<svg viewBox="-2.4 -2.4 48 48" id="prefix__prefix__Layer_1" data-name="Layer 1" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<defs id="defs1">
<style id="style1">
.prefix__prefix__cls-1,
.prefix__prefix__cls-2 {
fill: none;
@ -15,11 +15,11 @@
}
</style>
</defs>
<g id="prefix__prefix__SVGRepo_iconCarrier" stroke-width="1">
<g id="prefix__prefix__SVGRepo_iconCarrier" stroke-width="1" transform="translate(-4.346 -4.346) scale(2.16216)">
<path class="prefix__prefix__cls-1" id="prefix__prefix__polygon2" d="M3.41 22.5v-21h12.41l4.77 4.77V22.5z" />
<path class="prefix__prefix__cls-1" id="prefix__prefix__polygon3" d="M14.86 7.23V1.5h.96l4.77 4.77v.96z" />
</g>
<g id="prefix__prefix__SVGRepo_iconCarrier-5" transform="translate(6.233 9.414) scale(.46245)" display="inline">
<g id="prefix__prefix__SVGRepo_iconCarrier-5" transform="matrix(.9999 0 0 .9999 9.131 16.272)" display="inline">
<g id="prefix__prefix__presentation_standing" data-name="presentation standing" transform="translate(.47)">
<path class="prefix__prefix__cls-2" id="prefix__prefix__line1" d="M.5 1.48h23" />
<path class="prefix__prefix__cls-2" id="prefix__prefix__line2" d="M.5 16.81h23" />

Before

(image error) Size: 1.6 KiB

After

(image error) Size: 1.6 KiB

Before After
Before After

View file

@ -0,0 +1,18 @@
<svg viewBox="-2.4 -2.4 48 48" id="prefix__Layer_1" data-name="Layer 1" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier" transform="translate(-4.346 -4.346) scale(2.16216)">
<defs id="defs1">
<style id="style1">
.prefix__cls-1 {
fill: none;
stroke: #333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M15.82 11.05v6.68M12 12.95v4.78m-3.82-2.87v2.87M20.59 6.27V22.5H3.41v-21h12.41z"
id="path1" />
<path class="prefix__cls-1" d="M20.59 6.27v.96h-5.73V1.5h.96z" id="path2" />
</g>
</svg>

After

(image error) Size: 710 B

View file

@ -1,8 +1,8 @@
<svg width="800" height="800" viewBox="-2.4 -2.4 28.8 28.8" id="prefix__Layer_1" data-name="Layer 1"
<svg viewBox="-2.4 -2.4 48 48" id="prefix__Layer_1" data-name="Layer 1" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier">
<defs>
<style>
<g id="prefix__SVGRepo_iconCarrier" transform="translate(-4.346 -4.346) scale(2.16216)">
<defs id="defs1">
<style id="style1">
.prefix__cls-1 {
fill: none;
stroke: #333;
@ -12,7 +12,7 @@
</style>
</defs>
<path class="prefix__cls-1"
d="M6.27 11.05h11.46M6.27 14.86h11.46M6.27 18.68h11.46M20.59 6.27V22.5H3.41v-21h12.41l4.77 4.77z" />
<path class="prefix__cls-1" d="M20.59 6.27v.96h-5.73V1.5h.96l4.77 4.77z" />
d="M6.27 11.05h11.46M6.27 14.86h11.46M6.27 18.68h11.46m2.86-12.41V22.5H3.41v-21h12.41z" id="path1" />
<path class="prefix__cls-1" d="M20.59 6.27v.96h-5.73V1.5h.96z" id="path2" />
</g>
</svg>

Before

(image error) Size: 700 B

After

(image error) Size: 762 B

Before After
Before After

View file

@ -0,0 +1,19 @@
<svg viewBox="-2.4 -2.4 48 48" id="prefix__Layer_1" data-name="Layer 1" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier" transform="translate(-4.346 -4.346) scale(2.16216)">
<defs id="defs1">
<style id="style1">
.prefix__cls-1 {
fill: none;
stroke: #333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M7.23 11.05h5.73v6.68H7.23zm5.73 3.81l2.86 2.87h.95v-6.69h-.95l-2.86 2.87z"
id="path1" />
<path class="prefix__cls-1" d="M20.59 6.27V22.5H3.41v-21h12.41z" id="path2" />
<path class="prefix__cls-1" d="M20.59 6.27v.96h-5.73V1.5h.96z" id="path3" />
</g>
</svg>

After

(image error) Size: 790 B

View file

@ -0,0 +1,19 @@
<svg viewBox="-2.4 -2.4 48 48" id="prefix__Layer_1" data-name="Layer 1" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier" transform="translate(-4.346 -4.346) scale(2.16216)">
<defs id="defs1">
<style id="style1">
.prefix__cls-1 {
fill: none;
stroke: #333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M3.41 22.5h17.18V5.32L16.77 1.5H3.41z" id="path1" />
<path class="prefix__cls-1"
d="M12 1.5a1.91 1.91 0 011.91 1.91v3.82h-3.82V3.41A1.91 1.91 0 0112 1.5zm0 9.55zM13.91 13zM12 14.86zm1.91 1.91zm0 3.82zM12 18.68z"
id="path2" />
</g>
</svg>

After

(image error) Size: 773 B

View file

@ -0,0 +1,16 @@
<svg viewBox="-4.8 -4.8 48 48" id="prefix__Layer_1" data-name="Layer 1" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<style id="style1">
.prefix__cls-1 {
fill: none;
stroke: #333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
<g id="prefix__SVGRepo_iconCarrier" transform="translate(-6.746 -6.746) scale(2.16216)">
<path class="prefix__cls-1"
d="M20.59 22.5H3.41a1.92 1.92 0 01-1.91-1.91V7.23h17.18v13.36a1.92 1.92 0 001.91 1.91z" id="path1" />
<path class="prefix__cls-1" d="M22.5 3.41v17.18a1.91 1.91 0 01-3.82 0V7.23H5.32V1.5h9.54l1.87 1.91z" id="path2" />
</g>
</svg>

After

(image error) Size: 666 B

View file

@ -0,0 +1,6 @@
<svg fill="#000" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"
xml:space="preserve">
<path
d="M256 0C114.842 0 0 114.84 0 256s114.842 256 256 256 256-114.84 256-256S397.158 0 256 0zm66.225 451.558c-20.797 7.062-43.071 10.894-66.225 10.894-113.837 0-206.452-92.614-206.452-206.452S142.163 49.548 256 49.548c23.154 0 45.429 3.832 66.226 10.894-55.614 46.997-91 117.215-91 195.558s35.386 148.561 90.999 195.558z"
id="SVGRepo_iconCarrier" />
</svg>

After

(image error) Size: 506 B

View file

@ -1,18 +0,0 @@
<svg width="800" height="800" viewBox="-2.4 -2.4 28.8 28.8" id="prefix__Layer_1" data-name="Layer 1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier">
<defs>
<style>
.prefix__cls-1 {
fill: none;
stroke: #333333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M20.59 6.27v.96h-5.73V1.5h.96l4.77 4.77z" />
<path class="prefix__cls-1"
d="M20.59 12l-2.86 1.91L14.86 12l-2.87 1.91L9.14 12l-2.87 1.91L3.41 12V1.5h12.41l4.77 4.77V12zM20.59 15.82l-2.86 1.91-2.87-1.91-2.87 1.91-2.85-1.91-2.87 1.91-2.86-1.91v6.68h17.18v-6.68z" />
</g>
</svg>

Before

(image error) Size: 792 B

View file

@ -1,18 +0,0 @@
<svg width="800" height="800" viewBox="-4.8 -4.8 33.6 33.6" id="prefix__Layer_1" data-name="Layer 1"
xmlns="http://www.w3.org/2000/svg">
<style>
.prefix__cls-1 {
fill: none;
stroke: #333333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
<g id="prefix__SVGRepo_iconCarrier">
<defs>
</defs>
<path class="prefix__cls-1"
d="M20.59 22.5H3.41a1.92 1.92 0 01-1.91-1.91V7.23h17.18v13.36a1.92 1.92 0 001.91 1.91z" />
<path class="prefix__cls-1" d="M22.5 3.41v17.18a1.91 1.91 0 01-3.82 0V7.23H5.32V1.5h9.54l1.87 1.91z" />
</g>
</svg>

Before

(image error) Size: 657 B

View file

@ -1,20 +0,0 @@
<svg width="800" height="800" viewBox="-2.4 -2.4 28.8 28.8" id="prefix__Layer_1" data-name="Layer 1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier">
<defs>
<style>
.prefix__cls-1 {
fill: none;
stroke: #333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M8.18 17.73a1 1 0 111 .95 1 1 0 01-1-.95" />
<circle class="prefix__cls-1" cx="14.86" cy="16.77" r=".95" />
<path class="prefix__cls-1" d="M15.82 16.77v-5.73l-5.73.96v5.73" />
<path class="prefix__cls-1" d="M20.59 6.27V22.5H3.41v-21h12.41l4.77 4.77z" />
<path class="prefix__cls-1" d="M20.59 6.27v.96h-5.73V1.5h.96l4.77 4.77z" />
</g>
</svg>

Before

(image error) Size: 868 B

View file

@ -1,18 +0,0 @@
<svg width="800" height="800" viewBox="-2.4 -2.4 28.8 28.8" id="prefix__Layer_1" data-name="Layer 1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier">
<defs>
<style>
.prefix__cls-1 {
fill: none;
stroke: #333333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M20.59 6.27v.96h-5.73V1.5h.96l4.77 4.77z" />
<path class="prefix__cls-1"
d="M20.59 12l-2.86 1.91L14.86 12l-2.87 1.91L9.14 12l-2.87 1.91L3.41 12V1.5h12.41l4.77 4.77V12zM20.59 15.82l-2.86 1.91-2.87-1.91-2.87 1.91-2.85-1.91-2.87 1.91-2.86-1.91v6.68h17.18v-6.68z" />
</g>
</svg>

Before

(image error) Size: 792 B

View file

@ -1,18 +0,0 @@
<svg width="800" height="800" viewBox="-2.4 -2.4 28.8 28.8" id="prefix__Layer_1" data-name="Layer 1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier">
<defs>
<style>
.prefix__cls-1 {
fill: none;
stroke: #333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1"
d="M6.27 14.86h7.64M6.27 11.05h7.64M6.27 18.68h7.64M16.77 8.18V22.5H3.41V5.32h10.5l2.86 2.86z" />
<path class="prefix__cls-1" d="M16.77 18.68h3.82V4.36L17.73 1.5H7.23v3.82" />
</g>
</svg>

Before

(image error) Size: 699 B

View file

@ -1,18 +0,0 @@
<svg width="800" height="800" viewBox="-2.4 -2.4 28.8 28.8" id="prefix__Layer_1" data-name="Layer 1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier">
<defs>
<style>
.prefix__cls-1 {
fill: none;
stroke: #333333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M20.59 6.27V22.5H3.41v-21h12.41l4.77 4.77z" />
<path class="prefix__cls-1"
d="M20.59 6.27v.96h-5.73V1.5h.96l4.77 4.77zM11.05 18.68h1.9M12 16.77v-1.12a1.92 1.92 0 01.56-1.35l.79-.79a1.88 1.88 0 00.56-1.35V12A1.92 1.92 0 0012 10.09 1.92 1.92 0 0010.09 12" />
</g>
</svg>

Before

(image error) Size: 786 B

View file

@ -1,18 +0,0 @@
<svg width="800" height="800" viewBox="-2.4 -2.4 28.8 28.8" id="prefix__Layer_1" data-name="Layer 1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier">
<defs>
<style>
.prefix__cls-1 {
fill: none;
stroke: #333333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M2.45 12.95h13.36v5.73H2.45z" />
<path class="prefix__cls-1" d="M4.36 18.68v3.82h17.19V6.27L16.77 1.5H4.36v11.46" />
<path class="prefix__cls-1" d="M21.55 6.27v.96h-5.73V1.5h.95l4.78 4.77z" />
</g>
</svg>

Before

(image error) Size: 718 B

View file

@ -1,18 +0,0 @@
<svg width="800" height="800" viewBox="-2.4 -2.4 28.8 28.8" id="prefix__Layer_1" data-name="Layer 1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier">
<defs>
<style>
.prefix__cls-1 {
fill: none;
stroke: #333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1"
d="M15.82 11.05v6.68M12 12.95v4.78M8.18 14.86v2.87M20.59 6.27V22.5H3.41v-21h12.41l4.77 4.77z" />
<path class="prefix__cls-1" d="M20.59 6.27v.96h-5.73V1.5h.96l4.77 4.77z" />
</g>
</svg>

Before

(image error) Size: 696 B

View file

@ -1,19 +0,0 @@
<svg width="800" height="800" viewBox="-2.4 -2.4 28.8 28.8" id="prefix__Layer_1" data-name="Layer 1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier">
<defs>
<style>
.prefix__cls-1 {
fill: none;
stroke: #333333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1"
d="M7.23 11.05h5.73v6.68H7.23zM12.96 14.86l2.86 2.87h.95v-6.69h-.95l-2.86 2.87v.95z" />
<path class="prefix__cls-1" d="M20.59 6.27V22.5H3.41v-21h12.41l4.77 4.77z" />
<path class="prefix__cls-1" d="M20.59 6.27v.96h-5.73V1.5h.96l4.77 4.77z" />
</g>
</svg>

Before

(image error) Size: 776 B

View file

@ -1,18 +0,0 @@
<svg width="800" height="800" viewBox="-2.4 -2.4 28.8 28.8" id="prefix__Layer_1" data-name="Layer 1"
xmlns="http://www.w3.org/2000/svg">
<g id="prefix__SVGRepo_iconCarrier">
<defs>
<style>
.prefix__cls-1 {
fill: none;
stroke: #333333;
stroke-miterlimit: 10;
stroke-width: 1.2
}
</style>
</defs>
<path class="prefix__cls-1" d="M3.41 22.5h17.18V5.32L16.77 1.5H3.41z" />
<path class="prefix__cls-1"
d="M12 1.5a1.91 1.91 0 011.91 1.91v3.82h-3.82V3.41A1.91 1.91 0 0112 1.5zM12 11.05zM13.91 13zM12 14.86zM13.91 16.77zM13.91 20.59zM12 18.68z" />
</g>
</svg>

Before

(image error) Size: 742 B

View file

@ -1,11 +0,0 @@
<svg fill="#000000" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512" xml:space="preserve">
<g id="SVGRepo_bgCarrier" stroke-width="0"></g>
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
<g id="SVGRepo_iconCarrier">
<g>
<g>
<path d="M256,0C114.842,0,0,114.84,0,256s114.842,256,256,256s256-114.84,256-256S397.158,0,256,0z M322.225,451.558 c-20.797,7.062-43.071,10.894-66.225,10.894c-113.837,0-206.452-92.614-206.452-206.452S142.163,49.548,256,49.548 c23.154,0,45.429,3.832,66.226,10.894C266.612,107.439,231.226,177.657,231.226,256S266.612,404.561,322.225,451.558z"></path>
</g>
</g>
</g>
</svg>

Before

(image error) Size: 898 B

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,6 @@
<?php
use stefangabos\Zebra_Image\Zebra_Image;
use Utils\Utils;
error_reporting(-1);
@ -42,7 +43,11 @@ if (file_exists($thumbname)) {
if (!is_readable($getFilename) || !is_file($getFilename)) {
header('Content-type: image/svg+xml');
$cannotopenImg = file_get_contents('assets/images/cannotopen.svg');
if (file_exists('template/' . $config['iconsTheme'] . '/assets/icons/file-block.svg')) {
$cannotopenImg = file_get_contents('template/' . $config['iconsTheme'] . '/assets/icons/file-block.svg');
} else {
$cannotopenImg = file_get_contents('assets/images/file-block.svg');
}
echo $cannotopenImg;
exit;
}

View file

@ -9,7 +9,7 @@ use Utils\Utils;
error_reporting(-1);
$version = "0.1.0";
$version = "0.3.0";
ini_set("memory_limit", "256M");
/*
@ -18,6 +18,7 @@ See README.md
*/
$config = [
'templateFile' => 'default', // Template filename (must be placed in 'public/templates' folder)
'iconsTheme' => null, // Icons theme (must be placed in 'public/templates/{iconsTheme}/assets/icons folder)
'title' => 'NanoGal', // Text to be displayed in browser titlebar
'description' => 'My gallery', // Use in meta tag "description"
'author' => 'NanoGal', // Your name

View file

@ -183,7 +183,52 @@ img {
}
nav {
font-size: 2.2rem;
font-size: 2rem;
}
nav {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
padding: 0;
}
nav ul {
display: flex;
gap: calc(var(--default-space) * 2);
flex-wrap: wrap;
padding: 0;
margin: 0;
a {
color: var(--primary-lighten);
font-weight: normal;
padding: 0;
}
}
nav li {
margin: var(--default-space);
list-style: none;
font-size: calc(var(--font-size) * 1.2);
}
.breadcrumb {
li {
margin: auto 0;
}
& li:not(:last-child)::after {
content: "/";
font-weight: bold;
}
ul {
gap: 0;
}
}
body>nav {
@ -221,7 +266,7 @@ aside * {
width: min-content;
}
.card:hover{
.card:hover {
transform: scale(1.2);
z-index: 1;
box-shadow: 0em 0em .3em .3em var(--background-color-darken);

View file

@ -62,9 +62,9 @@ use App\FileAndDir;
</svg><a href="/"><?= $config['title']; ?></a>
</h1>
<a href="#" id="dark-mode" onclick="switchTheme();">
<img height="24" src="/assets/images/moon.svg" alt="Dark/Light mode icon">
<img height="24" src="/assets/icons/ui-light-dark.svg" alt="Dark/Light mode icon">
</a>
<nav>
<nav class="breadcrumb">
<?= $breadcrumb_navigation; ?>
</nav>
<aside>

View file

@ -104,7 +104,6 @@ body {
margin: 0 auto;
min-height: 100dvh;
text-rendering: optimizeSpeed;
font-size: var(--font-size);
line-height: 1.5;
}
@ -235,7 +234,8 @@ main,
padding: 1rem;
}
img {
img,
svg {
transition: all .2s ease-in;
border: none;
}
@ -267,6 +267,10 @@ figure {
transition: all .2s ease-in;
position: relative;
width: min-content;
svg {
fill: var(--dark-background-color);
}
}
figure a {
@ -274,7 +278,7 @@ figure a {
}
figcaption {
color: var(--header-text-color);
color: var(--light-text-color);
margin: 0;
overflow: hidden;
padding: 0;
@ -304,10 +308,22 @@ footer a {
background-color: var(--primary);
color: var(--text-color-secondary);
display: block;
margin: .5%;
padding: 1rem 4rem;
margin: calc(var(--default-space) * 2.5);
padding: calc(var(--default-space)* 2.5);
position: fixed;
right: 0;
svg {
fill: var(--text-color-secondary);
}
}
#backtop:hover {
color: var(--dark-background-color);
svg {
fill: var(--dark-background-color);
}
}
#legend {

View file

@ -0,0 +1,114 @@
:root {
color-scheme: dark light;
--primary: #cc2027;
--primary-darken: #8E161B;
--primary-lighten: #D64C52;
--primary-text-contrast: #FFF;
--secondary: #20ccc5;
--secondary-darken: #168E89;
--secondary-lighten: #4CD6D0;
--secondary-text-contrast: #000;
--error: #c43933;
--error-darken: #892723;
--error-lighten: #CF605B;
--error-text-contrast: #FFF;
--info: #206ccc;
--info-darken: #164B8E;
--info-lighten: #4C89D6;
--info-text-contrast: #FFF;
--success: #7dcc20;
--success-darken: #578E16;
--success-lighten: #97D64C;
--success-text-contrast: #000;
--warning: #cc5e20;
--warning-darken: #8E4116;
--warning-lighten: #D67E4C;
--warning-text-contrast: #FFF;
--divider: light-dark(#B2AFAF, #454343);
--background-color: light-dark(#fffbfb, #171414);
--background-color-darken: light-dark(#B2AFAF, #100E0E);
--background-color-lighten: light-dark(#FFFBFB, #454343);
--background-secondary-color: #ebebeb;
--light-background-color: #fffbfb;
--dark-background-color: #171414;
--header-background-color: light-dark(#171414, #fffbfb);
--header-background-color-darken: light-dark(#100E0E, #B2AFAF);
--header-background-color-lighten: light-dark(#454343, #FFFBFB);
--header-text-color: light-dark(#fffbfb, #171414);
--header-text-color-secondary: #ffffffb3;
--header-text-color-disable: var(--divider);
--text-color: light-dark(#171414, #fffbfb);
--text-color-secondary: #ffffffb3;
--text-color-disable: light-dark(#454343, #B2AFAF);
--light-text-color: #171414;
--dark-text-color: #fffbfb;
--text-color-inverse: light-dark(#fffbfb, #171414);
--text-color-secondary-inverse: #ffffffb3;
--text-color-disable-inverse: var(--divider);
--box-shadow-light: .4rem .4rem 0px .1rem #B2AFAF;
--box-shadow-dark: .4rem .4rem 0px .1rem #454343;
--box-shadow-auto: .4rem .4rem 0px .1rem var(--divider);
--h1-color: var(--primary);
--h2-color: #c33d35;
--h3-color: #b94f44;
--h4-color: #ae5e52;
--h5-color: #a16a61;
--h6-color: #927671;
--font-size: 1.2em;
--default-space: .2em;
}
[data-theme="dark"] {
color-scheme: dark;
--background-color: #171414;
--text-color: #fffbfb;
--text-color-inverse: #171414;
}
[data-theme="light"] {
color-scheme: light;
--background-color: #fffbfb;
--text-color: #171414;
--text-color-inverse: #fffbfb;
}
* {
box-sizing: border-box;
}
html {
font-size: var(--font-size);
}
svg {
display: inline-block;
fill: var(--primary);
height: var(--font-size);
vertical-align: middle;
width: auto;
}
.svg-icon {
height: var(--font-size);
vertical-align: middle;
width: auto;
}

View file

@ -0,0 +1 @@
<svg id="file-audio" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M2.455.545v22.91h19.09V5.875l-5.33-5.33H2.455zm1.91 1.91h9.54v5.73h5.73v13.36H4.365V2.455zm11.45.39l1.714 1.716 1.715 1.714h-3.43v-3.43zm.96 7.067l-7.64 1.28v4.54a1.97 1.97 0 00-.772.172 1.98 1.98 0 00-1.136 1.873 1.969 1.969 0 001.954 1.858 1.98 1.98 0 001.813-1.23 1.99 1.99 0 00.05-1.289v-4.308l3.821-.64v2.698h-.005a1.918 1.918 0 00-1.905 1.903 1.92 1.92 0 001.905 1.907c1.04 0 1.906-.866 1.906-1.907h.01V9.912zm-7.64 7.735v.035a.206.206 0 010-.035z" transform="matrix(2.09535 0 0 2.09515 -1.144 -1.142)"/></svg>

After

(image error) Size: 615 B

View file

@ -0,0 +1 @@
<svg viewBox="0 0 48 48" id="file-block" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M2.455.545v22.91h19.09V5.875l-5.33-5.33H2.455zm1.91 1.91h9.54v5.73h5.73v13.36H4.365V2.455zm11.449.39l3.43 3.43h-3.43v-3.43zM12 9.135c-3.15 0-5.725 2.574-5.725 5.724 0 3.15 2.575 5.725 5.725 5.725 3.15 0 5.725-2.574 5.725-5.725 0-3.15-2.575-5.724-5.725-5.724zm0 1.91a3.8 3.8 0 011.945.528l-5.233 5.225a3.801 3.801 0 01-.526-1.939A3.8 3.8 0 0112 11.045zm3.293 1.882a3.8 3.8 0 01.52 1.932A3.801 3.801 0 0112 18.676a3.801 3.801 0 01-1.938-.526l5.23-5.223z" transform="matrix(2.09536 0 0 2.09514 -1.143 -1.142)"/></svg>

After

(image error) Size: 613 B

View file

@ -0,0 +1 @@
<svg viewBox="0 0 48 48" id="file-broken" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M4.002 0v25.068l7.992 5.336 6.014-3.998 5.97 4.002 6.016-4.006 6.016 4.002 7.994-5.336v-13.9L32.836 0H4.002zm4.002 4.002h19.992V16.01h12.006v6.924L36.006 25.6l-6.012-4.002-6.008 3.998-5.97-4.002-6.018 4.006-3.994-2.668V4.002zm23.992.818l7.186 7.188h-7.186V4.82zM4.002 28.266v19.736h40.002V28.266l-7.998 5.336-6.012-3.998-6.008 3.998-5.97-4.002-6.018 4.002-7.996-5.336zm25.992 6.14l6.016 4.004L40 35.746V44H8.006v-8.254l3.988 2.664 6.014-3.998 5.97 3.998 6.016-4.004z"/></svg>

After

(image error) Size: 575 B

View file

@ -0,0 +1 @@
<svg version="1.1" id="filetype-doc" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M2.418.508v22.984h19.164V5.86L16.23.507H2.417zm1.984 1.984h9.465v5.73h5.731v3.008H4.402V2.492zm11.45.444l1.475 1.475 1.829 1.827h-3.304V2.936zm-3.73 9.388c.513 0 .933.1 1.264.304.336.198.583.48.742.847.159.362.238.788.238 1.277 0 .49-.08.92-.244 1.285a1.837 1.837 0 01-.736.848c-.33.203-.754.304-1.27.304-.512 0-.935-.101-1.27-.304a1.868 1.868 0 01-.742-.854c-.159-.366-.239-.795-.239-1.285 0-.486.08-.91.239-1.271a1.83 1.83 0 01.741-.847c.336-.203.761-.304 1.278-.304zm5.263.006c.234 0 .47.027.708.08.243.048.472.126.688.232l-.33.807a3.483 3.483 0 00-.51-.192 1.833 1.833 0 00-.57-.086c-.379 0-.678.143-.899.43-.216.283-.324.673-.324 1.172 0 .499.103.886.31 1.164.212.274.53.41.953.41.208 0 .406-.024.596-.072.194-.049.389-.11.583-.185v.86a3.285 3.285 0 01-1.29.239c-.504 0-.919-.1-1.245-.298a1.86 1.86 0 01-.722-.847c-.155-.366-.232-.792-.232-1.278 0-.476.089-.898.266-1.264.176-.366.434-.653.774-.86.34-.208.754-.312 1.244-.312zm-12.166.067H6.78c.741 0 1.319.196 1.734.589.419.388.628.953.628 1.694 0 .543-.1.995-.304 1.357a1.94 1.94 0 01-.86.814c-.37.18-.81.271-1.318.271H5.22v-4.725zm6.904.767c-.42 0-.724.142-.914.424-.185.282-.278.67-.278 1.164 0 .495.093.883.278 1.166.19.278.492.417.907.417.424 0 .725-.14.906-.417.186-.283.278-.671.278-1.166 0-.494-.092-.882-.278-1.164-.18-.282-.48-.424-.9-.424zm-5.892.06v3.065h.423c.954 0 1.43-.523 1.43-1.57 0-.507-.112-.882-.337-1.124-.225-.248-.556-.372-.993-.372H6.23zm-1.83 5.058h15.197v3.226H4.402v-3.226z" transform="matrix(2.02302 0 0 2.0884 -.276 -1.06)"/></svg>

After

(image error) Size: 1.6 KiB

View file

@ -0,0 +1 @@
<svg id="file-unknown" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M2.455.545v22.91h19.09V5.875l-5.33-5.33H2.455zm1.91 1.91h9.54v5.73h5.73v13.36H4.365V2.455zm11.45.39l3.43 3.43h-3.43v-3.43zm-3.737 6.32a6.22 6.22 0 00-1.783.242 7.656 7.656 0 00-1.512.628l.756 1.555a7.84 7.84 0 011.198-.5c.4-.123.8-.185 1.199-.185.39 0 .694.08.913.242a.79.79 0 01.342.685c0 .19-.033.366-.1.528a1.43 1.43 0 01-.342.486 5.841 5.841 0 01-.77.613c-.486.342-.814.68-.985 1.013-.171.324-.257.723-.257 1.198v.514h1.698v-.314c0-.2.029-.371.086-.514.067-.143.18-.29.342-.442a5.46 5.46 0 01.685-.556c.562-.4.98-.8 1.255-1.2.276-.399.414-.888.414-1.468 0-.77-.275-1.384-.827-1.84-.542-.457-1.313-.686-2.312-.686zm-.399 8.132c-.352 0-.647.09-.884.271-.238.18-.357.49-.357.928 0 .418.119.722.357.912.237.181.532.272.884.272.324 0 .604-.091.842-.272.247-.19.371-.494.371-.912 0-.438-.124-.747-.37-.928a1.352 1.352 0 00-.843-.271z" transform="translate(-1.142 -1.142) scale(2.09516)"/></svg>

After

(image error) Size: 993 B

View file

@ -0,0 +1 @@
<svg version="1.1" id="filetype-pdf" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M2.418.508v22.984h19.164V5.86L16.23.507H2.417zm1.984 1.984h9.465v5.73h5.731v3.008H4.402V2.492zm11.45.444l1.475 1.475 1.829 1.827h-3.304V2.936zm-9.7 9.46h1.482c.61 0 1.06.128 1.35.384.292.252.437.61.437 1.073 0 .278-.057.538-.172.78-.114.243-.306.44-.575.59-.265.15-.625.225-1.08.225h-.43v1.674H6.151v-4.725zm4.11 0h1.562c.742 0 1.32.197 1.735.59.42.388.629.953.629 1.694 0 .543-.101.995-.304 1.357-.203.362-.49.633-.862.814-.37.18-.809.271-1.316.271h-1.444v-4.725zm4.879 0h2.708v.82h-1.722v1.22h1.602v.82h-1.602v1.866h-.986v-4.725zm-7.977.827v1.39h.338c.278 0 .497-.054.656-.165.163-.11.244-.298.244-.563 0-.211-.066-.375-.198-.49-.128-.114-.329-.172-.603-.172h-.437zm4.11 0v3.066h.425c.953 0 1.43-.523 1.43-1.57 0-.507-.113-.882-.338-1.124-.225-.248-.556-.372-.993-.372h-.523zm-6.872 5.059h15.196v3.226H4.402v-3.226z" transform="matrix(2.02302 0 0 2.0884 -.276 -1.06)"/></svg>

After

(image error) Size: 978 B

View file

@ -0,0 +1 @@
<svg id="file-pres" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M-7.345-16.865v46.429h38.69V-6.062L20.543-16.865H-7.345zm3.87 3.871H15.86V-1.38h11.614v27.074H-3.474v-38.687zm23.206.792l3.476 3.476 3.476 3.474H19.73v-6.95zM.48.348v19.2h5.8l-2.92 2.066v1.967h4.88l1.826-1.587v1.611h3.87v-1.68l1.94 1.686h4.878v-1.967l-2.963-2.097h5.73V.347H.48zm3.869 3.869H19.65v11.461H4.35V4.217z" transform="translate(11.594 17.436) scale(1.03385)"/></svg>

After

(image error) Size: 474 B

View file

@ -0,0 +1 @@
<svg viewBox="0 0 48 48" id="file-spread" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M5.716.668v48h40V11.836L34.548.668H5.716zM9.718 4.67h19.988v12.006h12.008v27.99H9.718V4.67zm23.99.818l3.594 3.594 3.593 3.592h-7.187V5.488zm-19.992 13.18v24h24v-24h-24zm4 4h6v6h-6v-6zm10 0h6v6h-6v-6zm-10 10h6v6h-6v-6zm10 0h6v6h-6v-6z" transform="translate(-1.716 -.668)"/></svg>

After

(image error) Size: 378 B

View file

@ -0,0 +1 @@
<svg viewBox="0 0 48 48" id="file-text" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M2.455.545v22.91h19.09V5.875l-5.33-5.33H2.455zm1.91 1.91h9.54v5.73h5.73v13.36H4.365V2.455zm11.45.39l1.714 1.716 1.715 1.714h-3.43v-3.43zm-9.546 7.25v1.91h11.462v-1.91H6.269zm0 3.81v1.91h11.462v-1.91H6.269zm0 3.82v1.91h11.462v-1.91H6.269z" transform="matrix(2.09535 0 0 2.09517 -1.144 -1.142)"/></svg>

After

(image error) Size: 398 B

View file

@ -0,0 +1 @@
<svg id="file-video" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M2.455.545v22.91h19.09V5.875l-5.33-5.33H2.455zm1.91 1.91h9.54v5.73h5.73v13.36H4.365V2.455zm11.45.39l1.714 1.716 1.715 1.714h-3.43v-3.43zm-.391 7.241l-1.51 1.515v-1.506H6.276v8.59h7.638V17.17l1.51 1.516h2.3v-8.6h-2.3zm-7.238 1.92h3.82v4.77h-3.82v-4.77zm7.628.392v3.973l-1.9-1.906v-.16l1.9-1.907z" transform="matrix(2.09535 0 0 2.09515 -1.144 -1.142)"/></svg>

After

(image error) Size: 456 B

View file

@ -0,0 +1 @@
<svg id="file-zip" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M4 0v48h40V9.174L34.824 0H4zm4.002 4.002h10.344a5.918 5.918 0 00-.35 2.002v10.004h12.008V6.004c0-.7-.125-1.375-.35-2.002h3.514l6.83 6.83v33.166H8.002V4.002zm15.998 0c1.129 0 2.002.873 2.002 2.002v6.002h-4.004V6.004c0-1.129.873-2.002 2.002-2.002z"/></svg>

After

(image error) Size: 351 B

View file

@ -0,0 +1 @@
<svg version="1.1" id="filetype-doc" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M2.418.508v22.984h19.164V5.86L16.23.507H2.417zm1.984 1.984h9.465v5.73h5.731v3.008H4.402V2.492zm11.45.444l1.475 1.475 1.829 1.827h-3.304V2.936zm-3.73 9.388c.513 0 .933.1 1.264.304.336.198.583.48.742.847.159.362.238.788.238 1.277 0 .49-.08.92-.244 1.285a1.837 1.837 0 01-.736.848c-.33.203-.754.304-1.27.304-.512 0-.935-.101-1.27-.304a1.868 1.868 0 01-.742-.854c-.159-.366-.239-.795-.239-1.285 0-.486.08-.91.239-1.271a1.83 1.83 0 01.741-.847c.336-.203.761-.304 1.278-.304zm5.263.006c.234 0 .47.027.708.08.243.048.472.126.688.232l-.33.807a3.483 3.483 0 00-.51-.192 1.833 1.833 0 00-.57-.086c-.379 0-.678.143-.899.43-.216.283-.324.673-.324 1.172 0 .499.103.886.31 1.164.212.274.53.41.953.41.208 0 .406-.024.596-.072.194-.049.389-.11.583-.185v.86a3.285 3.285 0 01-1.29.239c-.504 0-.919-.1-1.245-.298a1.86 1.86 0 01-.722-.847c-.155-.366-.232-.792-.232-1.278 0-.476.089-.898.266-1.264.176-.366.434-.653.774-.86.34-.208.754-.312 1.244-.312zm-12.166.067H6.78c.741 0 1.319.196 1.734.589.419.388.628.953.628 1.694 0 .543-.1.995-.304 1.357a1.94 1.94 0 01-.86.814c-.37.18-.81.271-1.318.271H5.22v-4.725zm6.904.767c-.42 0-.724.142-.914.424-.185.282-.278.67-.278 1.164 0 .495.093.883.278 1.166.19.278.492.417.907.417.424 0 .725-.14.906-.417.186-.283.278-.671.278-1.166 0-.494-.092-.882-.278-1.164-.18-.282-.48-.424-.9-.424zm-5.892.06v3.065h.423c.954 0 1.43-.523 1.43-1.57 0-.507-.112-.882-.337-1.124-.225-.248-.556-.372-.993-.372H6.23zm-1.83 5.058h15.197v3.226H4.402v-3.226z" transform="matrix(2.02302 0 0 2.0884 -.276 -1.06)"/></svg>

After

(image error) Size: 1.6 KiB

View file

@ -0,0 +1 @@
<svg version="1.1" id="filetype-pdf" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M2.418.508v22.984h19.164V5.86L16.23.507H2.417zm1.984 1.984h9.465v5.73h5.731v3.008H4.402V2.492zm11.45.444l1.475 1.475 1.829 1.827h-3.304V2.936zm-9.7 9.46h1.482c.61 0 1.06.128 1.35.384.292.252.437.61.437 1.073 0 .278-.057.538-.172.78-.114.243-.306.44-.575.59-.265.15-.625.225-1.08.225h-.43v1.674H6.151v-4.725zm4.11 0h1.562c.742 0 1.32.197 1.735.59.42.388.629.953.629 1.694 0 .543-.101.995-.304 1.357-.203.362-.49.633-.862.814-.37.18-.809.271-1.316.271h-1.444v-4.725zm4.879 0h2.708v.82h-1.722v1.22h1.602v.82h-1.602v1.866h-.986v-4.725zm-7.977.827v1.39h.338c.278 0 .497-.054.656-.165.163-.11.244-.298.244-.563 0-.211-.066-.375-.198-.49-.128-.114-.329-.172-.603-.172h-.437zm4.11 0v3.066h.425c.953 0 1.43-.523 1.43-1.57 0-.507-.113-.882-.338-1.124-.225-.248-.556-.372-.993-.372h-.523zm-6.872 5.059h15.196v3.226H4.402v-3.226z" transform="matrix(2.02302 0 0 2.0884 -.276 -1.06)"/></svg>

After

(image error) Size: 978 B

View file

@ -0,0 +1 @@
<svg id="folder-empty" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M4.365.545v5.73H.545v14.321a2.888 2.888 0 002.86 2.859h17.184c.69 0 1.393-.225 1.948-.719.555-.493.918-1.271.918-2.147V2.455h-6.324L15.26.545H4.366zm1.91 1.91h8.184l1.87 1.91h5.216V20.59c0 .398-.114.577-.275.72-.16.143-.413.235-.677.236a.951.951 0 01-.958-.956V6.276H6.275v-3.82zm-3.82 5.73h15.27v12.419c.002.331.056.648.152.94H3.414a.95.95 0 01-.959-.958v-12.4z" transform="translate(-1.142 -1.142) scale(2.09516)"/></svg>

After

(image error) Size: 524 B

File diff suppressed because one or more lines are too long

After

(image error) Size: 9 KiB

View file

@ -0,0 +1 @@
<svg version="1.1" id="ui-arrow-up" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M22 45c0 4 4.006 4 4 0V7.3l14.232 14.349c2.75 2.789 5.577.194 2.948-2.709C37.477 12.913 31.706 6.964 26 .94c-.595-.586-1.277-.953-2-.94-.77.01-1.432.364-2 .94l-17.18 18c-2.63 2.903.199 5.498 2.948 2.708L22 7.3z"/></svg>

After

(image error) Size: 319 B

View file

@ -0,0 +1 @@
<svg id="ui-light-dark" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M24 0C10.769 0 0 10.769 0 24s10.769 24 24 24c12.235 0 22.356-9.21 23.813-21.059.118-.964.187-1.945.187-2.941 0-.965-.064-1.916-.176-2.852a24 24 0 00-.023-.185 23.84 23.84 0 00-.524-2.8 23.767 23.767 0 00-.869-2.743 24 24 0 00-.056-.145 23.909 23.909 0 00-1.157-2.515 24 24 0 00-.066-.127 24.025 24.025 0 00-1.412-2.291 24 24 0 00-.254-.356 24.15 24.15 0 00-1.557-1.941 24 24 0 00-.304-.336 24.251 24.251 0 00-1.774-1.727 24 24 0 00-.35-.3 24.137 24.137 0 00-2.11-1.602 24 24 0 00-.179-.115 24.01 24.01 0 00-2.36-1.371 24 24 0 00-.071-.041 24 24 0 00-.004.002A23.841 23.841 0 0024 0zm0 4c2.355 0 4.611.408 6.707 1.15A24 24 0 0021.434 24a24 24 0 009.277 18.85A20.038 20.038 0 0124 44C12.93 44 4 35.07 4 24S12.93 4 24 4z"/></svg>

After

(image error) Size: 829 B

View file

@ -1,6 +1,22 @@
<?php
use App\FileAndDir;
use Utils\Utils;
function adaptIconName($defaultIcon) {
$customName = $defaultIcon;
if ($defaultIcon == 'file-other') {
$customName = 'file-unknown';
}
if ($defaultIcon == 'file-doc') {
$customName = 'filetype-doc';
}
if ($defaultIcon == 'file-pdf') {
$customName = 'filetype-pdf';
}
return $customName;
}
?>
<!DOCTYPE html>
<html data-theme="auto" lang="en">
@ -18,9 +34,9 @@ use App\FileAndDir;
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="theme-color" content="#ffffff">
<link rel="stylesheet" href="https://theme.knah-tsaeb.org/kt-scheme.css">
<link rel="stylesheet" href="templates/default/assets/css/kt-scheme.css">
<link href="assets/css/glightbox.min.css" rel="stylesheet">
<link href="templates/default/default.css" rel="stylesheet">
<link href="templates/default/assets/css/default.css" rel="stylesheet">
<link rel="apple-touch-icon" sizes="57x57" href="/assets/favicons/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/assets/favicons/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/assets/favicons/apple-icon-72x72.png">
@ -68,16 +84,10 @@ use App\FileAndDir;
<li><a href="<?= $config['website']; ?>">Site</a></li>
</ul>
<ul>
<li><a href="#" onclick="switchTheme();"><svg version="1.1" id="toggleDarkMode" viewBox="0 0 512 512">
<g id="SVGRepo_bgCarrier" stroke-width="0"></g>
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
<g id="SVGRepo_iconCarrier">
<path
d="M256,0C114.842,0,0,114.84,0,256s114.842,256,256,256s256-114.84,256-256S397.158,0,256,0z M322.225,451.558 c-20.797,7.062-43.071,10.894-66.225,10.894c-113.837,0-206.452-92.614-206.452-206.452S142.163,49.548,256,49.548 c23.154,0,45.429,3.832,66.226,10.894C266.612,107.439,231.226,177.657,231.226,256S266.612,404.561,322.225,451.558z">
</path>
</g>
</svg>
</a></li>
<li><a href="#" onclick="switchTheme();"><svg viewBox="0 0 48 48" aria-hidden="true" focusable="false" role="presentation">
<title>ui-light-dark</title>
<use href="templates/default/assets/icons/sprite.svg#ui-light-dark"></use>
</svg></a></li>
</ul>
</nav>
</header>
@ -108,7 +118,14 @@ use App\FileAndDir;
<?php foreach ($value as $entry) : ?>
<figure>
<a href="<?= $entry['link']; ?>" class="<?= FileAndDir::addToLightBox($entry['type']); ?> card-content" data-gallery="gallery" data-glightbox="<?= $entry['dataAttr']; ?>">
<img src="<?= $entry['thumb']; ?>" loading="lazy" alt="" width="<?= $config['thumbSize']; ?>" height="<?= $config['thumbSize']; ?>">
<?php if ($config['iconsTheme'] !== 'default' || ($entry['type'] === 'file-img' || $entry['type'] === 'folder')): ?>
<img src="<?= $entry['thumb']; ?>" loading="lazy" alt="" width="<?= $config['thumbSize']; ?>" height="<?= $config['thumbSize']; ?>">
<?php else: ?>
<svg viewBox="0 0 48 48" aria-hidden="true" focusable="false" role="presentation" style="height:<?= $config['thumbSize']; ?>px">
<title><?= $entry['type']; ?></title>
<use href="templates/default/assets/icons/sprite.svg#<?= adaptIconName($entry['type']); ?>"></use>
</svg>
<?php endif; ?>
</a>
<figcaption>
<?= $entry['name']; ?>
@ -120,7 +137,10 @@ use App\FileAndDir;
</section>
</main>
<a href="#top" id="backtop">Top</a>
<a href="#top" id="backtop"><svg viewBox="0 0 48 48" aria-hidden="true" focusable="false" role="presentation">
<title>ui-arrow-up</title>
<use href="templates/default/assets/icons/sprite.svg#ui-arrow-up"></use>
</svg> Top</a>
<footer>
Gallery by <?= $config['author']; ?> /

View file

@ -0,0 +1,14 @@
public/templates/default/assets/icons/ui-arrow-up.svg
public/templates/default/assets/icons/ui-light-dark.svg
public/templates/default/assets/icons/file-audio.svg
public/templates/default/assets/icons/file-block.svg
public/templates/default/assets/icons/file-broken.svg
public/templates/default/assets/icons/file-doc.svg
public/templates/default/assets/icons/file-other.svg
public/templates/default/assets/icons/file-pdf.svg
public/templates/default/assets/icons/file-pres.svg
public/templates/default/assets/icons/file-spread.svg
public/templates/default/assets/icons/file-text.svg
public/templates/default/assets/icons/file-video.svg
public/templates/default/assets/icons/file-zip.svg
public/templates/default/assets/icons/folder-empty.svg