1
0
mirror of https://github.com/bpatrik/pigallery2.git synced 2025-01-24 05:17:16 +02:00

merge upstream master

This commit is contained in:
crypt-o-warrior 2022-12-17 01:44:18 +01:00
parent 640aec03dd
commit 75c26f8422
No known key found for this signature in database
GPG Key ID: 95194045885EFFFF
5 changed files with 162 additions and 158 deletions

45
package-lock.json generated
View File

@ -27,7 +27,7 @@
"sharp": "0.31.2", "sharp": "0.31.2",
"ts-exif-parser": "0.2.2", "ts-exif-parser": "0.2.2",
"ts-node-iptc": "1.0.11", "ts-node-iptc": "1.0.11",
"typeconfig": "2.0.24", "typeconfig": "2.0.26",
"typeorm": "0.3.10", "typeorm": "0.3.10",
"xml2js": "0.4.23" "xml2js": "0.4.23"
}, },
@ -14587,9 +14587,12 @@
} }
}, },
"node_modules/minimist": { "node_modules/minimist": {
"version": "1.2.6", "version": "1.2.7",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
}, },
"node_modules/minipass": { "node_modules/minipass": {
"version": "3.1.6", "version": "3.1.6",
@ -20822,18 +20825,13 @@
} }
}, },
"node_modules/typeconfig": { "node_modules/typeconfig": {
"version": "2.0.24", "version": "2.0.26",
"resolved": "https://registry.npmjs.org/typeconfig/-/typeconfig-2.0.24.tgz", "resolved": "https://registry.npmjs.org/typeconfig/-/typeconfig-2.0.26.tgz",
"integrity": "sha512-djBNV0x/ZmOGvbq7/LhTG2mHfkZL6Lfox1MJ8g8Kvyxa2OP0tD0jJNVUX1lGzjBxw0G99uWDYCWFn08LCil+cA==", "integrity": "sha512-qAF+0F/Yln3V8dyjwI5G8VwihkDGG/RcAaKpK0LGmu2Lsn9qLoAIcakSm68t+9TW5owC4KLaz3h4mvBhKyColQ==",
"dependencies": { "dependencies": {
"minimist": "1.2.5" "minimist": "1.2.7"
} }
}, },
"node_modules/typeconfig/node_modules/minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"node_modules/typed-assert": { "node_modules/typed-assert": {
"version": "1.0.9", "version": "1.0.9",
"resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz",
@ -33344,9 +33342,9 @@
} }
}, },
"minimist": { "minimist": {
"version": "1.2.6", "version": "1.2.7",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g=="
}, },
"minipass": { "minipass": {
"version": "3.1.6", "version": "3.1.6",
@ -38128,18 +38126,11 @@
} }
}, },
"typeconfig": { "typeconfig": {
"version": "2.0.24", "version": "2.0.26",
"resolved": "https://registry.npmjs.org/typeconfig/-/typeconfig-2.0.24.tgz", "resolved": "https://registry.npmjs.org/typeconfig/-/typeconfig-2.0.26.tgz",
"integrity": "sha512-djBNV0x/ZmOGvbq7/LhTG2mHfkZL6Lfox1MJ8g8Kvyxa2OP0tD0jJNVUX1lGzjBxw0G99uWDYCWFn08LCil+cA==", "integrity": "sha512-qAF+0F/Yln3V8dyjwI5G8VwihkDGG/RcAaKpK0LGmu2Lsn9qLoAIcakSm68t+9TW5owC4KLaz3h4mvBhKyColQ==",
"requires": { "requires": {
"minimist": "1.2.5" "minimist": "1.2.7"
},
"dependencies": {
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
}
} }
}, },
"typed-assert": { "typed-assert": {

View File

@ -49,7 +49,7 @@
"sharp": "0.31.2", "sharp": "0.31.2",
"ts-exif-parser": "0.2.2", "ts-exif-parser": "0.2.2",
"ts-node-iptc": "1.0.11", "ts-node-iptc": "1.0.11",
"typeconfig": "2.0.24", "typeconfig": "2.0.26",
"xml2js": "0.4.23", "xml2js": "0.4.23",
"typeorm": "0.3.10" "typeorm": "0.3.10"
}, },

