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:
parent
640aec03dd
commit
75c26f8422
45
package-lock.json
generated
45
package-lock.json
generated
@ -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": {
|
||||||
|
@ -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"
|
||||||
},
|
},
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user