Compare commits
8 Commits
478dfef4de
...
0a5c70d465
Author | SHA1 | Date |
---|---|---|
HardiReady | 0a5c70d465 | |
HardiReady | 48ce904d16 | |
HardiReady | 8029885b41 | |
HardiReady | d72db1ed4f | |
HardiReady | f2e2133496 | |
HardiReady | 374e7df34d | |
HardiReady | 1f24e19eec | |
HardiReady | e548d6821c |
|
@ -8,6 +8,13 @@ li {
|
||||||
display: inline;
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sidebar-toggle-btn {
|
||||||
|
background: linear-gradient(-90deg, #e8e5e5, #ffffff);
|
||||||
|
filter: drop-shadow(2px 1px 1px #666);
|
||||||
|
margin-left: -12px;
|
||||||
|
z-index: 500;
|
||||||
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
padding-left: 15px;
|
padding-left: 15px;
|
||||||
padding-right: 15px;
|
padding-right: 15px;
|
||||||
|
|
|
@ -96,16 +96,19 @@
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button mat-icon-button
|
<button mat-icon-button
|
||||||
|
class="sidebar-toggle-btn"
|
||||||
(click)="toggleSidebar()"
|
(click)="toggleSidebar()"
|
||||||
*ngIf="router.url.includes('/stats')"
|
*ngIf="showSidebarToggleBtn">
|
||||||
style="background: linear-gradient(-90deg, #e8e5e5,#ffffff);margin-left: -12px;">
|
|
||||||
<mat-icon svgIcon="chevron-left" *ngIf="sidebarOpen">
|
<mat-icon svgIcon="chevron-left" *ngIf="sidebarOpen">
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
<mat-icon svgIcon="chevron-right" *ngIf="!sidebarOpen">
|
<mat-icon svgIcon="chevron-right" *ngIf="!sidebarOpen">
|
||||||
</mat-icon>
|
</mat-icon>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div id="left" *ngIf="sidebarOpen">
|
<div id="left"
|
||||||
|
[style.background]="leftBackground"
|
||||||
|
[style.box-shadow]="leftBoxShadow"
|
||||||
|
*ngIf="sidebarOpen">
|
||||||
<router-outlet></router-outlet>
|
<router-outlet></router-outlet>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -118,6 +121,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<mat-spinner class="load-indicator" *ngIf="loading"></mat-spinner>
|
<span *ngIf="loading" class="load-indicator load-arrow glyphicon-refresh-animate"></span>
|
||||||
|
|
||||||
<button (click)="scrollToTop()" *ngIf="scrollTopVisible" id="scrollTopBtn" title="Zum Seitenanfang">△</button>
|
<button (click)="scrollToTop()" *ngIf="scrollTopVisible" id="scrollTopBtn" title="Zum Seitenanfang">△</button>
|
||||||
|
|
|
@ -7,6 +7,7 @@ import {RouteConfig} from './app.config';
|
||||||
import {DOCUMENT} from '@angular/common';
|
import {DOCUMENT} from '@angular/common';
|
||||||
import {DomSanitizer} from '@angular/platform-browser';
|
import {DomSanitizer} from '@angular/platform-browser';
|
||||||
import {MatIconRegistry} from '@angular/material';
|
import {MatIconRegistry} from '@angular/material';
|
||||||
|
import {SpinnerService} from './services/user-interface/spinner/spinner.service';
|
||||||
|
|
||||||
declare function require(url: string);
|
declare function require(url: string);
|
||||||
|
|
||||||
|
@ -23,10 +24,28 @@ export class AppComponent implements OnInit {
|
||||||
|
|
||||||
sidebarOpen = true;
|
sidebarOpen = true;
|
||||||
|
|
||||||
|
showSidebarToggleBtn = false;
|
||||||
|
|
||||||
scrollTopVisible = false;
|
scrollTopVisible = false;
|
||||||
|
|
||||||
scrollBtnVisibleVal = 100;
|
scrollBtnVisibleVal = 100;
|
||||||
|
|
||||||
|
leftBackground;
|
||||||
|
|
||||||
|
leftBoxShadow;
|
||||||
|
|
||||||
|
// a map of svgIcon names and associated svg file names
|
||||||
|
// to load from assets/icon folder
|
||||||
|
svgIcons = {
|
||||||
|
'add': 'outline-add_box-24px',
|
||||||
|
'add-user': 'twotone-person_add-24px',
|
||||||
|
'edit': 'twotone-edit-24px',
|
||||||
|
'delete': 'twotone-delete-24px',
|
||||||
|
'stats-detail': 'round-assessment-24px',
|
||||||
|
'chevron-left': 'baseline-chevron_left-24px',
|
||||||
|
'chevron-right': 'baseline-chevron_right-24px'
|
||||||
|
};
|
||||||
|
|
||||||
version = 'v'.concat(require('./../../../package.json').version);
|
version = 'v'.concat(require('./../../../package.json').version);
|
||||||
|
|
||||||
constructor(public loginService: LoginService,
|
constructor(public loginService: LoginService,
|
||||||
|
@ -35,36 +54,56 @@ export class AppComponent implements OnInit {
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private iconRegistry: MatIconRegistry,
|
private iconRegistry: MatIconRegistry,
|
||||||
private sanitizer: DomSanitizer,
|
private sanitizer: DomSanitizer,
|
||||||
|
private spinnerService: SpinnerService,
|
||||||
@Inject(DOCUMENT) private document) {
|
@Inject(DOCUMENT) private document) {
|
||||||
this.iconRegistry.addSvgIcon('add',
|
this.initMaterialSvgIcons();
|
||||||
sanitizer.bypassSecurityTrustResourceUrl('../assets/icon/outline-add_box-24px.svg'));
|
|
||||||
this.iconRegistry.addSvgIcon('add-user',
|
this.spinnerService.spinnerActive.subscribe(active => this.toggleSpinner(active));
|
||||||
sanitizer.bypassSecurityTrustResourceUrl('../assets/icon/twotone-person_add-24px.svg'));
|
|
||||||
this.iconRegistry.addSvgIcon('edit',
|
|
||||||
sanitizer.bypassSecurityTrustResourceUrl('../assets/icon/twotone-edit-24px.svg'));
|
|
||||||
this.iconRegistry.addSvgIcon('delete',
|
|
||||||
sanitizer.bypassSecurityTrustResourceUrl('../assets/icon/twotone-delete-24px.svg'));
|
|
||||||
this.iconRegistry.addSvgIcon('stats-detail',
|
|
||||||
sanitizer.bypassSecurityTrustResourceUrl('../assets/icon/round-assessment-24px.svg'));
|
|
||||||
this.iconRegistry.addSvgIcon('chevron-left',
|
|
||||||
sanitizer.bypassSecurityTrustResourceUrl('../assets/icon/baseline-chevron_left-24px.svg'));
|
|
||||||
this.iconRegistry.addSvgIcon('chevron-right',
|
|
||||||
sanitizer.bypassSecurityTrustResourceUrl('../assets/icon/baseline-chevron_right-24px.svg'));
|
|
||||||
|
|
||||||
router.events.subscribe(event => {
|
router.events.subscribe(event => {
|
||||||
if (event instanceof NavigationStart) {
|
if (event instanceof NavigationStart) {
|
||||||
this.loading = true;
|
this.spinnerService.activate();
|
||||||
}
|
}
|
||||||
if (event instanceof NavigationEnd) {
|
if (event instanceof NavigationEnd) {
|
||||||
this.loading = false;
|
this.spinnerService.deactivate();
|
||||||
|
const currentUrl = this.router.url;
|
||||||
|
|
||||||
// scroll to top on route from army overview to user detail and back
|
// scroll to top on route from army overview to user detail and back
|
||||||
if (router.url.includes('overview')) {
|
if (currentUrl.includes('/overview')) {
|
||||||
this.scrollToTop();
|
this.scrollToTop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// show sidebar menu on initial page access
|
||||||
|
this.sidebarOpen = true;
|
||||||
|
this.showSidebarToggleBtn = currentUrl.includes('/stats');
|
||||||
|
|
||||||
|
// remove sidebar styling for components that are rendered inside,
|
||||||
|
// but not really shown as sidebar (legacy)
|
||||||
|
if (currentUrl.includes('/login') ||
|
||||||
|
currentUrl.includes('/signup') ||
|
||||||
|
currentUrl.endsWith('/404')) {
|
||||||
|
this.leftBackground = 'none';
|
||||||
|
this.leftBoxShadow = 'none';
|
||||||
|
} else {
|
||||||
|
this.leftBackground = '#f9f9f9';
|
||||||
|
this.leftBoxShadow = '2px 1px 5px grey';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggleSpinner(active) {
|
||||||
|
this.loading = active;
|
||||||
|
}
|
||||||
|
|
||||||
|
initMaterialSvgIcons() {
|
||||||
|
Object.keys(this.svgIcons).forEach(key => {
|
||||||
|
const fileUri = '../assets/icon/'.concat(this.svgIcons[key])
|
||||||
|
.concat('.svg');
|
||||||
|
this.iconRegistry.addSvgIcon(key, this.sanitizer.bypassSecurityTrustResourceUrl(fileUri));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@HostListener('window:scroll', [])
|
@HostListener('window:scroll', [])
|
||||||
onWindowScroll() {
|
onWindowScroll() {
|
||||||
this.scrollTopVisible = document.body.scrollTop > this.scrollBtnVisibleVal
|
this.scrollTopVisible = document.body.scrollTop > this.scrollBtnVisibleVal
|
||||||
|
@ -88,14 +127,14 @@ export class AppComponent implements OnInit {
|
||||||
|
|
||||||
logout() {
|
logout() {
|
||||||
this.loginService.logout();
|
this.loginService.logout();
|
||||||
this.router.navigate([RouteConfig.overviewPath]);
|
setTimeout(() => {
|
||||||
return false;
|
this.router.navigate([RouteConfig.overviewPath]);
|
||||||
|
}, 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
scrollToTop() {
|
scrollToTop() {
|
||||||
this.document.body.scrollTop = 0; // For Safari
|
this.document.body.scrollTop = 0; // For Safari
|
||||||
this.document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera
|
this.document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,12 +23,13 @@ import {UserService} from './services/army-management/user.service';
|
||||||
import {UserStore} from './services/stores/user.store';
|
import {UserStore} from './services/stores/user.store';
|
||||||
import {CookieService} from 'ngx-cookie-service';
|
import {CookieService} from 'ngx-cookie-service';
|
||||||
import {SnackBarService} from './services/user-interface/snack-bar/snack-bar.service';
|
import {SnackBarService} from './services/user-interface/snack-bar/snack-bar.service';
|
||||||
import {MaterialComponentsModule} from './material-components.module';
|
|
||||||
import {HttpClientModule} from '@angular/common/http';
|
import {HttpClientModule} from '@angular/common/http';
|
||||||
|
import {SpinnerService} from './services/user-interface/spinner/spinner.service';
|
||||||
|
import {MatSnackBarModule} from '@angular/material';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [SharedModule, BrowserModule, BrowserAnimationsModule, appRouting, HttpModule, HttpClientModule,
|
imports: [SharedModule, BrowserModule, BrowserAnimationsModule, appRouting, HttpModule, HttpClientModule,
|
||||||
ClipboardModule, MaterialComponentsModule],
|
ClipboardModule, MatSnackBarModule],
|
||||||
providers: [
|
providers: [
|
||||||
HttpClient,
|
HttpClient,
|
||||||
LoginService,
|
LoginService,
|
||||||
|
@ -49,7 +50,8 @@ import {HttpClientModule} from '@angular/common/http';
|
||||||
AppConfig,
|
AppConfig,
|
||||||
routingProviders,
|
routingProviders,
|
||||||
CookieService,
|
CookieService,
|
||||||
SnackBarService
|
SnackBarService,
|
||||||
|
SpinnerService
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
AppComponent,
|
AppComponent,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<form #form="ngForm" class="overview">
|
<form #form="ngForm" (keydown.enter)="$event.preventDefault()" class="overview">
|
||||||
<h3 *ngIf="decoration._id">Auszeichnung editieren</h3>
|
<h3 *ngIf="decoration._id">Auszeichnung editieren</h3>
|
||||||
<h3 *ngIf="!decoration._id">Neue Auszeichnung hinzufügen</h3>
|
<h3 *ngIf="!decoration._id">Neue Auszeichnung hinzufügen</h3>
|
||||||
|
|
||||||
|
@ -70,6 +70,7 @@
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button id="save"
|
<button id="save"
|
||||||
|
type="submit"
|
||||||
(click)="saveDecoration(fileInput)"
|
(click)="saveDecoration(fileInput)"
|
||||||
class="btn btn-default"
|
class="btn btn-default"
|
||||||
[disabled]="!form.valid">
|
[disabled]="!form.valid">
|
||||||
|
|
|
@ -15,10 +15,6 @@
|
||||||
<span *ngIf="!loading">Anmelden</span>
|
<span *ngIf="!loading">Anmelden</span>
|
||||||
<span *ngIf="loading" class="glyphicon glyphicon-refresh glyphicon-refresh-animate"></span>
|
<span *ngIf="loading" class="glyphicon glyphicon-refresh glyphicon-refresh-animate"></span>
|
||||||
</button>
|
</button>
|
||||||
<span *ngIf="showErrorLabel"
|
|
||||||
class="center-block label label-danger" style="font-size: medium; padding: 2px; margin-top: 2px">
|
|
||||||
{{error}}
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ import {Component, OnInit} from '@angular/core';
|
||||||
import {Router} from '@angular/router';
|
import {Router} from '@angular/router';
|
||||||
import {LoginService} from '../services/app-user-service/login-service';
|
import {LoginService} from '../services/app-user-service/login-service';
|
||||||
import {RouteConfig} from '../app.config';
|
import {RouteConfig} from '../app.config';
|
||||||
|
import {SnackBarService} from '../services/user-interface/snack-bar/snack-bar.service';
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
@ -12,16 +13,13 @@ import {RouteConfig} from '../app.config';
|
||||||
|
|
||||||
export class LoginComponent implements OnInit {
|
export class LoginComponent implements OnInit {
|
||||||
|
|
||||||
showErrorLabel = false;
|
|
||||||
|
|
||||||
error: string;
|
|
||||||
|
|
||||||
loading = false;
|
loading = false;
|
||||||
|
|
||||||
returnUrl: string;
|
returnUrl: string;
|
||||||
|
|
||||||
constructor(private router: Router,
|
constructor(private router: Router,
|
||||||
private loginService: LoginService) {
|
private loginService: LoginService,
|
||||||
|
private snackBarService: SnackBarService) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
@ -40,11 +38,7 @@ export class LoginComponent implements OnInit {
|
||||||
this.router.navigate([this.returnUrl]);
|
this.router.navigate([this.returnUrl]);
|
||||||
},
|
},
|
||||||
error => {
|
error => {
|
||||||
this.error = error._body;
|
this.snackBarService.showError(error._body, 15000);
|
||||||
this.showErrorLabel = true;
|
|
||||||
setTimeout(() => {
|
|
||||||
this.showErrorLabel = false;
|
|
||||||
}, 4000);
|
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
<form class="form-signin" (ngSubmit)="login(userName.value, password.value, secret.value)">
|
<form class="form-signin" (ngSubmit)="login(userName.value, password.value, secret.value)">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row" style="position: absolute;width: 500px;left: 40%;">
|
||||||
<h2 style="text-align: center;" class="form-signin-heading">Registrieren</h2>
|
<h2 style="text-align: center;" class="form-signin-heading">Registrieren</h2>
|
||||||
|
|
||||||
<p>Dieses Formular nur ausfüllen wenn du einer <b>HL</b> angehörst oder <b>SQL</b> bist. Dabei den Nutzernamen aus
|
<p>Dieses Formular nur ausfüllen wenn du einer <b>HL</b> angehörst oder <b>SQL</b> bist. Dabei den Nutzernamen aus
|
||||||
dem OPT Forum verwenden!
|
dem OPT Forum verwenden!
|
||||||
Im Forum eine Nachricht an <a href="https://operation-pandora.com/dashboard/index.php?conversation-add/&userID=9"
|
Im Forum eine Nachricht an <a href="https://www.opt4.net/dashboard/index.php?conversation-add/&userID=9"
|
||||||
target="_blank">HardiReady</a>
|
target="_blank">HardiReady</a>
|
||||||
senden, in welcher der 'geheime Text' steht, den du bei der Registrierung nutzt.<br>
|
senden, in welcher der 'geheime Text' steht, den du bei der Registrierung nutzt.<br>
|
||||||
Dabei kann es sich um irgend eine willkürliche Zeichenfolge oder einen Satz handeln - dient nur dem Abgleich.
|
Dabei kann es sich um irgend eine willkürliche Zeichenfolge oder einen Satz handeln - dient nur dem Abgleich.
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
/**
|
|
||||||
* Angular material imports
|
|
||||||
*/
|
|
||||||
|
|
||||||
import {NgModule} from '@angular/core';
|
|
||||||
import {MatProgressSpinnerModule, MatSnackBarModule} from '@angular/material';
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
imports: [
|
|
||||||
MatSnackBarModule,
|
|
||||||
MatProgressSpinnerModule,
|
|
||||||
],
|
|
||||||
exports: [
|
|
||||||
MatSnackBarModule,
|
|
||||||
MatProgressSpinnerModule,
|
|
||||||
]
|
|
||||||
})
|
|
||||||
|
|
||||||
export class MaterialComponentsModule {
|
|
||||||
}
|
|
|
@ -1,4 +1,4 @@
|
||||||
<form #form="ngForm" class="overview">
|
<form #form="ngForm" (keydown.enter)="$event.preventDefault()" class="overview">
|
||||||
<h3 *ngIf="rank._id">Rang editieren</h3>
|
<h3 *ngIf="rank._id">Rang editieren</h3>
|
||||||
<h3 *ngIf="!rank._id">Neuen Rang hinzufügen</h3>
|
<h3 *ngIf="!rank._id">Neuen Rang hinzufügen</h3>
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button id="save"
|
<button id="save"
|
||||||
|
type="submit"
|
||||||
(click)="saveRank(fileInput)"
|
(click)="saveRank(fileInput)"
|
||||||
class="btn btn-default"
|
class="btn btn-default"
|
||||||
[disabled]="!form.valid">
|
[disabled]="!form.valid">
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
import {EventEmitter, Injectable} from '@angular/core';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class SpinnerService {
|
||||||
|
|
||||||
|
public spinnerActive: EventEmitter<Boolean>;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.spinnerActive = new EventEmitter();
|
||||||
|
}
|
||||||
|
|
||||||
|
activate() {
|
||||||
|
this.spinnerActive.emit(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
deactivate() {
|
||||||
|
this.spinnerActive.emit(false)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
<form #form="ngForm" class="overview">
|
<form #form="ngForm" (keydown.enter)="$event.preventDefault()" class="overview">
|
||||||
<h3 *ngIf="squad._id">Squad editieren</h3>
|
<h3 *ngIf="squad._id">Squad editieren</h3>
|
||||||
<h3 *ngIf="!squad._id">Neues Squad hinzufügen</h3>
|
<h3 *ngIf="!squad._id">Neues Squad hinzufügen</h3>
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button id="save"
|
<button id="save"
|
||||||
|
type="submit"
|
||||||
(click)="saveSquad(fileInput)"
|
(click)="saveSquad(fileInput)"
|
||||||
class="btn btn-default"
|
class="btn btn-default"
|
||||||
[disabled]="!form.valid">
|
[disabled]="!form.valid">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<form #form="ngForm" class="overview">
|
<form #form="ngForm" (keydown.enter)="$event.preventDefault()" class="overview">
|
||||||
<h3 *ngIf="campaign._id">Kampagne editieren</h3>
|
<h3 *ngIf="campaign._id">Kampagne editieren</h3>
|
||||||
<h3 *ngIf="!campaign._id">Neue Kampagne hinzufügen</h3>
|
<h3 *ngIf="!campaign._id">Neue Kampagne hinzufügen</h3>
|
||||||
|
|
||||||
|
@ -20,15 +20,10 @@
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button id="save"
|
<button id="save"
|
||||||
|
type="submit"
|
||||||
(click)="saveCampaign()"
|
(click)="saveCampaign()"
|
||||||
class="btn btn-default"
|
class="btn btn-default"
|
||||||
[disabled]="!form.valid">
|
[disabled]="!form.valid">
|
||||||
Bestätigen
|
Bestätigen
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<span *ngIf="showErrorLabel"
|
|
||||||
class="center-block label label-danger" style="font-size: medium; padding: 2px; margin-top: 2px">
|
|
||||||
{{error}}
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -4,6 +4,8 @@ import {NgForm} from '@angular/forms';
|
||||||
import {Subscription} from 'rxjs/Subscription';
|
import {Subscription} from 'rxjs/Subscription';
|
||||||
import {Campaign} from '../../../models/model-interfaces';
|
import {Campaign} from '../../../models/model-interfaces';
|
||||||
import {CampaignService} from '../../../services/logs/campaign.service';
|
import {CampaignService} from '../../../services/logs/campaign.service';
|
||||||
|
import {Message} from '../../../i18n/de.messages';
|
||||||
|
import {SnackBarService} from '../../../services/user-interface/snack-bar/snack-bar.service';
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
@ -15,24 +17,21 @@ export class CampaignSubmitComponent {
|
||||||
|
|
||||||
campaign: Campaign = {};
|
campaign: Campaign = {};
|
||||||
|
|
||||||
showErrorLabel = false;
|
|
||||||
|
|
||||||
error;
|
|
||||||
|
|
||||||
subscription: Subscription;
|
subscription: Subscription;
|
||||||
|
|
||||||
@ViewChild(NgForm) form: NgForm;
|
@ViewChild(NgForm) form: NgForm;
|
||||||
|
|
||||||
constructor(private route: ActivatedRoute,
|
constructor(private route: ActivatedRoute,
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private campaignService: CampaignService) {
|
private campaignService: CampaignService,
|
||||||
|
private snackBarService: SnackBarService) {
|
||||||
this.subscription = this.route.params
|
this.subscription = this.route.params
|
||||||
.map(params => params['id'])
|
.map(params => params['id'])
|
||||||
.filter(id => id !== undefined)
|
.filter(id => id !== undefined)
|
||||||
.flatMap(id => this.campaignService.getCampaign(id))
|
.flatMap(id => this.campaignService.getCampaign(id))
|
||||||
.subscribe(campaign => {
|
.subscribe(campaign => {
|
||||||
this.campaign = campaign;
|
this.campaign = campaign;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
saveCampaign() {
|
saveCampaign() {
|
||||||
|
@ -42,12 +41,10 @@ export class CampaignSubmitComponent {
|
||||||
if (this.campaign._id) {
|
if (this.campaign._id) {
|
||||||
redirectSuccessUrl = '../' + redirectSuccessUrl;
|
redirectSuccessUrl = '../' + redirectSuccessUrl;
|
||||||
}
|
}
|
||||||
|
this.snackBarService.showSuccess(Message.SUCCESS_SAVE);
|
||||||
this.router.navigate([redirectSuccessUrl + campaign._id], {relativeTo: this.route});
|
this.router.navigate([redirectSuccessUrl + campaign._id], {relativeTo: this.route});
|
||||||
},
|
},
|
||||||
error => {
|
error => this.snackBarService.showError(error._body.error.message, 15000));
|
||||||
this.error = error._body.error.message;
|
|
||||||
this.showErrorLabel = true;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cancel() {
|
cancel() {
|
||||||
|
|
|
@ -3,7 +3,21 @@
|
||||||
width:fit-content;
|
width:fit-content;
|
||||||
border: 1px solid #dadada;
|
border: 1px solid #dadada;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
margin:auto;
|
margin: auto;
|
||||||
|
margin-top: 56px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:host /deep/ table.mat-table > thead {
|
||||||
|
position: absolute;
|
||||||
|
width: 977px;
|
||||||
|
display: inherit;
|
||||||
|
margin-left: -1px;
|
||||||
|
margin-top: -57px;
|
||||||
|
border: 1px solid #dadada;
|
||||||
|
}
|
||||||
|
|
||||||
|
:host /deep/ table.mat-table > tbody {
|
||||||
|
margin-top: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.in-table-btn {
|
.in-table-btn {
|
||||||
|
@ -11,20 +25,10 @@
|
||||||
margin-top: -5px;
|
margin-top: -5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MATERIAL TABLE */
|
|
||||||
table.mat-table {
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.mat-table img {
|
table.mat-table img {
|
||||||
filter: invert(60%);
|
filter: invert(60%);
|
||||||
}
|
}
|
||||||
|
|
||||||
:host /deep/ table.mat-table > thead {
|
|
||||||
position: absolute;
|
|
||||||
display: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
:host /deep/ table.mat-table > tbody {
|
:host /deep/ table.mat-table > tbody {
|
||||||
margin-top: 60px;
|
margin-top: 60px;
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -37,22 +41,14 @@ table.mat-table img {
|
||||||
width: 90px;
|
width: 90px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mat-column-kill, .mat-column-friendlyFire, .mat-column-revive, .mat-column-flagTouch,
|
.mat-column-kill, .mat-column-friendlyFire, .mat-column-revive, .mat-column-flagTouch, .mat-column-vehicleLight,
|
||||||
.mat-column-vehicleLight, .mat-column-vehicleHeavy, .mat-column-vehicleAir, .mat-column-death, .mat-column-respawn {
|
.mat-column-vehicleHeavy, .mat-column-vehicleAir, .mat-column-death, .mat-column-respawn, .mat-column-interact {
|
||||||
width: 67px;
|
width: 67px;
|
||||||
text-indent: 9px;
|
text-indent: 9px;
|
||||||
}
|
}
|
||||||
|
|
||||||
th.mat-column-interact {
|
td.mat-cell:last-child, td.mat-footer-cell:last-child, th.mat-header-cell:last-child {
|
||||||
padding-left: 36px;
|
padding-right: 0;
|
||||||
background: white;
|
|
||||||
position: relative;
|
|
||||||
z-index: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TABLE SCROLLBAR */
|
|
||||||
div::-webkit-scrollbar-thumb {
|
|
||||||
border-top: solid white 56px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MAT ICON BUTTON */
|
/* MAT ICON BUTTON */
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<ng-container matColumnDef="interact">
|
<ng-container matColumnDef="interact">
|
||||||
<th mat-header-cell *matHeaderCellDef> </th>
|
<th mat-header-cell *matHeaderCellDef></th>
|
||||||
<td mat-cell *matCellDef="let element">
|
<td mat-cell *matCellDef="let element">
|
||||||
<button mat-icon-button
|
<button mat-icon-button
|
||||||
matTooltip="Kampagnenstatistik für {{element.name}}"
|
matTooltip="Kampagnenstatistik für {{element.name}}"
|
||||||
|
|
|
@ -113,11 +113,11 @@ export class ScoreboardComponent implements OnChanges {
|
||||||
csvOut += player.fraction + ',';
|
csvOut += player.fraction + ',';
|
||||||
csvOut += player.kill + ',';
|
csvOut += player.kill + ',';
|
||||||
csvOut += player.friendlyFire + ',';
|
csvOut += player.friendlyFire + ',';
|
||||||
|
csvOut += player.revive + ',';
|
||||||
|
csvOut += player.flagTouch + ',';
|
||||||
csvOut += player.vehicleLight + ',';
|
csvOut += player.vehicleLight + ',';
|
||||||
csvOut += player.vehicleHeavy + ',';
|
csvOut += player.vehicleHeavy + ',';
|
||||||
csvOut += player.vehicleAir + ',';
|
csvOut += player.vehicleAir + ',';
|
||||||
csvOut += player.revive + ',';
|
|
||||||
csvOut += player.flagTouch + ',';
|
|
||||||
csvOut += player.death + ',';
|
csvOut += player.death + ',';
|
||||||
csvOut += player.respawn;
|
csvOut += player.respawn;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<form #form="ngForm" class="overview">
|
<form #form="ngForm" (keydown.enter)="$event.preventDefault()" class="overview">
|
||||||
<h3>Schlacht bearbeiten</h3>
|
<h3>Schlacht bearbeiten</h3>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
@ -71,15 +71,10 @@
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button id="save"
|
<button id="save"
|
||||||
|
type="submit"
|
||||||
(click)="updateWar()"
|
(click)="updateWar()"
|
||||||
class="btn btn-default"
|
class="btn btn-default"
|
||||||
[disabled]="!form.valid">
|
[disabled]="!form.valid">
|
||||||
Bestätigen
|
Bestätigen
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<span *ngIf="showErrorLabel"
|
|
||||||
class="center-block label label-danger" style="font-size: medium; padding: 2px; margin-top: 2px">
|
|
||||||
{{error}}
|
|
||||||
</span>
|
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -5,13 +5,14 @@ import {WarService} from '../../../services/logs/war.service';
|
||||||
import {War} from '../../../models/model-interfaces';
|
import {War} from '../../../models/model-interfaces';
|
||||||
import {CampaignService} from '../../../services/logs/campaign.service';
|
import {CampaignService} from '../../../services/logs/campaign.service';
|
||||||
import {Subscription} from 'rxjs/Subscription';
|
import {Subscription} from 'rxjs/Subscription';
|
||||||
|
import {SnackBarService} from '../../../services/user-interface/snack-bar/snack-bar.service';
|
||||||
|
import {Message} from '../../../i18n/de.messages';
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'war-edit',
|
selector: 'war-edit',
|
||||||
templateUrl: './war-edit.component.html',
|
templateUrl: './war-edit.component.html',
|
||||||
styleUrls: ['./war-edit.component.css', '../../../style/load-indicator.css',
|
styleUrls: ['./war-edit.component.css', '../../../style/entry-form.css', '../../../style/overview.css']
|
||||||
'../../../style/entry-form.css', '../../../style/overview.css']
|
|
||||||
})
|
})
|
||||||
export class WarEditComponent {
|
export class WarEditComponent {
|
||||||
|
|
||||||
|
@ -19,15 +20,12 @@ export class WarEditComponent {
|
||||||
|
|
||||||
subscription: Subscription;
|
subscription: Subscription;
|
||||||
|
|
||||||
showErrorLabel = false;
|
|
||||||
|
|
||||||
error;
|
|
||||||
|
|
||||||
@ViewChild(NgForm) form: NgForm;
|
@ViewChild(NgForm) form: NgForm;
|
||||||
|
|
||||||
constructor(private route: ActivatedRoute,
|
constructor(private route: ActivatedRoute,
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private warService: WarService,
|
private warService: WarService,
|
||||||
|
private snackBarService: SnackBarService,
|
||||||
public campaignService: CampaignService) {
|
public campaignService: CampaignService) {
|
||||||
this.subscription = this.route.params
|
this.subscription = this.route.params
|
||||||
.map(params => params['id'])
|
.map(params => params['id'])
|
||||||
|
@ -41,12 +39,10 @@ export class WarEditComponent {
|
||||||
updateWar() {
|
updateWar() {
|
||||||
this.warService.updateWar(this.war)
|
this.warService.updateWar(this.war)
|
||||||
.subscribe(war => {
|
.subscribe(war => {
|
||||||
|
this.snackBarService.showSuccess(Message.SUCCESS_SAVE);
|
||||||
this.router.navigate(['../../war/' + war._id], {relativeTo: this.route});
|
this.router.navigate(['../../war/' + war._id], {relativeTo: this.route});
|
||||||
},
|
},
|
||||||
error => {
|
error => this.snackBarService.showError(error._body.error.message, 15000));
|
||||||
this.error = error._body.error.message;
|
|
||||||
this.showErrorLabel = true;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cancel() {
|
cancel() {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<form #form="ngForm" class="overview">
|
<form #form="ngForm" (keydown.enter)="$event.preventDefault()" class="overview">
|
||||||
<h3>Neue Schlacht hinzufügen</h3>
|
<h3>Neue Schlacht hinzufügen</h3>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
@ -42,12 +42,11 @@
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button id="save"
|
<button id="save"
|
||||||
|
type="submit"
|
||||||
*ngIf="!loading"
|
*ngIf="!loading"
|
||||||
(click)="saveWar()"
|
(click)="saveWar()"
|
||||||
class="btn btn-default"
|
class="btn btn-default"
|
||||||
[disabled]="!form.valid">
|
[disabled]="!form.valid">
|
||||||
Bestätigen
|
Bestätigen
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<span *ngIf="loading" class="load-indicator load-arrow glyphicon-refresh-animate"></span>
|
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -5,13 +5,13 @@ import {WarService} from '../../../services/logs/war.service';
|
||||||
import {War} from '../../../models/model-interfaces';
|
import {War} from '../../../models/model-interfaces';
|
||||||
import {CampaignService} from '../../../services/logs/campaign.service';
|
import {CampaignService} from '../../../services/logs/campaign.service';
|
||||||
import {SnackBarService} from '../../../services/user-interface/snack-bar/snack-bar.service';
|
import {SnackBarService} from '../../../services/user-interface/snack-bar/snack-bar.service';
|
||||||
|
import {SpinnerService} from '../../../services/user-interface/spinner/spinner.service';
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'war-submit',
|
selector: 'war-submit',
|
||||||
templateUrl: './war-submit.component.html',
|
templateUrl: './war-submit.component.html',
|
||||||
styleUrls: ['./war-submit.component.css', '../../../style/load-indicator.css',
|
styleUrls: ['./war-submit.component.css', '../../../style/entry-form.css', '../../../style/overview.css']
|
||||||
'../../../style/entry-form.css', '../../../style/overview.css']
|
|
||||||
})
|
})
|
||||||
export class WarSubmitComponent {
|
export class WarSubmitComponent {
|
||||||
|
|
||||||
|
@ -25,14 +25,13 @@ export class WarSubmitComponent {
|
||||||
|
|
||||||
loading = false;
|
loading = false;
|
||||||
|
|
||||||
error;
|
|
||||||
|
|
||||||
@ViewChild(NgForm) form: NgForm;
|
@ViewChild(NgForm) form: NgForm;
|
||||||
|
|
||||||
constructor(private route: ActivatedRoute,
|
constructor(private route: ActivatedRoute,
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private warService: WarService,
|
private warService: WarService,
|
||||||
private snackBarService: SnackBarService,
|
private snackBarService: SnackBarService,
|
||||||
|
private spinnerService: SpinnerService,
|
||||||
public campaignService: CampaignService) {
|
public campaignService: CampaignService) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,15 +52,17 @@ export class WarSubmitComponent {
|
||||||
}
|
}
|
||||||
const file: File = this.fileList[0];
|
const file: File = this.fileList[0];
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
|
this.spinnerService.activate();
|
||||||
|
|
||||||
this.warService.submitWar(this.war, file)
|
this.warService.submitWar(this.war, file)
|
||||||
.subscribe(war => {
|
.subscribe(war => {
|
||||||
this.router.navigate(['../war/' + war._id], {relativeTo: this.route});
|
this.router.navigate(['../war/' + war._id], {relativeTo: this.route});
|
||||||
},
|
},
|
||||||
error => {
|
error => {
|
||||||
|
this.spinnerService.deactivate();
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
const errorMsg = JSON.parse(error._body).error.message;
|
const errorMsg = JSON.parse(error._body).error.message;
|
||||||
this.snackBarService.showError('Error: '.concat(errorMsg), 10000);
|
this.snackBarService.showError('Error: '.concat(errorMsg), 15000);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,43 +2,36 @@
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
z-index: 10000;
|
z-index: 10000;
|
||||||
|
left: 46%;
|
||||||
|
filter: drop-shadow(3px 1px 2px #dadada);
|
||||||
}
|
}
|
||||||
@media only screen and (max-width: 1199px) {
|
|
||||||
.load-indicator {
|
|
||||||
left: 46%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media only screen and (min-width: 1200px) {
|
@media only screen and (min-width: 1200px) {
|
||||||
.load-indicator {
|
.load-indicator {
|
||||||
left: 46%;
|
left: 47.4%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@media only screen and (min-width: 1376px) {
|
@media only screen and (min-width: 1376px) {
|
||||||
.load-indicator {
|
.load-indicator {
|
||||||
left: 46.5%;
|
left: 48%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@media only screen and (min-width: 1600px) {
|
@media only screen and (min-width: 1600px) {
|
||||||
.load-indicator {
|
.load-indicator {
|
||||||
left: 47.5%;
|
left: 48.2%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@media only screen and (min-width: 1925px) {
|
@media only screen and (min-width: 1925px) {
|
||||||
.load-indicator {
|
.load-indicator {
|
||||||
left: 48%;
|
left: 48.7%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
:host /deep/ .mat-progress-spinner circle, .mat-spinner circle {
|
|
||||||
stroke: #303030 !important;
|
|
||||||
stroke-linecap: round;
|
|
||||||
}
|
|
||||||
|
|
||||||
.load-arrow {
|
.load-arrow {
|
||||||
background: url(../../assets/loading.png) no-repeat;
|
background: url(../../assets/loading.png) no-repeat;
|
||||||
display: block;
|
display: block;
|
||||||
width: 80px;
|
width: 70px;
|
||||||
height: 80px;
|
height: 70px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Loading Animation */
|
/* Loading Animation */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<form #form="ngForm" class="overview">
|
<form #form="ngForm" (keydown.enter)="$event.preventDefault()" class="overview">
|
||||||
<h3 *ngIf="user._id">Teilnehmer editieren</h3>
|
<h3 *ngIf="user._id">Teilnehmer editieren</h3>
|
||||||
<h3 *ngIf="!user._id">Neuen Teilnehmer hinzufügen</h3>
|
<h3 *ngIf="!user._id">Neuen Teilnehmer hinzufügen</h3>
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
<option *ngFor="let rank of ranks" [value]="rank.level">{{rank.name}}</option>
|
<option *ngFor="let rank of ranks" [value]="rank.level">{{rank.name}}</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<show-error displayName="Squad" controlPath="squad"></show-error>
|
<show-error displayName="Rang" controlPath="rank"></show-error>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button id="cancel"
|
<button id="cancel"
|
||||||
|
@ -51,6 +51,7 @@
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button id="save"
|
<button id="save"
|
||||||
|
type="submit"
|
||||||
(click)="saveUser(rankLevel.value)"
|
(click)="saveUser(rankLevel.value)"
|
||||||
class="btn btn-default"
|
class="btn btn-default"
|
||||||
[disabled]="!form.valid">
|
[disabled]="!form.valid">
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 6.3 KiB |
Loading…
Reference in New Issue