1
0
mirror of https://github.com/bpatrik/pigallery2.git synced 2024-12-25 02:04:15 +02:00

migrating to bootstrap v4

This commit is contained in:
Patrik J. Braun 2018-05-13 16:59:57 -04:00
parent b7d9b21e9e
commit b3b3e63967
52 changed files with 762 additions and 648 deletions

View File

@ -21,6 +21,7 @@
"styles": [
"../node_modules/ng2-toastr/bundles/ng2-toastr.min.css",
"../node_modules/bootstrap/dist/css/bootstrap.css",
"../node_modules/open-iconic/font/css/open-iconic-bootstrap.css",
"styles.css"
],
"scripts": [],

View File

@ -3,7 +3,6 @@
[![Build Status](https://travis-ci.org/bpatrik/pigallery2.svg?branch=master)](https://travis-ci.org/bpatrik/pigallery2)
[![Coverage Status](https://coveralls.io/repos/github/bpatrik/PiGallery2/badge.svg?branch=master)](https://coveralls.io/github/bpatrik/PiGallery2?branch=master)
[![Heroku](https://heroku-badge.herokuapp.com/?app=pigallery2&style=flat)](https://pigallery2.herokuapp.com)
[![Code Climate](https://codeclimate.com/github/bpatrik/pigallery2/badges/gpa.svg)](https://codeclimate.com/github/bpatrik/pigallery2)
[![Dependency Status](https://david-dm.org/bpatrik/pigallery2.svg)](https://david-dm.org/bpatrik/pigallery2)
[![devDependency Status](https://david-dm.org/bpatrik/pigallery2/dev-status.svg)](https://david-dm.org/bpatrik/pigallery2#info=devDependencies)

View File

@ -18,7 +18,6 @@ export class GalleryMWs {
public static async listDirectory(req: Request, res: Response, next: NextFunction) {
console.log('listDirectory');
const directoryName = req.params.directory || '/';
const absoluteDirectoryName = path.join(ProjectPath.ImageFolder, directoryName);
@ -34,8 +33,6 @@ export class GalleryMWs {
req.resultPipe = new ContentWrapper(null, null, true);
return next();
}
console.log(req.session.user);
console.log(directory);
if (req.session.user.permissions &&
req.session.user.permissions.length > 0 &&
req.session.user.permissions[0] !== '/*') {

View File

@ -100,11 +100,6 @@ export class Server {
keys: ['key1' + s4() + s4() + s4() + s4(), 'key2' + s4() + s4() + s4() + s4(), 'key3' + s4() + s4() + s4() + s4()]
}));
/* this.app.use((req: Request, res: Response, next: NextFunction) => {
res.setHeader('Accept-Ranges', 'none');
res.setHeader('Connection', 'close');
next();
});*/
/**
* Parse parameters in POST

View File

@ -44,5 +44,17 @@ export interface GPSMetadata {
latitude?: number;
longitude?: number;
altitude?: number;
}
export module PhotoDTO {
export const hasPositionData = (photo: PhotoDTO): boolean => {
return !!photo.metadata.positionData &&
!!(photo.metadata.positionData.city ||
photo.metadata.positionData.state ||
photo.metadata.positionData.country ||
(photo.metadata.positionData.GPSData &&
photo.metadata.positionData.GPSData.altitude &&
photo.metadata.positionData.GPSData.latitude &&
photo.metadata.positionData.GPSData.longitude));
};
}

View File

@ -1,11 +1,11 @@
<app-frame>
<div body class="container">
<div class="panel panel-default" *ngIf="notificationService.notifications.length>0">
<div class="panel-heading">
<h3 class="panel-title" i18n>Server notifications</h3>
</div>
<div class="panel-body">
<div class="card mb-4" *ngIf="notificationService.notifications.length>0">
<h5 class="card-header" i18n>
Server notifications
</h5>
<div class="card-body">
<ng-container *ngFor="let notification of notificationService.notifications">
<div class="alert alert-{{getCss(notification.type)}}" role="alert">
@ -16,28 +16,26 @@
</ng-container>
</div>
<div class="panel-footer" i18n>
<div class="card-footer" i18n>
To dismiss these notifications, restart the server.
</div>
</div>
<div class="form-horizontal">
<div class="form-group">
<label class="col-sm-10 col-xs-8 control-label" for="simplifiedMode" i18n>Mode</label>
<div class="col-sm-2 col-xs-4">
<bSwitch
id="simplifiedMode"
class="switch"
name="simplifiedMode"
[switch-off-color]="'warning'"
[switch-on-color]="'primary'"
[switch-inverse]="'inverse'"
[switch-off-text]="text.Advanced"
[switch-on-text]="text.Simplified"
[switch-handle-width]="'100'"
[switch-label-width]="'20'"
[(ngModel)]="simplifiedMode">
</bSwitch>
</div>
<div class="form-group d-flex justify-content-end">
<label class="control-label align-self-end mr-2" for="simplifiedMode" i18n>Mode</label>
<bSwitch
id="simplifiedMode"
class="switch"
name="simplifiedMode"
[switch-off-color]="'warning'"
[switch-on-color]="'primary'"
[switch-inverse]="'inverse'"
[switch-off-text]="text.Advanced"
[switch-on-text]="text.Simplified"
[switch-handle-width]="'100'"
[switch-label-width]="'20'"
[(ngModel)]="simplifiedMode">
</bSwitch>
</div>
</div>
<app-settings-basic [simplifiedMode]="simplifiedMode"></app-settings-basic>

View File

@ -47,6 +47,7 @@ import {InfoPanelLightboxComponent} from './gallery/lightbox/infopanel/info-pane
import {MapSettingsComponent} from './settings/map/map.settings.component';
import {TooltipModule} from 'ngx-bootstrap/tooltip';
import {BsDropdownModule} from 'ngx-bootstrap/dropdown';
import {CollapseModule} from 'ngx-bootstrap/collapse';
import {ThumbnailSettingsComponent} from './settings/thumbnail/thumbanil.settings.component';
import {SearchSettingsComponent} from './settings/search/search.settings.component';
import {SettingsService} from './settings/settings.service';
@ -90,6 +91,7 @@ export class CustomUrlSerializer implements UrlSerializer {
}
}
// use the require method provided by webpack
declare const require;
export function translationsFactory(locale: string) {
@ -109,6 +111,7 @@ export function translationsFactory(locale: string) {
TooltipModule.forRoot(),
ToastModule.forRoot(),
ModalModule.forRoot(),
CollapseModule.forRoot(),
BsDropdownModule.forRoot(),
AgmCoreModule.forRoot(),
SlimLoadingBarModule.forRoot()
@ -168,7 +171,13 @@ export function translationsFactory(locale: string) {
useFactory: translationsFactory,
deps: [LOCALE_ID]
},
I18n
I18n,
/*
{provide: TRANSLATIONS, useValue: translationsFactory('en')},
{provide: TRANSLATIONS_FORMAT, useValue: 'xlf'},
{provide: LOCALE_ID, useValue: 'en'},
{provide: MISSING_TRANSLATION_STRATEGY, useValue: MissingTranslationStrategy.Ignore},
*/
],
bootstrap: [AppComponent]
})

View File

@ -1,3 +1,7 @@
nav {
z-index: 999;
}
.navbar {
margin-bottom: 20px;
}
@ -18,7 +22,7 @@ ng2-slim-loading-bar {
.admin-link {
padding-bottom: 0;
padding-left: 0;
font-size: 20px;
font-size: 18px;
}
.divider-vertical:first-child {
@ -26,10 +30,8 @@ ng2-slim-loading-bar {
}
.navbar .divider-vertical {
height: 30px;
margin: 10px;
border-right: 1px solid #ffffff;
border-left: 1px solid #f2f2f2;
margin: 5px 10px;
border-left: 1px solid rgba(255, 255, 255, 0.5);
}
.navbar-inverse .divider-vertical {
@ -61,5 +63,9 @@ ng2-slim-loading-bar {
app-language {
display: block;
margin-right: 10px;
}
.navbar-expand .navbar-nav .nav-link {
padding-right: 1.0rem;
padding-left: 1.0rem;
}

View File

@ -1,55 +1,47 @@
<ng2-slim-loading-bar [color]="'#337ab7'" [height]="'3px'"></ng2-slim-loading-bar>
<nav class="navbar navbar-inverse navbar-static-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#navbar"
aria-expanded="false" aria-controls="navbar"
(click)="toggleState()">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" [routerLink]="['/gallery','/']"><img src="assets/icon_inv.png"
style="max-height: 26px; display: inline;"/>
{{title}}</a>
</div>
<div id="navbar" class="collapse navbar-collapse" [ngClass]="{ 'in': isIn }">
<ul class="nav navbar-nav">$
</ul>
<nav class="navbar navbar-dark bg-dark navbar-expand-md">
<a class="navbar-brand" [routerLink]="['/gallery','/']"
[queryParams]="_shareService.isSharing() ? { sk: _shareService.getSharingKey() }:{}">
<img src="assets/icon_inv.png" width="30" height="30" class="d-inline-block align-top" alt="">
<strong>{{title}}</strong>
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav"
aria-expanded="false" aria-label="Toggle navigation" (click)="toggleState()">
<span class="navbar-toggler-icon"></span>
</button>
<ul class="nav navbar-nav navbar-right">
<ng-content select="[navbar]"></ng-content>
<li class="divider-vertical">
</li>
<li *ngIf="authenticationRequired">
<p class="navbar-text" *ngIf="user.value">
<span class="glyphicon glyphicon-user" aria-hidden="true"></span> {{user.value.name}}</p>
</li>
<li *ngIf="isAdmin()">
<a style="cursor: pointer"
class="admin-link"
[routerLink]="['/admin']">
<span class="glyphicon glyphicon-wrench" aria-hidden="true"></span>
<span *ngIf="notificationService.notifications.length>0" class="badge">{{notificationService.notifications.length}}</span>
</a>
</li>
<li>
<app-language class="navbar-btn" isDark="true"></app-language>
</li>
<li *ngIf="authenticationRequired">
<button class="btn btn-default navbar-btn"
style="cursor: pointer"
(click)="logout()">
<ng-container i18n>Logout</ng-container>
<span class="glyphicon glyphicon-log-out" aria-hidden="true"></span>
</button>
</li>
</ul>
<div class="collapse navbar-collapse" id="navbarNav" [collapse]="collapsed">
<ul class="navbar-nav navbar-right ml-auto">
<ng-content select="[navbar]"></ng-content>
<li class="nav-item divider-vertical">
</li>
<li class="nav-item mr-2 ml-2" *ngIf="authenticationRequired" style=" white-space: nowrap;">
<span class="navbar-text" *ngIf="user.value">
<span class="oi oi-person"></span> {{user.value.name}}</span>
</li>
<li class="nav-item" *ngIf="isAdmin()">
<a style="cursor: pointer;"
class="nav-link admin-link"
[routerLink]="['/admin']">
<span class="oi oi-wrench"></span>
<span *ngIf="notificationService.notifications.length>0" class="badge">{{notificationService.notifications.length}}</span>
</a>
</li>
<li class="nav-item ml-2">
<app-language class="navbar-btn" isDark="true"></app-language>
</li>
<li class="nav-item ml-2" *ngIf="authenticationRequired">
<button class="btn btn-default navbar-btn"
style="cursor: pointer"
(click)="logout()">
<span class="oi oi-account-logout"></span>
<ng-container i18n>Logout</ng-container>
</button>
</li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div><!--/.nav-collapse -->
</nav>
<ng-content select="[body]"></ng-content>

View File

@ -5,6 +5,7 @@ import {UserDTO, UserRoles} from '../../../common/entities/UserDTO';
import {Config} from '../../../common/config/public/Config';
import {BehaviorSubject} from 'rxjs/BehaviorSubject';
import {NotificationService} from '../model/notification.service';
import {ShareService} from '../gallery/share.service';
@Component({
selector: 'app-frame',
@ -18,17 +19,18 @@ export class FrameComponent {
user: BehaviorSubject<UserDTO>;
authenticationRequired = false;
public title: string;
isIn = false;
collapsed = true;
constructor(private _authService: AuthenticationService,
public notificationService: NotificationService) {
public notificationService: NotificationService,
public _shareService: ShareService) {
this.user = this._authService.user;
this.authenticationRequired = Config.Client.authenticationRequired;
this.title = Config.Client.applicationTitle;
}
toggleState() { // click handler
this.isIn = !this.isIn;
this.collapsed = !this.collapsed;
}
isAdmin() {

View File

@ -57,6 +57,10 @@ export class Photo extends IconPhoto {
}
hasPositionData(): boolean {
return PhotoDTO.hasPositionData(this.photo);
}
getThumbnailPath() {
const size = this.getThumbnailSize();
return Utils.concatUrls(Config.Client.urlBase,

View File

@ -9,9 +9,8 @@
<div class="photo" *ngIf="thumbnail && thumbnail.Available"
[style.background-image]="getSanitizedThUrl()"></div>
<span *ngIf="!thumbnail || !thumbnail.Available" class="glyphicon glyphicon-folder-open no-image"
<span *ngIf="!thumbnail || !thumbnail.Available" class="oi oi-folder no-image"
aria-hidden="true">
</span>
</div>
<!--Info box -->

View File

@ -3,25 +3,25 @@
<ng-container navbar>
<li *ngIf="countDown">
<p class="navbar-text">
<li class="nav-item" *ngIf="countDown">
<span class="navbar-text">
<ng-container i18n>Link availability</ng-container>
: {{countDown.day}}
<ng-container i18n>days</ng-container>
,
{{("0"+countDown.hour).slice(-2)}}:{{("0"+countDown.minute).slice(-2)}}:{{("0"+countDown.second).slice(-2)}}
</p>
</span>
</li>
<li *ngIf="showSearchBar">
<li class="nav-item" *ngIf="showSearchBar">
<app-gallery-search #search></app-gallery-search>
</li>
<li *ngIf="showShare">
<li class="nav-item" *ngIf="showShare">
<app-gallery-share></app-gallery-share>
</li>
</ng-container>
<div body class="container" style="width: 100%; padding:0" *ngIf="_galleryService.content.value.directory">
<div body class="container-fluid" style="width: 100%; padding:0" *ngIf="_galleryService.content.value.directory">
<app-gallery-navbar [directory]="_galleryService.content.value.directory"></app-gallery-navbar>
<div class="directories">
@ -34,7 +34,7 @@
[lightbox]="lightbox"></app-gallery-grid>
</div>
<div body class="container" style="width: 100%; padding:0" *ngIf="_galleryService.content.value.searchResult">
<div body class="container-fluid" style="width: 100%; padding:0" *ngIf="_galleryService.content.value.searchResult">
<div class="alert alert-info" role="alert"
*ngIf="_galleryService.content.value.searchResult.resultOverflow == true" i18n>
Too many results to show. Refine your search.
@ -43,10 +43,10 @@
<li class="active">
<ng-container i18n>Searching for:</ng-container>
<span [ngSwitch]="_galleryService.content.value.searchResult.searchType">
<span *ngSwitchCase="0" class="glyphicon glyphicon-picture"></span>
<span *ngSwitchCase="1" class="glyphicon glyphicon-folder-open"></span>
<span *ngSwitchCase="2" class="glyphicon glyphicon-tag"></span>
<span *ngSwitchCase="3" class="glyphicon glyphicon-map-marker"></span>
<span *ngSwitchCase="SearchTypes.image" class="oi oi-image"></span>
<span *ngSwitchCase="SearchTypes.directory" class="oi oi-folder"></span>
<span *ngSwitchCase="SearchTypes.keyword" class="oi oi-tag"></span>
<span *ngSwitchCase="SearchTypes.position" class="oi oi-map-marker"></span>
</span>
<strong>{{_galleryService.content.value.searchResult.searchText}}</strong>
</li>

View File

@ -37,6 +37,7 @@ export class GalleryComponent implements OnInit, OnDestroy {
};
public countDown = null;
public mapEnabled = true;
SearchTypes: any = [];
constructor(public _galleryService: GalleryService,
private _authService: AuthenticationService,
@ -45,6 +46,7 @@ export class GalleryComponent implements OnInit, OnDestroy {
private _route: ActivatedRoute,
private _navigation: NavigationService) {
this.mapEnabled = Config.Client.Map.enabled;
this.SearchTypes = SearchTypes;
PageHelper.showScrollY();
}

View File

@ -1,6 +1,6 @@
<div class="static" *ngIf="animate == false">
<span class="glyphicon"
[ngClass]="error ? 'glyphicon-warning-sign' : 'glyphicon-picture'" aria-hidden="true">
<span class="oi"
[ngClass]="error ? 'oi-warning' : 'oi-image'" aria-hidden="true">
</span>
</div>
<div class="sk-cube-grid animate" *ngIf="animate == true">

View File

@ -15,8 +15,8 @@
[style.width.px]="container.nativeElement.offsetWidth">
<div class="photo-name">{{gridPhoto.photo.name}}</div>
<div class="photo-position" *ngIf="gridPhoto.photo.metadata.positionData">
<span class="glyphicon glyphicon-map-marker"></span>
<div class="photo-position" *ngIf="gridPhoto.hasPositionData()">
<span class="oi oi-map-marker"></span>
<ng-template [ngIf]="getPositionText()">
<a [routerLink]="['/search', getPositionText(), {type:SearchTypes[SearchTypes.position]}]"
*ngIf="searchEnabled">

View File

@ -69,6 +69,7 @@ export class GalleryPhotoComponent implements IRenderable, OnInit, OnDestroy {
}
}
getPositionText(): string {
if (!this.gridPhoto) {
return '';

View File

@ -21,6 +21,8 @@
.details-sub {
color: #555;
padding: 0;
font-size: 0.875rem;
}
.details-sub div {
@ -39,7 +41,6 @@
}
.close {
margin-top: 5px;
margin-right: 12px;
font-size: 36px;
margin: 0;
font-size: 1.2rem;
}

View File

@ -1,74 +1,75 @@
<div class="content">
<div class="modal-header">
<button type="button" class="close" (click)="close()" aria-label="Close"><span
aria-hidden="true">&times;</span></button>
<h1 class="modal-title" i18n>Info</h1>
<h2 class="modal-title" i18n>Info</h2>
<button type="button" class="close" (click)="close()" aria-label="Close">
<span class="oi oi-x" aria-hidden="true"></span>
</button>
</div>
<div class="row">
<div class="col-xs-2">
<span class="details-icon glyphicon glyphicon-picture"></span>
<div class="col-2">
<span class="details-icon oi oi-image"></span>
</div>
<div class="col-xs-10">
<div class="col-10">
<div class="details-main">
{{photo.name}}
</div>
<div class="details-sub">
<div class="col-xs-4">{{photo.metadata.size.width}} x {{photo.metadata.size.height}}</div>
<div class="col-xs-4">{{calcMpx()}}MP</div>
<div class="col-xs-4" *ngIf="photo.metadata.fileSize">{{calcFileSize()}}</div>
<div class="details-sub row">
<div class="col-4">{{photo.metadata.size.width}} x {{photo.metadata.size.height}}</div>
<div class="col-4">{{calcMpx()}}MP</div>
<div class="col-4" *ngIf="photo.metadata.fileSize">{{calcFileSize()}}</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-2">
<span class="details-icon glyphicon glyphicon-calendar"></span>
<div class="col-2">
<span class="details-icon oi oi-calendar"></span>
</div>
<div class="col-xs-10">
<div class="col-10">
<div class="details-main">
{{getDate()}}
<ng-container *ngIf="getYear() !== getCurrentYear()">
,{{getYear()}}
</ng-container>
</div>
<div class="details-sub">
<div class="col-xs-12">{{getDay()}}, {{getTime()}}</div>
<div class="details-sub row">
<div class="col-12">{{getDay()}}, {{getTime()}}</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-2">
<span class="details-icon glyphicon glyphicon-camera"></span>
<div class="col-2">
<span class="details-icon oi oi-camera-slr"></span>
</div>
<div class="col-xs-10">
<div class="col-10">
<div class="details-main">
{{photo.metadata.cameraData.model || photo.metadata.cameraData.make || "Camera"}}
</div>
<div class="details-sub">
<div class="col-xs-3" *ngIf="photo.metadata.cameraData.ISO">ISO{{photo.metadata.cameraData.ISO}}</div>
<div class="col-xs-3" *ngIf="photo.metadata.cameraData.fStop">f/{{photo.metadata.cameraData.fStop}}</div>
<div class="col-xs-3" *ngIf="photo.metadata.cameraData.exposure">
<div class="details-sub row">
<div class="col-3" *ngIf="photo.metadata.cameraData.ISO">ISO{{photo.metadata.cameraData.ISO}}</div>
<div class="col-3" *ngIf="photo.metadata.cameraData.fStop">f/{{photo.metadata.cameraData.fStop}}</div>
<div class="col-3" *ngIf="photo.metadata.cameraData.exposure">
{{toFraction(photo.metadata.cameraData.exposure)}}s
</div>
<div class="col-xs-3" *ngIf="photo.metadata.cameraData.focalLength">
<div class="col-3" *ngIf="photo.metadata.cameraData.focalLength">
{{photo.metadata.cameraData.focalLength}}mm
</div>
<div class="col-xs-12" *ngIf="photo.metadata.cameraData.lens">{{photo.metadata.cameraData.lens}}</div>
<div class="col-12" *ngIf="photo.metadata.cameraData.lens">{{photo.metadata.cameraData.lens}}</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-2">
<span class="details-icon glyphicon glyphicon-map-marker"></span>
<div class="row" *ngIf="hasPositionData()">
<div class="col-2">
<span class="details-icon oi oi-map-marker"></span>
</div>
<div class="col-xs-10">
<div class="col-10">
<div class="details-main">
{{getPositionText() || "Position"}}
</div>
<div class="details-sub" *ngIf="hasGPS()">
<div class="col-xs-12">
<div class="details-sub row" *ngIf="hasGPS()">
<div class="col-12">
{{photo.metadata.positionData.GPSData.latitude.toFixed(3)}},
{{photo.metadata.positionData.GPSData.longitude.toFixed(3)}}
</div>

View File

@ -64,6 +64,10 @@ export class InfoPanelLightboxComponent {
return '1/' + (1 / f);
}
hasPositionData(): boolean {
return PhotoDTO.hasPositionData(this.photo);
}
hasGPS() {
return this.photo.metadata.positionData && this.photo.metadata.positionData.GPSData &&
this.photo.metadata.positionData.GPSData.latitude && this.photo.metadata.positionData.GPSData.longitude;
@ -74,12 +78,12 @@ export class InfoPanelLightboxComponent {
return '';
}
let str = this.photo.metadata.positionData.city ||
this.photo.metadata.positionData.state;
this.photo.metadata.positionData.state || '';
if (str.length !== 0) {
str += ', ';
}
str += this.photo.metadata.positionData.country;
str += this.photo.metadata.positionData.country || '';
return str;
}

View File

@ -22,6 +22,9 @@ app-gallery-lightbox-photo {
height: 100%; /* Full height */
background-color: black;
transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
}
.navigation-arrow {
@ -48,6 +51,9 @@ app-gallery-lightbox-photo {
position: fixed;
color: white;
transition: width 0.3s ease-in-out, opacity 1s;
-webkit-transition: width 0.3s ease-in-out, opacity 1s;
-o-transition: width 0.3s ease-in-out, opacity 1s;
-moz-transition: width 0.3s ease-in-out, opacity 1s;
}
#controllers-container.dim-controls {
@ -127,4 +133,7 @@ app-info-panel {
right: 0;
top: 0;
transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-webkit-transition: all 0.3s ease-in-out;
}

View File

@ -19,44 +19,50 @@
<div class="controls controls-top">
<a *ngIf="activePhoto" [href]="activePhoto.gridPhoto.getPhotoPath()"
[download]="activePhoto.gridPhoto.photo.name">
<span class="glyphicon glyphicon-download-alt highlight control-button"
<span class="oi oi-data-transfer-download highlight control-button"
title="download" i18n-title></span>
</a>
<span class="glyphicon glyphicon-info-sign highlight control-button" (click)="toggleInfoPanel()"
<span class="oi oi-info highlight control-button"
(click)="toggleInfoPanel()"
title="info" i18n-title></span>
<span class=" glyphicon glyphicon-resize-small highlight control-button"
<span class="oi oi-fullscreen-exit highlight control-button"
*ngIf="fullScreenService.isFullScreenEnabled()"
(click)="fullScreenService.exitFullScreen()" title="toggle fullscreen" i18n-title></span>
(click)="fullScreenService.exitFullScreen()"
title="toggle fullscreen" i18n-title>
<span class="glyphicon glyphicon-fullscreen highlight control-button"
</span>
<span class="oi oi-fullscreen-enter highlight control-button"
*ngIf="!fullScreenService.isFullScreenEnabled()"
(click)="fullScreenService.showFullScreen(root)" title="toggle fullscreen" i18n-title></span>
(click)="fullScreenService.showFullScreen(root)"
title="toggle fullscreen" i18n-title>
</span>
<span class="glyphicon glyphicon-remove highlight control-button" (click)="hide()" title="close"
<span class="oi oi-x highlight control-button" (click)="hide()" title="close"
i18n-title></span>
</div>
<div class="navigation-arrow highlight"
*ngIf="navigation.hasPrev" title="key: left arrow" id="leftArrow" i18n-title
(click)="prevImage()"><span
class="glyphicon glyphicon-chevron-left"></span></div>
class="oi oi-chevron-left"></span></div>
<div class="navigation-arrow highlight"
*ngIf="navigation.hasNext" title="key: right arrow" id="rightArrow" i18n-title
(click)="nextImage()"><span
class="glyphicon glyphicon-chevron-right"></span></div>
class="oi oi-chevron-right"></span></div>
<div class="controls controls-playback">
<span class="glyphicon glyphicon-pause highlight control-button"
<span class="oi oi-media-pause highlight control-button"
[ngClass]="playBackState == 0 ? 'button-disabled':''"
(click)="pause()"
title="pause"></span>
<span
class="glyphicon glyphicon-play highlight control-button"
class="oi oi-media-play highlight control-button"
[ngClass]="playBackState == 1 ? 'button-active':''"
(click)="play()"
title="auto play"></span>
<span class="glyphicon glyphicon-forward highlight control-button"
<span class="oi oi-media-skip-forward highlight control-button"
[ngClass]="playBackState == 2 ? 'button-active':''"
(click)="fastForward()"
title="fast auto play"></span>

View File

@ -11,6 +11,9 @@
align-items: center; /* add to align vertical */
cursor: pointer;
transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
}
.sebm-google-map-container {
@ -27,6 +30,9 @@
height: 100%; /* Full height */
background-color: black;
transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
}
#controllers-container {

View File

@ -27,8 +27,8 @@
[style.width.px]="photo.preview.width"
[style.height.px]="photo.preview.height"
*ngIf="!photo.preview.thumbnail.Src">
<span class="glyphicon"
[ngClass]="photo.preview.thumbnail.Error ? 'glyphicon-warning-sign' : 'glyphicon-picture'"
<span class="oi"
[ngClass]="photo.preview.thumbnail.Error ? 'oi-warning' : 'oi-picture'"
aria-hidden="true">
</span>
</div>
@ -41,17 +41,17 @@
<div id="controllers-container" *ngIf="visible">
<div id="controls">
<span>
<span class=" glyphicon glyphicon-resize-small highlight"
<span class="oi oi-fullscreen-exit highlight"
*ngIf="fullScreenService.isFullScreenEnabled()"
(click)="fullScreenService.exitFullScreen()" title="toggle fullscreen"></span>
</span>
<span>
<span class="glyphicon glyphicon-fullscreen highlight"
<span class="oi oi-fullscreen-enter highlight"
*ngIf="!fullScreenService.isFullScreenEnabled()"
(click)="fullScreenService.showFullScreen(root)" title="toggle fullscreen"></span>
</span>
<span>
<span class="glyphicon glyphicon-remove highlight" (click)="hide()" title="close"></span>
<span class="oi oi-x highlight" (click)="hide()" title="close"></span>
</span>
</div>

View File

@ -1,8 +1,9 @@
<ol id="directory-path" class="breadcrumb">
<li *ngFor="let path of routes">
<a *ngIf="path.route" [routerLink]="['/gallery',path.route]"
[queryParams]="_shareService.isSharing() ? { sk: _shareService.getSharingKey() }:{}">{{path.name}}</a>
<span *ngIf="!path.route">{{path.name}}</span>
</li>
</ol>
<nav aria-label="breadcrumb">
<ol id="directory-path" class="breadcrumb">
<li *ngFor="let path of routes" class="breadcrumb-item">
<a *ngIf="path.route" [routerLink]="['/gallery',path.route]"
[queryParams]="_shareService.isSharing() ? { sk: _shareService.getSharingKey() }:{}">{{path.name}}</a>
<ng-container *ngIf="!path.route">{{path.name}}</ng-container>
</li>
</ol>
</nav>

View File

@ -28,7 +28,7 @@
}
.autocomplete-item:hover {
background-color: #337ab7;
background-color: #007bff;
}
.autocomplete-item:hover a {
@ -42,5 +42,5 @@
}
form {
padding-right: 50px;
padding-right: 1em;
}

View File

@ -1,7 +1,7 @@
<form class="navbar-form" role="search" #SearchForm="ngForm">
<div class="input-group">
<input type="text"
class="form-control"
class="form-control "
i18n-placeholder
placeholder="Search"
(keyup)="onSearchChange($event)"
@ -21,10 +21,10 @@
<div class="autocomplete-item" *ngFor="let item of autoCompleteItems">
<a [routerLink]="['/search', item.text, {type: SearchTypes[item.type]}]">
<span [ngSwitch]="item.type">
<span *ngSwitchCase="0" class="glyphicon glyphicon-picture"></span>
<span *ngSwitchCase="1" class="glyphicon glyphicon-folder-open"></span>
<span *ngSwitchCase="2" class="glyphicon glyphicon-tag"></span>
<span *ngSwitchCase="3" class="glyphicon glyphicon-map-marker"></span>
<span *ngSwitchCase="SearchTypes.image" class="oi oi-image"></span>
<span *ngSwitchCase="SearchTypes.directory" class="oi oi-folder"></span>
<span *ngSwitchCase="SearchTypes.keyword" class="oi oi-tag"></span>
<span *ngSwitchCase="SearchTypes.position" class="oi oi-map-marker"></span>
</span>
{{item.preText}}<strong>{{item.highLightText}}</strong>{{item.postText}}
</a>
@ -32,8 +32,8 @@
</div>
<div class="input-group-btn" style="display: block">
<button class="btn btn-default dropdown-toggle" type="button" (click)="onSearch()"><i
class="glyphicon glyphicon-search"></i>
<button class="btn btn-default" type="button" (click)="onSearch()">
<span class="oi oi-magnifying-glass"></span>
</button>
</div>
</div>

View File

@ -72,7 +72,6 @@ export class GallerySearchComponent implements OnDestroy {
}
public setMouseOverAutoComplete(value: boolean) {
this.mouseOverAutoComplete = value;
}

View File

@ -10,3 +10,4 @@
padding-top: 1px;
padding-bottom: 1px;
}

View File

@ -1,6 +1,6 @@
<button id="shareButton" class="btn btn-default navbar-btn btn-link"
<button id="shareButton" class="nav-link btn btn-default btn-link"
type="button" [disabled]="!enabled" (click)="showModal()">
<span class="glyphicon glyphicon-share-alt"></span>
<span class="oi oi-share"></span>
<ng-container i18n>Share</ng-container>
</button>
@ -10,16 +10,17 @@
tabindex="-1" role="dialog" aria-labelledby="shareModalLabel"
[config]="{ backdrop: false }"
aria-hidden="true">
<div class="modal-dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" (click)="hideModal()" aria-label="Close"><span
aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="shareModalLabel" i18n>Share</h4>
<h5 class="modal-title" id="shareModalLabel" i18n>Share</h5>
<button type="button" class="close" (click)="hideModal()" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-sm-10">
<div class="col-9">
<input id="shareLink"
name="shareLink"
placeholder="link"
@ -27,20 +28,20 @@
type="text"
[ngModel]="url">
</div>
<div class="col-sm-2 pull-right">
<div class="col-3">
<button id="copyButton" name="copyButton"
ngxClipboard [cbContent]="url"
(cbOnSuccess)="onCopy()"
class="btn btn-primary" i18n>Copy
class="btn btn-primary btn-block" i18n>Copy
</button>
</div>
</div>
<hr/>
<div class="row">
<div class="col-sm-3">
<div class="col-4">
<label class="control-label" i18n>Sharing:</label>
</div>
<div class="col-sm-9">
<div class="col-8">
<input disabled type="text"
class="full-width form-control"
[ngModel]="currentDir">
@ -48,27 +49,33 @@
</div>
<div class="row">
<div class="col-sm-3">
<div class="col-4">
<label class="control-label" i18n>Include subfolders:</label>
</div>
<div class="col-sm-4">
<input id="recursiveShareBox"
type="checkbox"
(change)="update()"
[(ngModel)]="input.includeSubfolders"
checked="checked"
value="remember-me">
<div class="col-8">
<bSwitch
class="switch"
name="includeSubfolders"
[switch-on-color]="'success'"
[switch-inverse]="'inverse'"
[switch-off-text]="text.No"
[switch-on-text]="text.Yes"
[switch-handle-width]="'100'"
[switch-label-width]="'20'"
(change)="update()"
[(ngModel)]="input.includeSubfolders">
</bSwitch>
</div>
</div>
<div class="row">
<div class="col-sm-3">
<div class="col-4">
<label class="control-label">
<ng-container i18n>Password</ng-container>
:
</label>
</div>
<div class="col-sm-6">
<div class="col-8">
<input id="password"
class="form-control"
type="password"
@ -80,21 +87,21 @@
</div>
<div class="row">
<div class="col-sm-3">
<div class="col-4">
<label class="control-label" i18n>Valid:</label>
</div>
<div class="col-sm-3" style="padding-right: 1px">
<div class="col-4" style="padding-right: 1px">
<input class="form-control" [(ngModel)]="input.valid.amount" (change)="update()"
name="validAmount"
type="number" min="0" step="1"/>
</div>
<div class="col-sm-3" style="padding-left: 1px">
<select class="form-control col-md-3" [(ngModel)]="input.valid.type" (change)="update()" name="validType"
<div class="col-4" style="padding-left: 1px">
<select class="form-control" [(ngModel)]="input.valid.type" (change)="update()" name="validType"
required>
<option value="{{ValidityTypes.Minutes}}" i18n>Minutes</option>
<option value="{{ValidityTypes.Hours}}" i18n>Hours</option>
<option value="{{ValidityTypes.Days}}" i18n>Days</option>
<option value="{{ValidityTypes.Months}}" i18n>Months</option>
<option [ngValue]="ValidityTypes.Minutes" i18n>Minutes</option>
<option [ngValue]="ValidityTypes.Hours" i18n>Hours</option>
<option [ngValue]="ValidityTypes.Days" i18n>Days</option>
<option [ngValue]="ValidityTypes.Months" i18n>Months</option>
</select>
</div>
</div>

View File

@ -36,11 +36,19 @@ export class GalleryShareComponent implements OnInit, OnDestroy {
passwordProtection = false;
ValidityTypes: any;
text = {
Yes: 'Yes',
No: 'No'
};
constructor(private _sharingService: ShareService,
public _galleryService: GalleryService,
private _notification: NotificationService,
public i18n: I18n) {
this.ValidityTypes = ValidityTypes;
this.text.Yes = i18n('Yes');
this.text.No = i18n('No');
}

View File

@ -10,13 +10,10 @@
<ng-container *ngIf="current != null">
{{current}}
</ng-container>
<span *ngIf="current == null" class="glyphicon glyphicon-globe">
</span>
<span class="caret"></span>
<span *ngIf="current == null" class="oi oi-globe"></span>
</button>
<ul *dropdownMenu class="dropdown-menu" aria-labelledby="language">
<li *ngFor="let lang of languages">
<a href="/{{lang}}">{{lang}}</a>
</li>
</ul>
<div *dropdownMenu class="dropdown-menu" aria-labelledby="language">
<a *ngFor="let lang of languages" class="dropdown-item" href="/{{lang}}">{{lang}}</a>
</div>
</div>

View File

@ -1,6 +1,3 @@
.container {
}
.title h1 {
font-size: 80px;
font-weight: bold;
@ -21,24 +18,6 @@
}
}
.title {
margin-top: 40px;
width: 100%;
text-align: center;
}
.card {
padding: 15px;
max-width: 350px;
width: 100% !important;
background-color: #F7F7F7;
border-radius: 2px;
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.3);
overflow: hidden;
height: 295px;
margin: 0px auto 0;
}
/*Margin by pixel:*/
@media screen and ( min-height: 600px ) {
.card {
@ -46,21 +25,13 @@
}
}
.has-margin {
margin-bottom: 10px;
}
.input-group .form-control, .checkbox {
padding: 10px;
font-size: 16px;
.card {
min-width: 400px;
background-color: #F7F7F7;
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.3);
}
.error-message {
color: #d9534f;
}
.btn-login {
width: 100%;
font-size: 18px;
}

View File

@ -1,53 +1,66 @@
<div class="container">
<div class="row">
<app-language class="pull-right"></app-language>
<div class="container d-flex flex-column justify-content-center">
<div class="row align-self-end">
<app-language></app-language>
</div>
<div class="row title">
<div class="row title align-self-center">
<h1><img src="assets/icon.png"/>{{title}}</h1>
</div>
<div class="row card">
<div class="col-md-12">
<h1 i18n>Please log in</h1>
<form name="form" id="form" class="form-horizontal" #LoginForm="ngForm" (submit)="onLogin()">
<div class="row card align-self-center">
<div class="card-body">
<h4 class="card-title" i18n>Please log in</h4>
<form name="form" id="form" #LoginForm="ngForm" (submit)="onLogin()">
<div class="error-message" [hidden]="loginError==false" i18n>
Wrong username or password
</div>
<div class="input-group has-margin">
<span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
<input id="username"
type="text"
class="form-control"
i18n-placeholder
placeholder="Username"
autocomplete="login-username"
autofocus
[(ngModel)]="loginCredential.username"
name="username" required>
<div class="form-group ">
<label class="sr-only" for="username">Username</label>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text"><span class="oi oi-person"></span></div>
</div>
<input type="text"
i18n-placeholder
class="form-control"
name="username"
id="username"
autocomplete="login-username"
[(ngModel)]="loginCredential.username"
placeholder="Username"
required>
</div>
</div>
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="password"
class="form-control"
type="password"
[(ngModel)]="loginCredential.password"
name="password"
autocomplete="login-password"
i18n-placeholder
placeholder="Password"
required>
<div class="form-group ">
<label class="sr-only" for="password">Password</label>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text"><span class="oi oi-lock-locked"></span></div>
</div>
<input type="password"
i18n-placeholder
class="form-control"
name="password"
id="password"
placeholder="Password"
autocomplete="login-password"
[(ngModel)]="loginCredential.password"
required>
</div>
</div>
<div class="checkbox">
<label><input type="checkbox" name="rememberMe" [(ngModel)]="loginCredential.rememberMe" value="">
<ng-container i18n>Remember me</ng-container>
</label>
<div class="form-group">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="rememberMe" id="rememberMe"
[(ngModel)]="loginCredential.rememberMe">
<label class="custom-control-label" for="rememberMe" i18n>Remember me</label>
</div>
</div>
<div class="form-group">
<!-- Button -->
<div class="col-sm-12 controls">
<button class="btn btn-primary pull-right btn-login"
<button class="btn btn-primary btn-lg btn-block"
[disabled]="!LoginForm.form.valid || inProgress"
type="submit"
name="action" i18n>Login

View File

@ -10,28 +10,13 @@
margin: 5px 0;
}
.panel-title {
display: inline-block;
margin-top: 8px;
padding: 0;
}
.panel-heading {
height: 44px;
}
.panel-heading bSwitch {
display: inline-block;
}
.panel-heading {
padding: 5px 15px;
}
.switch-wrapper {
display: inline-block;
float: none;
text-align: right;
padding: 0;
float: right;
margin-top: -4px;
margin-bottom: -4px;
}

View File

@ -1,24 +1,24 @@
<form #settingsForm="ngForm" class="form-horizontal">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title" i18n>Basic settings</h3>
</div>
<div class="panel-body">
<div class="card mb-4">
<h5 class="card-header" i18n>
Basic settings
</h5>
<div class="card-body">
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
<div class="form-group" [hidden]="simplifiedMode">
<label class="col-sm-2 control-label" for="applicationTitle" i18n>Page title</label>
<div class="col-sm-10">
<div class="form-group row" [hidden]="simplifiedMode">
<label class="col-md-2 control-label" for="applicationTitle" i18n>Page title</label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="Pigallery 2"
id="applicationTitle"
[(ngModel)]="settings.applicationTitle"
name="applicationTitle" required>
</div>
</div>
<div class="form-group" [hidden]="simplifiedMode">
<label class="col-sm-2 control-label" for="port">Port</label>
<div class="col-sm-10">
<div class="form-group row" [hidden]="simplifiedMode">
<label class="col-md-2 control-label" for="port">Port</label>
<div class="col-md-10">
<input type="number" class="form-control" placeholder="80"
id="port"
min="0"
@ -26,48 +26,53 @@
max="65535"
[(ngModel)]="settings.port"
name="port" required>
<span class="help-block" i18n>Port number. Port 80 is usually what you need.</span>
<small class="form-text text-muted" i18n>Port number. Port 80 is usually what you need.</small>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="folder">Images folder</label>
<div class="col-sm-10">
<div class="form-group row">
<label class="col-md-2 control-label" for="folder">Images folder</label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="path"
id="folder"
[(ngModel)]="settings.imagesFolder"
name="folder" required>
<span class="help-block" i18n>Images are loaded from this folder (read permission required)</span>
<small class="form-text text-muted" i18n>Images are loaded from this folder (read permission required)</small>
</div>
</div>
<div class="form-group" [hidden]="simplifiedMode">
<label class="col-sm-2 control-label" for="publicUrl" i18n>Page public url</label>
<div class="col-sm-10">
<div class="form-group row" [hidden]="simplifiedMode">
<label class="col-md-2 control-label" for="publicUrl" i18n>Page public url</label>
<div class="col-md-10">
<input type="url" class="form-control" placeholder="{{urlPlaceholder}}"
id="publicUrl"
[(ngModel)]="settings.publicUrl"
name="publicUrl">
<span class="help-block" i18n>If you access the page form local network its good to know the public url for creating sharing link</span>
<small class="form-text text-muted" i18n>If you access the page form local network its good to know the public
url for creating sharing link
</small>
</div>
</div>
<div class="form-group" [hidden]="simplifiedMode">
<label class="col-sm-2 control-label" for="urlBase" i18n>Url Base</label>
<div class="col-sm-10">
<div class="form-group row" [hidden]="simplifiedMode">
<label class="col-md-2 control-label" for="urlBase" i18n>Url Base</label>
<div class="col-md-10">
<input type="url" class="form-control" placeholder="/myGallery"
id="urlBase"
[(ngModel)]="settings.urlBase"
name="urlBase">
<span class="help-block" i18n>If you access the gallery under a sub url (like: http://mydomain.com/myGallery), set it here. If not working you might miss the '/' from the beginning of the url.</span>
<small class="form-text text-muted" i18n>If you access the gallery under a sub url (like:
http://mydomain.com/myGallery), set it here. If not working you might miss the '/' from the beginning of the
url.
</small>
</div>
</div>
<button class="btn btn-success pull-right"
<button class="btn btn-success float-right"
[disabled]="!settingsForm.form.valid || !changed || inProgress"
(click)="save()" i18n>Save
</button>
<button class="btn btn-default pull-right"
<button class="btn btn-default float-right"
(click)="reset()" i18n>Reset
</button>
</div>

View File

@ -35,8 +35,7 @@ export class BasicSettingsComponent extends SettingsComponent<BasicConfigDTO> {
public async save(): Promise<boolean> {
const val = await super.save();
if (val === true) {
this.notification.info('Restart the server to apply the new settings');
this.notification.info(this.i18n('Restart the server to apply the new settings'));
}
return val;
}

View File

@ -1,8 +1,8 @@
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title" i18n>Database settings</h3>
</div>
<div class="panel-body">
<div class="card mb-4">
<h5 class="card-header" i18n>
Database settings
</h5>
<div class="card-body">
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
<form #settingsForm="ngForm">
<p class="title" i18n>Type:</p>
@ -10,8 +10,9 @@
<option *ngFor="let type of types" [ngValue]="type.key">{{type.value}}
</option>
</select>
<span *ngIf="settings.type == DatabaseType.mysql"
class="help-block" i18n>Install manually mysql node module to use mysql (npm install mysql)</span>
<small *ngIf="settings.type == DatabaseType.mysql"
class="form-text text-muted" i18n>Install manually mysql node module to use mysql (npm install mysql)
</small>
<ng-container *ngIf="settings.type == DatabaseType.mysql">
<p class="title" i18n>MySQL settings:</p>
@ -26,16 +27,16 @@
</ng-container>
<ng-container *ngIf="settings.type == DatabaseType.sqlite">
<p class="title" i18n>SQLie settings:</p>
<input type="text" class="form-control" placeholder="storage" autofocus
<input type="text" class="form-control" placeholder="storage"
[(ngModel)]="settings.sqlite.storage" name="host" required>
</ng-container>
</form>
<button class="btn btn-success pull-right"
<button class="btn btn-success float-right"
[disabled]="!settingsForm.form.valid || !changed || inProgress"
(click)="save()" i18n>Save
</button>
<button class="btn btn-default pull-right"
<button class="btn btn-default float-right"
(click)="reset()" i18n>Reset
</button>
</div>

View File

@ -1,3 +0,0 @@
.buttons {
text-align: center;
}

View File

@ -1,57 +1,60 @@
<form #settingsForm="ngForm" class="form-horizontal">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title col-xs-4" i18n>Folder indexing</h3>
</div>
<div class="panel-body">
<div class="card mb-4">
<h5 class="card-header" i18n>
Folder indexing
</h5>
<div class="card-body">
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
<ng-container *ngIf="!simplifiedMode">
<div class="form-group">
<label class="col-sm-2 control-label" for="cachedFolderTimeout" i18n>Index cache timeout [ms]</label>
<div class="col-sm-10">
<div class="form-group row">
<label class="col-md-2 control-label" for="cachedFolderTimeout" i18n>Index cache timeout [ms]</label>
<div class="col-md-10">
<input type="number" class="form-control" placeholder="36000"
id="cachedFolderTimeout"
min="0"
step="1"
[(ngModel)]="settings.cachedFolderTimeout"
name="cachedFolderTimeout" required>
<span class="help-block" i18n>If there was no indexing in this time, it reindexes. (skipped if indexen in DB and sensitivity is low)</span>
<small class="form-text text-muted" i18n>If there was no indexing in this time, it reindexes. (skipped if
indexen in DB and sensitivity is low)
</small>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="folderPreviewSize" i18n>Sub folder preview size</label>
<div class="col-sm-10">
<div class="form-group row">
<label class="col-md-2 control-label" for="folderPreviewSize" i18n>Sub folder preview size</label>
<div class="col-md-10">
<input type="number" class="form-control" placeholder="1"
id="folderPreviewSize"
min="0"
step="1"
[(ngModel)]="settings.folderPreviewSize"
name="folderPreviewSize" required>
<span class="help-block" i18n>Reads this many photos from sub folders</span>
<small class="form-text text-muted" i18n>Reads this many photos from sub folders</small>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="reIndexingSensitivity" i18n>Folder reindexing sensitivity</label>
<div class="col-sm-10">
<div class="form-group row">
<label class="col-md-2 control-label" for="reIndexingSensitivity" i18n>Folder reindexing sensitivity</label>
<div class="col-md-10">
<select id="reIndexingSensitivity" class="form-control" [(ngModel)]="settings.reIndexingSensitivity"
name="reIndexingSensitivity" required>
<option *ngFor="let type of types" [ngValue]="type.key">{{type.value}}
</option>
</select>
<span
class="help-block"
i18n>Set the reindexing sensitivity. High value check the folders for change more often</span>
<small
class="form-text text-muted"
i18n>Set the reindexing sensitivity. High value check the folders for change more often
</small>
</div>
</div>
<button class="btn btn-success pull-right"
<button class="btn btn-success float-right"
[disabled]="!settingsForm.form.valid || !changed || inProgress"
(click)="save()" i18n>Save
</button>
<button class="btn btn-default pull-right"
<button class="btn btn-default float-right"
(click)="reset()" i18n>Reset
</button>
<br/>
@ -69,7 +72,7 @@
<div *ngIf="_settingsService.progress.value != null">
indexing: {{_settingsService.progress.value.current}}
<div class="progress">
<div class="progress-bar progress-bar-success"
<div class="progress-bar progress-bar-success"
role="progressbar"
aria-valuenow="2"
aria-valuemin="0"
@ -81,7 +84,7 @@
</div>
</div>
<div class="row buttons">
<div class="row justify-content-center">
<button class="btn btn-success"
*ngIf="_settingsService.progress.value == null"
[disabled]="inProgress"

View File

@ -1,8 +1,8 @@
<form #settingsForm="ngForm" class="form-horizontal">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title col-xs-4" i18n>Map settings</h3>
<div class="switch-wrapper col-xs-8">
<div class="card mb-4">
<h5 class="card-header">
<ng-container i18n>Map settings</ng-container>
<div class="switch-wrapper">
<bSwitch
class="switch"
name="enabled"
@ -16,31 +16,33 @@
[(ngModel)]="settings.enabled">
</bSwitch>
</div>
</div>
<div class="panel-body">
</h5>
<div class="card-body">
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="googleApiKey" i18n>Google maps api key</label>
<div class="col-sm-10">
<div class="form-group row">
<label class="col-md-2 control-label" for="googleApiKey" i18n>Google maps api key</label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="Google api key"
[(ngModel)]="settings.googleApiKey"
[disabled]="!settings.enabled"
name="googleApiKey" id="googleApiKey" required>
<span class="help-block"><ng-container i18n>To show the images on a map,</ng-container> <a
<small class="form-text text-muted">
<ng-container i18n>To show the images on a map,</ng-container>
<a
href="https://developers.google.com/maps/documentation/javascript/get-api-key" i18n>google api key</a> <ng-container
i18n>is need</ng-container></span>
i18n>is need
</ng-container>
</small>
</div>
</div>
<button class="btn btn-success pull-right"
<button class="btn btn-success float-right"
[disabled]="!settingsForm.form.valid || !changed || inProgress"
(click)="save()" i18n>Save
</button>
<button class="btn btn-default pull-right"
<button class="btn btn-default float-right"
(click)="reset()" i18n>Reset
</button>
</div>

View File

@ -1,15 +1,15 @@
<form #settingsForm="ngForm" class="form-horizontal">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title" i18n>Other settings</h3>
</div>
<div class="panel-body">
<div class="card mb-4">
<h5 class="card-header" i18n>
Other settings
</h5>
<div class="card-body">
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong i18n>Error: </strong>{{error}}</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="enableThreading" i18n>Threading</label>
<div class="col-sm-10">
<div class="form-group row">
<label class="col-md-2 control-label" for="enableThreading" i18n>Threading</label>
<div class="col-md-10">
<bSwitch
id="enableThreading"
class="switch"
@ -22,14 +22,16 @@
[switch-label-width]="'20'"
[(ngModel)]="settings.enableThreading">
</bSwitch>
<span class="help-block" i18n>Runs directory scanning and thumbnail generation (only for Jimp) in a different thread</span>
<small class="form-text text-muted" i18n>Runs directory scanning and thumbnail generation (only for Jimp) in a
different thread
</small>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="enableOnScrollThumbnailPrioritising" i18n>Scroll based thumbnail
<div class="form-group row">
<label class="col-md-2 control-label" for="enableOnScrollThumbnailPrioritising" i18n>Scroll based thumbnail
generation</label>
<div class="col-sm-10">
<div class="col-md-10">
<bSwitch
id="enableOnScrollThumbnailPrioritising"
class="switch"
@ -42,13 +44,14 @@
[switch-label-width]="'20'"
[(ngModel)]="settings.enableOnScrollThumbnailPrioritising">
</bSwitch>
<span class="help-block" i18n>Those thumbnails get higher priority that are visible on the screen</span>
<small class="form-text text-muted" i18n>Those thumbnails get higher priority that are visible on the screen
</small>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="enableOnScrollRendering" i18n>Lazy image rendering</label>
<div class="col-sm-10">
<div class="form-group row">
<label class="col-md-2 control-label" for="enableOnScrollRendering" i18n>Lazy image rendering</label>
<div class="col-md-10">
<bSwitch
id="enableOnScrollRendering"
class="switch"
@ -61,14 +64,16 @@
[switch-label-width]="'20'"
[(ngModel)]="settings.enableOnScrollRendering">
</bSwitch>
<span class="help-block" i18n>Shows only the required amount of photos at once. Renders more if page bottom is reached</span>
<small class="form-text text-muted" i18n>Shows only the required amount of photos at once. Renders more if
page bottom is reached
</small>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="enableCache" i18n>Cache</label>
<div class="col-sm-10">
<div class="form-group row">
<label class="col-md-2 control-label" for="enableCache" i18n>Cache</label>
<div class="col-md-10">
<bSwitch
id="enableCache"
class="switch"
@ -81,16 +86,17 @@
[switch-label-width]="'20'"
[(ngModel)]="settings.enableCache">
</bSwitch>
<span class="help-block" i18n>Caches directory contents and search results for better performance</span>
<small class="form-text text-muted" i18n>Caches directory contents and search results for better performance
</small>
</div>
</div>
<button class="btn btn-success pull-right"
<button class="btn btn-success float-right"
[disabled]="!settingsForm.form.valid || !changed || inProgress"
(click)="save()" i18n>Save
</button>
<button class="btn btn-default pull-right"
<button class="btn btn-default float-right"
(click)="reset()" i18n>Reset
</button>
</div>

View File

@ -1,9 +1,9 @@
<form #settingsForm="ngForm">
<div class="panel panel-default"
<div class="card mb-4"
[ngClass]="settings.enabled && !_settingsService.isSupported()?'panel-warning':''">
<div class="panel-heading">
<h3 class="panel-title col-xs-6" i18n>Search settings</h3>
<div class="switch-wrapper col-xs-6">
<h5 class="card-header">
<ng-container i18n>Search settings</ng-container>
<div class="switch-wrapper">
<bSwitch
class="switch"
name="enabled"
@ -17,15 +17,15 @@
[(ngModel)]="settings.enabled">
</bSwitch>
</div>
</div>
<div class="panel-body">
</h5>
<div class="card-body">
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
<ng-container *ngIf="settings.enabled || _settingsService.isSupported()">
<div class="form-group">
<label class="col-sm-2 control-label" for="autocompleteEnabled" i18n>Autocomplete</label>
<div class="col-sm-10">
<div class="form-group row">
<label class="col-md-2 control-label" for="autocompleteEnabled" i18n>Autocomplete</label>
<div class="col-md-10">
<bSwitch
id="autocompleteEnabled"
class="switch"
@ -39,14 +39,14 @@
[switch-label-width]="'20'"
[(ngModel)]="settings.autocompleteEnabled">
</bSwitch>
<span class="help-block" i18n>Show hints while typing search query</span>
<small class="form-text text-muted" i18n>Show hints while typing search query</small>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="instantSearchEnabled" i18n>Instant search</label>
<div class="col-sm-10">
<div class="form-group row">
<label class="col-md-2 control-label" for="instantSearchEnabled" i18n>Instant search</label>
<div class="col-md-10">
<bSwitch
id="instantSearchEnabled"
class="switch"
@ -60,7 +60,7 @@
[switch-label-width]="'20'"
[(ngModel)]="settings.instantSearchEnabled">
</bSwitch>
<span class="help-block" i18n>Enables showing search results, while typing search query</span>
<small class="form-text text-muted" i18n>Enables showing search results, while typing search query</small>
</div>
</div>
@ -68,11 +68,11 @@
<div class="panel-info" *ngIf="(!settings.enabled && !_settingsService.isSupported())" i18n>
Search is not supported with these settings
</div>
<button class="btn btn-success pull-right"
<button class="btn btn-success float-right"
[disabled]="!settingsForm.form.valid || !changed || inProgress"
(click)="save()" i18n>Save
</button>
<button class="btn btn-default pull-right"
<button class="btn btn-default float-right"
(click)="reset()" i18n>Reset
</button>
</div>

View File

@ -1,9 +1,9 @@
<form #settingsForm="ngForm">
<div class="panel panel-default"
<div class="card mb-4"
[ngClass]="settings.enabled && !_settingsService.isSupported()?'panel-warning':''">
<div class="panel-heading">
<h3 class="panel-title col-xs-6" i18n>Share settings</h3>
<div class="switch-wrapper col-xs-6">
<h5 class="card-header">
<ng-container i18n>Share settings</ng-container>
<div class="switch-wrapper">
<bSwitch
class="switch"
name="enabled"
@ -17,14 +17,14 @@
[(ngModel)]="settings.enabled">
</bSwitch>
</div>
</div>
<div class="panel-body">
</h5>
<div class="card-body">
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
<ng-container *ngIf="settings.enabled || _settingsService.isSupported()">
<div class="form-group">
<label class="col-sm-2 control-label" for="passwordProtected" i18n>Password protected</label>
<div class="col-sm-10">
<div class="form-group row">
<label class="col-md-2 control-label" for="passwordProtected" i18n>Password protected</label>
<div class="col-md-10">
<bSwitch
id="passwordProtected"
class="switch"
@ -38,7 +38,7 @@
[switch-label-width]="'20'"
[(ngModel)]="settings.passwordProtected">
</bSwitch>
<span class="help-block" i18n>Enables password protected sharing links</span>
<small class="form-text text-muted" i18n>Enables password protected sharing links</small>
</div>
</div>
@ -47,11 +47,11 @@
<div class="panel-info" *ngIf="(!settings.enabled && !_settingsService.isSupported())" i18n>
Sharing is not supported with these settings
</div>
<button class="btn btn-success pull-right"
<button class="btn btn-success float-right"
[disabled]="!settingsForm.form.valid || !changed || inProgress"
(click)="save()" i18n>Save
</button>
<button class="btn btn-default pull-right"
<button class="btn btn-default float-right"
(click)="reset()" i18n>Reset
</button>
</div>

View File

@ -1,9 +1,9 @@
<form #settingsForm="ngForm" class="form-horizontal">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title" i18n>Thumbnail settings</h3>
</div>
<div class="panel-body">
<div class="card mb-4">
<h5 class="card-header" i18n>
Thumbnail settings
</h5>
<div class="card-body">
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
<div [hidden]="settings.server.processingLibrary!=ThumbnailProcessingLib.Jimp"
class="alert alert-warning"
@ -12,37 +12,43 @@
</div>
<fieldset>
<div class="form-group">
<label class="col-sm-2 control-label" for="lib" i18n>Thumbnail generation library</label>
<div class="col-sm-10">
<div class="form-group row">
<label class="col-md-2 control-label" for="lib" i18n>Thumbnail generation library</label>
<div class="col-md-10">
<select id="lib" class="form-control" [(ngModel)]="settings.server.processingLibrary"
name="type" required>
<option *ngFor="let type of types" [ngValue]="type.key">{{type.value}}
</option>
</select>
<span *ngIf="settings.server.processingLibrary==ThumbnailProcessingLib.sharp"
class="help-block" i18n>Make sure that sharp node module is installed (npm install sharp).</span>
<span *ngIf="settings.server.processingLibrary==ThumbnailProcessingLib.gm"
class="help-block"><ng-container i18n>Make sure that gm node module and</ng-container> <a
href="http://www.graphicsmagick.org/" i18n>GraphicsMagick</a> <ng-container i18n>are installed (npm install sharp).</ng-container></span>
<small *ngIf="settings.server.processingLibrary==ThumbnailProcessingLib.sharp"
class="form-text text-muted" i18n>Make sure that sharp node module is installed (npm install sharp).
</small>
<small *ngIf="settings.server.processingLibrary==ThumbnailProcessingLib.gm"
class="form-text text-muted">
<ng-container i18n>Make sure that gm node module and</ng-container>
<a
href="http://www.graphicsmagick.org/" i18n>GraphicsMagick</a>
<ng-container i18n>are installed (npm install sharp).</ng-container>
</small>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="th_folder" i18n>Thumbnail folder</label>
<div class="col-sm-10">
<div class="form-group row">
<label class="col-md-2 control-label" for="th_folder" i18n>Thumbnail folder</label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="path"
id="th_folder"
[(ngModel)]="settings.server.folder"
name="path" required>
<span class="help-block" i18n>Thumbnails will be saved in this folder. Write access is required</span>
<small class="form-text text-muted" i18n>Thumbnails will be saved in this folder. Write access is required
</small>
</div>
</div>
<div class="form-group" [hidden]="simplifiedMode">
<label class="col-sm-2 control-label" for="quality" i18n>Thumbnail Quality</label>
<div class="col-sm-10">
<div class="form-group row" [hidden]="simplifiedMode">
<label class="col-md-2 control-label" for="quality" i18n>Thumbnail Quality</label>
<div class="col-md-10">
<bSwitch
id="quality"
class="switch"
@ -55,14 +61,14 @@
[switch-label-width]="'20'"
[(ngModel)]="settings.server.qualityPriority">
</bSwitch>
<span class="help-block" i18n>High quality may be slow. Especially with Jimp.</span>
<small class="form-text text-muted" i18n>High quality may be slow. Especially with Jimp.</small>
</div>
</div>
<div class="form-group" [hidden]="simplifiedMode">
<label class="col-sm-2 control-label" for="icon">Icon size</label>
<div class="col-sm-10">
<div class="form-group row" [hidden]="simplifiedMode">
<label class="col-md-2 control-label" for="icon">Icon size</label>
<div class="col-md-10">
<input type="number" class="form-control" placeholder="30"
id="icon"
[(ngModel)]="settings.client.iconSize"
@ -70,34 +76,34 @@
max="100"
step="1"
name="icon" required>
<span class="help-block" i18n>Icon size (used on maps)</span>
<small class="form-text text-muted" i18n>Icon size (used on maps)</small>
</div>
</div>
<div class="form-group" [hidden]="simplifiedMode">
<label class="col-sm-2 control-label" for="thumbnailSizes" i18n>Thumbnail sizes</label>
<div class="col-sm-10">
<div class="form-group row" [hidden]="simplifiedMode">
<label class="col-md-2 control-label" for="thumbnailSizes" i18n>Thumbnail sizes</label>
<div class="col-md-10">
<input type="text" class="form-control" placeholder="200; 400"
id="thumbnailSizes"
[(ngModel)]="ThumbnailSizes"
name="thumbnailSizes" required>
<span class="help-block">
<small class="form-text text-muted">
<ng-container i18n>Size of the thumbnails.</ng-container><br/>
<ng-container i18n>The best matching size will be generated. (More size gives better quality, but use storage to store and CPU to render.)</ng-container><br/>
<ng-container
i18n>';' separated integers. If size is 200, tha thumbnail will have 200^2 pixels.</ng-container>
</span>
</small>
</div>
</div>
</fieldset>
<button class="btn btn-success pull-right"
<button class="btn btn-success float-right"
[disabled]="!settingsForm.form.valid || !changed || inProgress"
(click)="save()" i18n>Save
</button>
<button class="btn btn-default pull-right"
<button class="btn btn-default float-right"
(click)="reset()" i18n>Reset
</button>
</div>

View File

@ -1,7 +1,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title col-xs-6" i18n>Password protection </h3>
<div class="switch-wrapper col-xs-6">
<div class="card mb-4">
<h5 class="card-header">
<ng-container i18n>Password protection</ng-container>
<div class="switch-wrapper">
<bSwitch
class="switch"
name="enabled"
@ -16,8 +16,8 @@
(onChangeState)="switched($event)">
</bSwitch>
</div>
</div>
<div class="panel-body">
</h5>
<div class="card-body">
<div [hidden]="!error" class="alert alert-danger" role="alert"><strong>Error: </strong>{{error}}</div>
<ng-container *ngIf="enabled">
@ -44,14 +44,14 @@
<td>
<button [disabled]="!canModifyUser(user)" (click)="deleteUser(user)"
[ngClass]="canModifyUser(user)? 'btn-danger':'btn-default'"
class="btn pull-right">
<span class="glyphicon glyphicon-trash" aria-hidden="true" aria-label="Delete"></span>
class="btn float-right">
<span class="oi oi-trash" aria-hidden="true" aria-label="Delete"></span>
</button>
</td>
</tr>
</table>
<button class="btn btn-primary pull-right"
<button class="btn btn-primary float-right"
(click)="initNewUser()" i18n>+ Add user
</button>
</ng-container>
@ -67,11 +67,11 @@
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" (click)="userModal.hide()" aria-label="Close"><span
aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="userModalLabel" i18n>Add new User</h4>
<h5 class="modal-title" id="userModalLabel" i18n>Add new User</h5>
<button type="button" class="close" (click)="userModal.hide()" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form #NewUserForm="ngForm">
<div class="modal-body">
<input type="text" class="form-control" i18n-placeholder placeholder="Username" autofocus

View File

@ -75,6 +75,7 @@ export class UserMangerSettingsComponent implements OnInit {
this.enabled = await this._userSettings.getSettings();
}
async switched(event: { previousValue: false, currentValue: true }) {
this.inProgress = true;
this.error = '';
@ -84,6 +85,7 @@ export class UserMangerSettingsComponent implements OnInit {
await this.getSettings();
if (this.enabled === true) {
this.notification.success(this.i18n('Password protection enabled'), this.i18n('Success'));
this.notification.info(this.i18n('Server restart is recommended.'));
this.getUsersList();
} else {
this.notification.success(this.i18n('Password protection disabled'), this.i18n('Success'));

View File

@ -1,6 +1,3 @@
.container {
}
.title h1 {
font-size: 80px;
font-weight: bold;
@ -11,46 +8,30 @@
height: 80px;
}
.title {
margin-top: 40px;
width: 100%;
text-align: center;
}
@media screen and ( max-width: 500px ) {
.title h1 {
font-size: 70px;
}
.card {
padding: 15px;
max-width: 350px;
width: 100% !important;
background-color: #F7F7F7;
border-radius: 2px;
box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);
overflow: hidden;
height: 150px;
margin: 0px auto 0;
}
/*Margin by pixel:*/
@media screen and ( min-height: 400px ) {
.card {
margin-top: calc((100vh - 120px - 150px) / 2 - 60px)
.title img {
height: 70px;
}
}
.has-margin {
margin-bottom: 10px;
/*Margin by pixel:*/
@media screen and ( min-height: 600px ) {
.card {
margin-top: calc((100vh - 120px - 295px) / 2 - 60px)
}
}
.input-group .form-control, .checkbox {
padding: 10px;
font-size: 16px;
.card {
min-width: 400px;
background-color: #F7F7F7;
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.3);
}
.error-message {
color: #d9534f;
}
.btn-login {
width: 100%;
font-size: 18px;
}

View File

@ -1,36 +1,41 @@
<div class="container">
<div class="row">
<app-language class="pull-right"></app-language>
<div class="container d-flex flex-column justify-content-center">
<div class="row align-self-end">
<app-language></app-language>
</div>
<div class="row title">
<div class="row title align-self-center">
<h1><img src="assets/icon.png"/>{{title}}</h1>
</div>
<div class="row card">
<div class="col-md-12">
<div class="row card align-self-center">
<div class="card-body">
<form name="form" id="form" class="form-horizontal" #LoginForm="ngForm" (submit)="onLogin()">
<div class="error-message" [hidden]="loginError==false" i18n>
Wrong password
</div>
<div class="input-group has-margin">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<input id="password"
class="form-control"
type="password"
[(ngModel)]="password"
name="password"
i18n-placeholder
placeholder="Password"
required>
<div class="form-group ">
<label class="sr-only" for="password">Password</label>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text"><span class="oi oi-lock-locked"></span></div>
</div>
<input type="password"
i18n-placeholder
class="form-control"
name="password"
id="password"
placeholder="Password"
autocomplete="login-password"
[(ngModel)]="password"
required>
</div>
</div>
<div class="form-group">
<!-- Button -->
<div class="col-sm-12 controls">
<button class="btn btn-primary pull-right btn-login"
<button class="btn btn-primary btn-lg btn-block"
[disabled]="!LoginForm.form.valid"
type="submit"
name="action" i18n>Enter

View File

@ -26,7 +26,7 @@
<source>Username</source>
<context-group purpose="location">
<context context-type="sourcefile">app/login/login.component.ts</context>
<context context-type="linenumber">21</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
@ -42,19 +42,19 @@
<source>Password</source>
<context-group purpose="location">
<context context-type="sourcefile">app/login/login.component.ts</context>
<context context-type="linenumber">37</context>
<context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/sharelogin/share-login.component.ts</context>
<context context-type="linenumber">25</context>
<context context-type="linenumber">27</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">74</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">84</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
@ -70,7 +70,7 @@
<source>Remember me</source>
<context-group purpose="location">
<context context-type="sourcefile">app/login/login.component.ts</context>
<context context-type="linenumber">43</context>
<context context-type="linenumber">56</context>
</context-group>
<target>Remember me</target>
</trans-unit>
@ -79,7 +79,7 @@
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/login/login.component.ts</context>
<context context-type="linenumber">53</context>
<context context-type="linenumber">66</context>
</context-group>
<target>Login
</target>
@ -90,7 +90,7 @@
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/sharelogin/share-login.component.ts</context>
<context context-type="linenumber">13</context>
<context context-type="linenumber">11</context>
</context-group>
<target>
Wrong password
@ -101,7 +101,7 @@
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/sharelogin/share-login.component.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">41</context>
</context-group>
<target>Enter
</target>
@ -118,7 +118,7 @@
<source>info</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/lightbox.gallery.component.ts</context>
<context context-type="linenumber">26</context>
<context context-type="linenumber">27</context>
</context-group>
<target>info</target>
</trans-unit>
@ -126,11 +126,11 @@
<source>toggle fullscreen</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/lightbox.gallery.component.ts</context>
<context context-type="linenumber">30</context>
<context context-type="linenumber">32</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/lightbox.gallery.component.ts</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">39</context>
</context-group>
<target>toggle fullscreen</target>
</trans-unit>
@ -138,7 +138,7 @@
<source>close</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/lightbox.gallery.component.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">42</context>
</context-group>
<target>close</target>
</trans-unit>
@ -146,7 +146,7 @@
<source>key: left arrow</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/lightbox.gallery.component.ts</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">47</context>
</context-group>
<target>key: left arrow</target>
</trans-unit>
@ -154,7 +154,7 @@
<source>key: right arrow</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/lightbox.gallery.component.ts</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">51</context>
</context-group>
<target>key: right arrow</target>
</trans-unit>
@ -206,7 +206,7 @@
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">app/frame/frame.component.ts</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">38</context>
</context-group>
<target>Logout</target>
</trans-unit>
@ -218,7 +218,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">18</context>
<context context-type="linenumber">16</context>
</context-group>
<target>Share</target>
</trans-unit>
@ -227,7 +227,7 @@
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">35</context>
</context-group>
<target>Copy
</target>
@ -236,7 +236,7 @@
<source>Sharing:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">42</context>
</context-group>
<target>Sharing:</target>
</trans-unit>
@ -244,7 +244,7 @@
<source>Include subfolders:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">52</context>
<context context-type="linenumber">53</context>
</context-group>
<target>Include subfolders:</target>
</trans-unit>
@ -252,7 +252,7 @@
<source>Valid:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">90</context>
</context-group>
<target>Valid:</target>
</trans-unit>
@ -260,7 +260,7 @@
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">94</context>
<context context-type="linenumber">100</context>
</context-group>
<target>Minutes</target>
</trans-unit>
@ -268,7 +268,7 @@
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">95</context>
<context context-type="linenumber">101</context>
</context-group>
<target>Hours</target>
</trans-unit>
@ -276,7 +276,7 @@
<source>Days</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">102</context>
</context-group>
<target>Days</target>
</trans-unit>
@ -284,15 +284,17 @@
<source>Months</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">103</context>
</context-group>
<target>Months</target>
</trans-unit>
<trans-unit id="f0acecaa22df19767da6d9990458470b17da3d7a" datatype="html">
<source>Server notifications</source>
<trans-unit id="ac9751501a838bfb31f23e94ceb9616fe498a267" datatype="html">
<source>
Server notifications
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/admin/admin.component.ts</context>
<context context-type="linenumber">6</context>
<context context-type="linenumber">5</context>
</context-group>
<target>Server notifications</target>
</trans-unit>
@ -320,17 +322,17 @@
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/infopanel/info-panel.lightbox.gallery.component.ts</context>
<context context-type="linenumber">5</context>
<context context-type="linenumber">3</context>
</context-group>
<target>Info</target>
</trans-unit>
<trans-unit id="343879e5c41bab3cbc6160ae25fb0ed8e08859f0" datatype="html">
<source>Password protection </source>
<trans-unit id="427589505741d1da181b756815701e756184cb8d" datatype="html">
<source>Password protection</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
<context context-type="linenumber">3</context>
</context-group>
<target>Password protection </target>
<target>Password protection</target>
</trans-unit>
<trans-unit id="cff1428d10d59d14e45edec3c735a27b5482db59" datatype="html">
<source>Name</source>
@ -374,7 +376,7 @@
<source>Add new User</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
<context context-type="linenumber">72</context>
<context context-type="linenumber">70</context>
</context-group>
<target>Add new User</target>
</trans-unit>
@ -396,11 +398,13 @@
<target>Add User
</target>
</trans-unit>
<trans-unit id="25e15358423a68caf2960ac3eac6f7cfd19d5a30" datatype="html">
<source>Database settings</source>
<trans-unit id="26029ad47ff6a694b272298b212b5458128810be" datatype="html">
<source>
Database settings
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/database/database.settings.component.ts</context>
<context context-type="linenumber">3</context>
<context context-type="linenumber">2</context>
</context-group>
<target>Database settings</target>
</trans-unit>
@ -517,7 +521,7 @@
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/map/map.settings.component.ts</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">39</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
@ -547,7 +551,7 @@
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/map/map.settings.component.ts</context>
<context context-type="linenumber">44</context>
<context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
@ -572,11 +576,13 @@
<target>Reset
</target>
</trans-unit>
<trans-unit id="d6644690d6218f5ecc21dd3b2c69aca33d6d58c3" datatype="html">
<source>Thumbnail settings</source>
<trans-unit id="7f69d84360f0db236db44098d55961bc2d267b5e" datatype="html">
<source>
Thumbnail settings
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
<context context-type="linenumber">4</context>
<context context-type="linenumber">3</context>
</context-group>
<target>Thumbnail settings</target>
</trans-unit>
@ -792,11 +798,13 @@
Sharing is not supported with these settings
</target>
</trans-unit>
<trans-unit id="fe4fefb86d4b6629064ff0fa96fdc2b80fc151b0" datatype="html">
<source>Basic settings</source>
<trans-unit id="d62666b3159a0b5916b8f908c84e6b6f441ec1d1" datatype="html">
<source>
Basic settings
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/basic/basic.settings.component.ts</context>
<context context-type="linenumber">4</context>
<context context-type="linenumber">3</context>
</context-group>
<target>Basic settings</target>
</trans-unit>
@ -856,11 +864,13 @@
</context-group>
<target>If you access the gallery under a sub url (like: http://mydomain.com/myGallery), set it here. If not working you might miss the '/' from the beginning of the url.</target>
</trans-unit>
<trans-unit id="1e99f581a015c671d53abad7c7df6a5ad35bfe85" datatype="html">
<source>Other settings</source>
<trans-unit id="ee1319d3bfb2e70e14212ea2c3896e4ac4dc0092" datatype="html">
<source>
Other settings
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
<context context-type="linenumber">4</context>
<context context-type="linenumber">3</context>
</context-group>
<target>Other settings</target>
</trans-unit>
@ -938,11 +948,13 @@
</context-group>
<target>Caches directory contents and search results for better performance</target>
</trans-unit>
<trans-unit id="87b1696eb068572c3908643c425ee3090938c1a0" datatype="html">
<source>Folder indexing</source>
<trans-unit id="5e00b6f637f57796ae6ce0bbafedf3849e28a171" datatype="html">
<source>
Folder indexing
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
<context context-type="linenumber">4</context>
<context context-type="linenumber">3</context>
</context-group>
<target>Folder indexing</target>
</trans-unit>
@ -1096,6 +1108,22 @@
</context-group>
<target>Images</target>
</trans-unit>
<trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">frontend/app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Yes</target>
</trans-unit>
<trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">
<source>No</source>
<context-group purpose="location">
<context context-type="sourcefile">frontend/app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>No</target>
</trans-unit>
<trans-unit id="867c1b6839b592cec2156dd0b8a0009fe1557bfa" datatype="html">
<source>Url has been copied to clipboard</source>
<context-group purpose="location">
@ -1216,6 +1244,18 @@
</context-group>
<target>Basic</target>
</trans-unit>
<trans-unit id="6244017173fe88802248f410e78f2e637f98f634" datatype="html">
<source>Restart the server to apply the new settings</source>
<context-group purpose="location">
<context context-type="sourcefile">frontend/app/settings/basic/basic.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">frontend/app/settings/other/other.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Restart the server to apply the new settings</target>
</trans-unit>
<trans-unit id="f53ab04e9d8449445abf482bf44b521e2e695c3c" datatype="html">
<source>Indexing</source>
<context-group purpose="location">
@ -1260,14 +1300,6 @@
</context-group>
<target>Other</target>
</trans-unit>
<trans-unit id="6244017173fe88802248f410e78f2e637f98f634" datatype="html">
<source>Restart the server to apply the new settings</source>
<context-group purpose="location">
<context context-type="sourcefile">frontend/app/settings/other/other.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Restart the server to apply the new settings</target>
</trans-unit>
<trans-unit id="45dda89cf029b7d7b457a8dff01dc4b9a6485816" datatype="html">
<source>Thumbnail</source>
<context-group purpose="location">
@ -1292,6 +1324,14 @@
</context-group>
<target>Password protection enabled</target>
</trans-unit>
<trans-unit id="c76b3ba44c5b7ab363729f81f763b29ef5d7a641" datatype="html">
<source>Server restart is recommended.</source>
<context-group purpose="location">
<context context-type="sourcefile">frontend/app/settings/usermanager/usermanager.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Server restart is recommended.</target>
</trans-unit>
<trans-unit id="00de5dcd17a5ebd17e67e0688bc638e01bc510a4" datatype="html">
<source>Password protection disabled</source>
<context-group purpose="location">

View File

@ -24,7 +24,7 @@
<source>Username</source>
<context-group purpose="location">
<context context-type="sourcefile">app/login/login.component.ts</context>
<context context-type="linenumber">21</context>
<context context-type="linenumber">29</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
@ -40,19 +40,19 @@
<source>Password</source>
<context-group purpose="location">
<context context-type="sourcefile">app/login/login.component.ts</context>
<context context-type="linenumber">37</context>
<context context-type="linenumber">45</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/sharelogin/share-login.component.ts</context>
<context context-type="linenumber">25</context>
<context context-type="linenumber">27</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">67</context>
<context context-type="linenumber">74</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">78</context>
<context context-type="linenumber">84</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
@ -68,7 +68,7 @@
<source>Remember me</source>
<context-group purpose="location">
<context context-type="sourcefile">app/login/login.component.ts</context>
<context context-type="linenumber">43</context>
<context context-type="linenumber">56</context>
</context-group>
<target>Emlékezz rám</target>
</trans-unit>
@ -77,7 +77,7 @@
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/login/login.component.ts</context>
<context context-type="linenumber">53</context>
<context context-type="linenumber">66</context>
</context-group>
<target>Belépés</target>
</trans-unit>
@ -87,7 +87,7 @@
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/sharelogin/share-login.component.ts</context>
<context context-type="linenumber">13</context>
<context context-type="linenumber">11</context>
</context-group>
<target>Rossz jelszó</target>
</trans-unit>
@ -96,7 +96,7 @@
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/sharelogin/share-login.component.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">41</context>
</context-group>
<target>Belépés</target>
</trans-unit>
@ -112,7 +112,7 @@
<source>info</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/lightbox.gallery.component.ts</context>
<context context-type="linenumber">26</context>
<context context-type="linenumber">27</context>
</context-group>
<target>info</target>
</trans-unit>
@ -120,11 +120,11 @@
<source>toggle fullscreen</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/lightbox.gallery.component.ts</context>
<context context-type="linenumber">30</context>
<context context-type="linenumber">32</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/lightbox.gallery.component.ts</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">39</context>
</context-group>
<target>teljes képernyőre váltás</target>
</trans-unit>
@ -132,7 +132,7 @@
<source>close</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/lightbox.gallery.component.ts</context>
<context context-type="linenumber">36</context>
<context context-type="linenumber">42</context>
</context-group>
<target>bezárás</target>
</trans-unit>
@ -140,7 +140,7 @@
<source>key: left arrow</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/lightbox.gallery.component.ts</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">47</context>
</context-group>
<target>billentyű: balra nyíl</target>
</trans-unit>
@ -148,7 +148,7 @@
<source>key: right arrow</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/lightbox.gallery.component.ts</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">51</context>
</context-group>
<target>billentyű: jobbra nyíl</target>
</trans-unit>
@ -174,7 +174,7 @@
<context context-type="sourcefile">app/gallery/gallery.component.ts</context>
<context context-type="linenumber">10</context>
</context-group>
<target>napok</target>
<target>nap</target>
</trans-unit>
<trans-unit id="c17b163553f84f2f704031a1b343e7b89c5c5ee1" datatype="html">
<source>
@ -198,7 +198,7 @@
<source>Logout</source>
<context-group purpose="location">
<context context-type="sourcefile">app/frame/frame.component.ts</context>
<context context-type="linenumber">45</context>
<context context-type="linenumber">38</context>
</context-group>
<target>Kijelentkezés</target>
</trans-unit>
@ -210,7 +210,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">18</context>
<context context-type="linenumber">16</context>
</context-group>
<target>Megosztás</target>
</trans-unit>
@ -219,7 +219,7 @@
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">34</context>
<context context-type="linenumber">35</context>
</context-group>
<target>Másolat</target>
</trans-unit>
@ -227,7 +227,7 @@
<source>Sharing:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">42</context>
</context-group>
<target>megosztás:</target>
</trans-unit>
@ -235,7 +235,7 @@
<source>Include subfolders:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">52</context>
<context context-type="linenumber">53</context>
</context-group>
<target>Alkönyvtárak beillesztése:</target>
</trans-unit>
@ -243,7 +243,7 @@
<source>Valid:</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">84</context>
<context context-type="linenumber">90</context>
</context-group>
<target>Érvényes:</target>
</trans-unit>
@ -251,7 +251,7 @@
<source>Minutes</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">94</context>
<context context-type="linenumber">100</context>
</context-group>
<target>Percek</target>
</trans-unit>
@ -259,7 +259,7 @@
<source>Hours</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">95</context>
<context context-type="linenumber">101</context>
</context-group>
<target>Órák</target>
</trans-unit>
@ -267,7 +267,7 @@
<source>Days</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">96</context>
<context context-type="linenumber">102</context>
</context-group>
<target>Napok</target>
</trans-unit>
@ -275,15 +275,17 @@
<source>Months</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">97</context>
<context context-type="linenumber">103</context>
</context-group>
<target>hónapok</target>
</trans-unit>
<trans-unit id="f0acecaa22df19767da6d9990458470b17da3d7a" datatype="html">
<source>Server notifications</source>
<trans-unit id="ac9751501a838bfb31f23e94ceb9616fe498a267" datatype="html">
<source>
Server notifications
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/admin/admin.component.ts</context>
<context context-type="linenumber">6</context>
<context context-type="linenumber">5</context>
</context-group>
<target>Szerver értesítések</target>
</trans-unit>
@ -309,12 +311,12 @@
<source>Info</source>
<context-group purpose="location">
<context context-type="sourcefile">app/gallery/lightbox/infopanel/info-panel.lightbox.gallery.component.ts</context>
<context context-type="linenumber">5</context>
<context context-type="linenumber">3</context>
</context-group>
<target>Info</target>
</trans-unit>
<trans-unit id="343879e5c41bab3cbc6160ae25fb0ed8e08859f0" datatype="html">
<source>Password protection </source>
<trans-unit id="427589505741d1da181b756815701e756184cb8d" datatype="html">
<source>Password protection</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
<context context-type="linenumber">3</context>
@ -360,7 +362,7 @@
<source>Add new User</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/usermanager/usermanager.settings.component.ts</context>
<context context-type="linenumber">72</context>
<context context-type="linenumber">70</context>
</context-group>
<target>Új felhasználó hozzáadása</target>
</trans-unit>
@ -381,11 +383,13 @@
</context-group>
<target>Felhasználó hozzáadása</target>
</trans-unit>
<trans-unit id="25e15358423a68caf2960ac3eac6f7cfd19d5a30" datatype="html">
<source>Database settings</source>
<trans-unit id="26029ad47ff6a694b272298b212b5458128810be" datatype="html">
<source>
Database settings
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/database/database.settings.component.ts</context>
<context context-type="linenumber">3</context>
<context context-type="linenumber">2</context>
</context-group>
<target>Adatbázis beállítások</target>
</trans-unit>
@ -500,7 +504,7 @@
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/map/map.settings.component.ts</context>
<context context-type="linenumber">41</context>
<context context-type="linenumber">39</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
@ -529,7 +533,7 @@
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/map/map.settings.component.ts</context>
<context context-type="linenumber">44</context>
<context context-type="linenumber">42</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
@ -553,11 +557,13 @@
</context-group>
<target>Visszaállítás</target>
</trans-unit>
<trans-unit id="d6644690d6218f5ecc21dd3b2c69aca33d6d58c3" datatype="html">
<source>Thumbnail settings</source>
<trans-unit id="7f69d84360f0db236db44098d55961bc2d267b5e" datatype="html">
<source>
Thumbnail settings
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/thumbnail/thumbanil.settings.component.ts</context>
<context context-type="linenumber">4</context>
<context context-type="linenumber">3</context>
</context-group>
<target>Miniatűr beállítások</target>
</trans-unit>
@ -768,13 +774,15 @@
</context-group>
<target>A megosztás nem támogatott ezekkel a beállításokkal</target>
</trans-unit>
<trans-unit id="fe4fefb86d4b6629064ff0fa96fdc2b80fc151b0" datatype="html">
<source>Basic settings</source>
<trans-unit id="d62666b3159a0b5916b8f908c84e6b6f441ec1d1" datatype="html">
<source>
Basic settings
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/basic/basic.settings.component.ts</context>
<context context-type="linenumber">4</context>
<context context-type="linenumber">3</context>
</context-group>
<target>Alapvető beállítások</target>
<target>Alapbeállítások</target>
</trans-unit>
<trans-unit id="870d05214ce19848ea4b7fe698e9a2e73db0c715" datatype="html">
<source>Page title</source>
@ -832,11 +840,13 @@
</context-group>
<target>Ha az oldalt egy al címen lehet elérni (pl: http://oldalam.hu/myGallery), akkor az alcímet itt állitsd be. Hiba esetén lehet, hogy a "/" hiányzik az url elejéről.</target>
</trans-unit>
<trans-unit id="1e99f581a015c671d53abad7c7df6a5ad35bfe85" datatype="html">
<source>Other settings</source>
<trans-unit id="ee1319d3bfb2e70e14212ea2c3896e4ac4dc0092" datatype="html">
<source>
Other settings
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/other/other.settings.component.ts</context>
<context context-type="linenumber">4</context>
<context context-type="linenumber">3</context>
</context-group>
<target>Egyéb beállitások</target>
</trans-unit>
@ -914,11 +924,13 @@
</context-group>
<target>Gyorsítótárazza a könyvtár tartalmát és a keresési eredményeket a jobb teljesítmény érdekében</target>
</trans-unit>
<trans-unit id="87b1696eb068572c3908643c425ee3090938c1a0" datatype="html">
<source>Folder indexing</source>
<trans-unit id="5e00b6f637f57796ae6ce0bbafedf3849e28a171" datatype="html">
<source>
Folder indexing
</source>
<context-group purpose="location">
<context context-type="sourcefile">app/settings/indexing/indexing.settings.component.ts</context>
<context context-type="linenumber">4</context>
<context context-type="linenumber">3</context>
</context-group>
<target>Mappa indexelése</target>
</trans-unit>
@ -1067,6 +1079,22 @@
</context-group>
<target>képek</target>
</trans-unit>
<trans-unit id="4f20f2d5a6882190892e58b85f6ccbedfa737952" datatype="html">
<source>Yes</source>
<context-group purpose="location">
<context context-type="sourcefile">frontend/app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Igen</target>
</trans-unit>
<trans-unit id="3d3ae7deebc5949b0c1c78b9847886a94321d9fd" datatype="html">
<source>No</source>
<context-group purpose="location">
<context context-type="sourcefile">frontend/app/gallery/share/share.gallery.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Nem</target>
</trans-unit>
<trans-unit id="867c1b6839b592cec2156dd0b8a0009fe1557bfa" datatype="html">
<source>Url has been copied to clipboard</source>
<context-group purpose="location">
@ -1187,6 +1215,18 @@
</context-group>
<target>Alapvető</target>
</trans-unit>
<trans-unit id="6244017173fe88802248f410e78f2e637f98f634" datatype="html">
<source>Restart the server to apply the new settings</source>
<context-group purpose="location">
<context context-type="sourcefile">frontend/app/settings/basic/basic.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">frontend/app/settings/other/other.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Indítsa újra a weboldalt az új beállítások alkalmazásához</target>
</trans-unit>
<trans-unit id="f53ab04e9d8449445abf482bf44b521e2e695c3c" datatype="html">
<source>Indexing</source>
<context-group purpose="location">
@ -1231,14 +1271,6 @@
</context-group>
<target>Más</target>
</trans-unit>
<trans-unit id="6244017173fe88802248f410e78f2e637f98f634" datatype="html">
<source>Restart the server to apply the new settings</source>
<context-group purpose="location">
<context context-type="sourcefile">frontend/app/settings/other/other.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Indítsa újra a weboldalt az új beállítások alkalmazásához</target>
</trans-unit>
<trans-unit id="45dda89cf029b7d7b457a8dff01dc4b9a6485816" datatype="html">
<source>Thumbnail</source>
<context-group purpose="location">
@ -1263,6 +1295,14 @@
</context-group>
<target>Jelszavas védelem engedélyezve</target>
</trans-unit>
<trans-unit id="c76b3ba44c5b7ab363729f81f763b29ef5d7a641" datatype="html">
<source>Server restart is recommended.</source>
<context-group purpose="location">
<context context-type="sourcefile">frontend/app/settings/usermanager/usermanager.settings.component.ts</context>
<context context-type="linenumber">1</context>
</context-group>
<target>Szerver újraindítás javasolt.</target>
</trans-unit>
<trans-unit id="00de5dcd17a5ebd17e67e0688bc638e01bc510a4" datatype="html">
<source>Password protection disabled</source>
<context-group purpose="location">

View File

@ -70,7 +70,7 @@
"@types/node": "^10.0.3",
"@types/sharp": "^0.17.8",
"@types/winston": "^2.3.9",
"bootstrap": "3.3.7",
"bootstrap": "4.1.1",
"chai": "^4.1.2",
"codelyzer": "~4.3.0",
"core-js": "^2.5.5",
@ -100,6 +100,7 @@
"ng2-toastr": "^4.1.2",
"ngx-bootstrap": "^2.0.4",
"ngx-clipboard": "^10.0.0",
"open-iconic": "^1.1.1",
"protractor": "^5.3.1",
"remap-istanbul": "^0.11.1",
"rimraf": "^2.6.2",