View File

@ -77,7 +77,7 @@ export class MapLayers {
@SubConfigClass() @SubConfigClass()
export class ClientMapConfig { export class ClientMapConfig {
@ConfigProperty<boolean, IPrivateConfig>({ @ConfigProperty<boolean, IPrivateConfig, string>({
onNewValue: (value, config) => { onNewValue: (value, config) => {
if (value === false) { if (value === false) {
config.Client.MetaFile.gpx = false; config.Client.MetaFile.gpx = false;

View File

@ -50,7 +50,6 @@
height: initial; height: initial;
text-align: right; text-align: right;
width: 100%; width: 100%;
padding: 5px;
font-size: large; font-size: large;
opacity: 1; opacity: 1;
transition: width 0.3s ease-in-out, opacity 1s; transition: width 0.3s ease-in-out, opacity 1s;
@ -60,6 +59,12 @@
-moz-transition: width 0.3s ease-in-out, opacity 1s; -moz-transition: width 0.3s ease-in-out, opacity 1s;
} }
.controls-background {
padding: 5px;
display: inline-block;
background-color: rgba(0, 0, 0, 0.2);
border-radius: 5px;
}
.controls .control-button { .controls .control-button {
@ -103,7 +108,6 @@
} }
.controls-playback { .controls-playback {
padding-right: 15px;
bottom: 0; bottom: 0;
z-index: 3; z-index: 3;
position: absolute; position: absolute;
@ -258,7 +262,7 @@ input[type="range"].zoom-progress::-moz-range-track {
border-radius: 5px !important; border-radius: 5px !important;
} }
.face.controls-nodim{ .face.controls-nodim {
opacity: 0.7; opacity: 0.7;
} }
@ -270,10 +274,12 @@ input[type="range"].zoom-progress::-moz-range-track {
.dim-controls { .dim-controls {
opacity: 0.0; opacity: 0.0;
} }
.controls-caption.controls-nodim{
.controls-caption.controls-nodim {
opacity: 0.7; opacity: 0.7;
} }
.controls:hover{
.controls:hover {
opacity: 1; opacity: 1;
} }

View File

@ -5,111 +5,112 @@
<div [class.dim-controls]="controllersDimmed" <div [class.dim-controls]="controllersDimmed"
class="controls controls-top"> class="controls controls-top">
<div class="controls-background">
<div class="highlight control-button" (click)="toggleInfoPanel.emit()"
title="info key: i" i18n-title>
<span class="oi oi-info"></span>
</div>
<div class="highlight control-button" (click)="toggleInfoPanel.emit()" <div *ngIf="fullScreenService.isFullScreenEnabled()"
title="info key: i" i18n-title> class="highlight control-button"
<span class="oi oi-info"></span> (click)="toggleFullScreen.emit()"
</div> title="toggle fullscreen, key: f" i18n-title>
<div *ngIf="fullScreenService.isFullScreenEnabled()"
class="highlight control-button"
(click)="toggleFullScreen.emit()"
title="toggle fullscreen, key: f" i18n-title>
<span class="oi oi-fullscreen-exit"> <span class="oi oi-fullscreen-exit">
</span> </span>
</div> </div>
<div *ngIf="!fullScreenService.isFullScreenEnabled()" <div *ngIf="!fullScreenService.isFullScreenEnabled()"
class="highlight control-button" class="highlight control-button"
(click)="toggleFullScreen.emit(true)" (click)="toggleFullScreen.emit(true)"
title="toggle fullscreen, key: f" i18n-title> title="toggle fullscreen, key: f" i18n-title>
<span class="oi oi-fullscreen-enter"> <span class="oi oi-fullscreen-enter">
</span> </span>
</div> </div>
<div class="btn-group" dropdown [insideClick]="true"> <div class="btn-group" dropdown [insideClick]="true">
<button id="button-basic" dropdownToggle type="button" <button id="button-basic" dropdownToggle type="button"
class="border-0 highlight control-button" class="border-0 highlight control-button"
data-bs-auto-close="outside" data-bs-auto-close="outside"
aria-controls="dropdown-basic"> aria-controls="dropdown-basic">
<span class="oi oi-menu"></span> <span class="oi oi-menu"></span>
</button> </button>
<ul id="dropdown-basic" *dropdownMenu class="dropdown-menu dropdown-menu-right" <ul id="dropdown-basic" *dropdownMenu class="dropdown-menu dropdown-menu-right"
role="menu" aria-labelledby="button-basic"> role="menu" aria-labelledby="button-basic">
<li role="menuitem"> <li role="menuitem">
<a *ngIf="activePhoto" <a *ngIf="activePhoto"
[href]="activePhoto.gridMedia.getMediaPath()" [href]="activePhoto.gridMedia.getMediaPath()"
[download]="activePhoto.gridMedia.media.name" [download]="activePhoto.gridMedia.media.name"
class="dropdown-item"> class="dropdown-item">
<span class="oi oi-data-transfer-download pe-2" i18n></span> Download <span class="oi oi-data-transfer-download pe-2" i18n></span> Download
<small>(shift + D)</small> <small>(shift + D)</small>
</a> </a>
</li> </li>
<li role="menuitem"> <li role="menuitem">
<div class="dropdown-item d-flex justify-content-between"> <div class="dropdown-item d-flex justify-content-between">
<span title="key: c" i18n-title i18n>Show caption</span> <span title="key: c" i18n-title i18n>Show caption</span>
<bSwitch <bSwitch
class="switch ps-2" class="switch ps-2"
name="caption-switch" name="caption-switch"
switch-on-color="success" switch-on-color="success"
[switch-inverse]="true" [switch-inverse]="true"
switch-off-text="on hover" switch-off-text="on hover"
switch-on-text="always" switch-on-text="always"
i18n-switch-off-text i18n-switch-off-text
i18n-switch-on-text i18n-switch-on-text
[switch-handle-width]="100" [switch-handle-width]="100"
[switch-label-width]="20" [switch-label-width]="20"
[(ngModel)]="lightboxService.captionAlwaysOn"> [(ngModel)]="lightboxService.captionAlwaysOn">
</bSwitch> </bSwitch>
</div> </div>
</li> </li>
<li role="menuitem"> <li role="menuitem ">
<div class="dropdown-item d-flex justify-content-between"> <div class="dropdown-item d-flex justify-content-between">
<span title="key: a" i18n-title i18n>Show faces</span> <span title="key: a" i18n-title i18n>Show faces</span>
<bSwitch <bSwitch
class="switch ps-2" class="switch ps-2"
name="faces-switch" name="faces-switch"
switch-on-color="success" switch-on-color="success"
[switch-inverse]="true" [switch-inverse]="true"
switch-off-text="on hover" switch-off-text="on hover"
switch-on-text="always" switch-on-text="always"
i18n-switch-off-text i18n-switch-off-text
i18n-switch-on-text i18n-switch-on-text
[switch-handle-width]="100" [switch-handle-width]="100"
[switch-label-width]="20" [switch-label-width]="20"
[(ngModel)]="lightboxService.facesAlwaysOn"> [(ngModel)]="lightboxService.facesAlwaysOn">
</bSwitch> </bSwitch>
</div> </div>
</li> </li>
<li <li
*ngIf="activePhoto && activePhoto.gridMedia.isVideo()" *ngIf="activePhoto && activePhoto.gridMedia.isVideo()"
role="menuitem"> role="menuitem ">
<div class="dropdown-item d-flex justify-content-between"> <div class="dropdown-item d-flex justify-content-between">
<span title="key: l" i18n-title i18n>Play videos</span> <span title="key: l" i18n-title i18n>Play videos</span>
<bSwitch <bSwitch
class="switch ps-2" class="switch ps-2"
name="faces-switch" name="faces-switch"
switch-on-color="success" switch-on-color="success"
[switch-inverse]="true" [switch-inverse]="true"
switch-off-text="once" switch-off-text="once"
switch-on-text="loop" switch-on-text="loop"
i18n-switch-off-text i18n-switch-off-text
i18n-switch-on-text i18n-switch-on-text
[switch-handle-width]="100" [switch-handle-width]="100"
[switch-label-width]="20" [switch-label-width]="20"
[(ngModel)]="lightboxService.loopVideos"> [(ngModel)]="lightboxService.loopVideos">
</bSwitch> </bSwitch>
</div> </div>
</li> </li>
</ul> </ul>
</div> </div>
<div class="highlight control-button" <div class="highlight control-button"
(click)="closeLightbox()" (click)="closeLightbox()"
title="close, key: Escape" i18n-title> title="close, key: Escape" i18n-title>
<span class="oi oi-x"> <span class="oi oi-x">
</span> </span>
</div>
</div> </div>
</div> </div>
@ -127,7 +128,7 @@
[style.left.px]="photoFrameDim.width/2 + drag.x" [style.left.px]="photoFrameDim.width/2 + drag.x"
[style.width.px]="faceContainerDim.width* zoom" [style.width.px]="faceContainerDim.width* zoom"
[style.height.px]="faceContainerDim.height* zoom" [style.height.px]="faceContainerDim.height* zoom"
*ngIf="facesEnabled && activePhoto && activePhoto.gridMedia.Photo.metadata.faces && activePhoto.gridMedia.Photo.metadata.faces.length > 0"> *ngIf="facesEnabled && activePhoto && activePhoto.gridMedia.Photo.metadata.faces && activePhoto.gridMedia.Photo.metadata.faces.length > 0">
<ng-container *ngIf="searchEnabled"> <ng-container *ngIf="searchEnabled">
<a <a
[class.controls-nodim]="lightboxService.facesAlwaysOn" [class.controls-nodim]="lightboxService.facesAlwaysOn"
@ -186,35 +187,41 @@
<div [class.dim-controls]="controllersDimmed" class="controls controls-playback" <div [class.dim-controls]="controllersDimmed" class="controls controls-playback"
*ngIf="zoom == 1 && activePhoto && activePhoto.gridMedia.isPhoto()"> *ngIf="zoom == 1 && activePhoto && activePhoto.gridMedia.isPhoto()">
<div class="controls-background">
<span class="oi oi-media-pause highlight control-button" <span class="oi oi-media-pause highlight control-button"
[ngClass]="playBackState == PlayBackStates.Paused ? 'button-disabled':''" [ngClass]="playBackState == PlayBackStates.Paused ? 'button-disabled':''"
(click)="pause()" (click)="pause()"
title="pause"></span> title="pause"></span>
<span class="oi oi-media-play highlight control-button"
<span class="oi oi-media-play highlight control-button" [ngClass]="playBackState == PlayBackStates.Play ? 'button-active' : ''"
[ngClass]="playBackState == PlayBackStates.Play ? 'button-active':''" (click)="play()"
(click)="play()" title="auto play"></span>
title="auto play"></span> <span class="oi btn-group highlight control-button"
dropdown
<span class="oi btn-group highlight control-button" [dropup]="true">
dropdown <div id="button-duration"
[dropup]="true"> dropdownToggle
<div id="button-duration" data-bs-auto-close="outside"
dropdownToggle aria-controls="dropdown-basic">
data-bs-auto-close="outside" <span class="text-white pe-1">{{selectedPlayBackDuration + 's'}}</span>
aria-controls="dropdown-basic"> <span class="oi-clock"></span>
<span class="text-white pe-1">{{selectedPlayBackDuration + 's'}}</span> </div>
<span class="oi-clock"></span> <ul id="dropdown-basic"
</div> *dropdownMenu
<ul id="dropdown-basic" *dropdownMenu class="dropdown-menu dropdown-menu-right" class="dropdown-menu dropdown-menu-right"
role="menu" aria-labelledby="button-duration"> role="menu"
<li *ngFor="let duration of playBackDurations" role="menuitem" (click)="play(duration)"> aria-labelledby="button-duration">
<a class="dropdown-item" [class]="selectedPlayBackDuration === duration ? 'active' : ''">{{duration}}s</a> <li *ngFor="let duration of playBackDurations"
</li> role="menuitem"
</ul> (click)="play(duration)">
</span> <a class="dropdown-item"
[class]="selectedPlayBackDuration === duration ? 'active' : ''">
{{duration}}s
</a>
</li>
</ul>
</span>
</div>
</div> </div>
<div [class.dim-controls]="controllersDimmed" class="controls controls-big-play" <div [class.dim-controls]="controllersDimmed" class="controls controls-big-play"