Release v1.5.3 - Optimize package sizes #13
15
minify.sh
15
minify.sh
|
@ -1,15 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# execute script in its location folder
|
||||
cd $(dirname $0)
|
||||
|
||||
# array of files to minify
|
||||
FILES=(inline.bundle main.bundle polyfills.bundle scripts.bundle styles.bundle vendor.bundle admin.module.chunk common.chunk decoration.module.chunk ranks.module.chunk request.module.chunk squads.module.chunk stats.module.chunk users.module.chunk)
|
||||
OPTIONS="-c toplevel,dead_code=true,unused=true"
|
||||
|
||||
for i in "${FILES[@]}"
|
||||
do
|
||||
echo "minify ${i} ..."
|
||||
$(npm bin)/uglifyjs public/${i}.js ${OPTIONS} -o public/${i}.js
|
||||
rm -f public/${i}.js.map
|
||||
done
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"name": "opt-cc",
|
||||
"version": "1.5.2",
|
||||
"version": "1.5.3",
|
||||
"license": "MIT",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "npm run deploy-static-prod && npm start --prefix ./api",
|
||||
"dev": "npm run deploy-static && npm run dev --prefix ./api",
|
||||
"deploy-static": "cd ./static && $(npm bin)/ng build && ln -s ../api/resource/ ../public/resource",
|
||||
"deploy-static-prod": "cd ./static && $(npm bin)/ng build --env=prod && ln -s ../api/resource/ ../public/resource && .././minify.sh",
|
||||
"deploy-static-prod": "cd ./static && $(npm bin)/ng build --prod --aot && ln -s ../api/resource/ ../public/resource",
|
||||
"postinstall": "npm install --prefix ./static && npm install --prefix ./api",
|
||||
"mongodb": "mkdir -p mongodb-data && mongod --dbpath ./mongodb-data",
|
||||
"test": "npm test --prefix ./api",
|
||||
|
|
|
@ -16,7 +16,7 @@ export class AppComponent {
|
|||
|
||||
loading: boolean = false;
|
||||
|
||||
constructor(private loginService: LoginService,
|
||||
constructor(public loginService: LoginService,
|
||||
private promotionService: PromotionService,
|
||||
private awardingService: AwardingService,
|
||||
private router: Router) {
|
||||
|
|
|
@ -4,28 +4,28 @@
|
|||
<input type="radio" name="fractSelect"
|
||||
[checked]="(fractionRadioSelect == undefined) ? 'true' : 'false'"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
(change)="filterSquadsByFraction(query.value)">Alle
|
||||
(change)="filterDecorations(query.value, '')">Alle
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="fractSelect" value="blufor"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
#fractRadioBufor
|
||||
(change)="filterSquadsByFraction(query.value, fractRadioBufor.value)">NATO
|
||||
(change)="filterDecorations(query.value, fractRadioBufor.value)">NATO
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="fractSelect" value="opfor"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
#fractRadioOpfor
|
||||
(change)="filterSquadsByFraction(query.value, fractRadioOpfor.value)">CSAT
|
||||
(change)="filterDecorations(query.value, fractRadioOpfor.value)">CSAT
|
||||
</label>
|
||||
<br>
|
||||
<label class="radio-inline" style="padding-top: 8px;">
|
||||
<input type="radio" name="fractSelect" value="global"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
#fractRadioGlobal
|
||||
(change)="filterSquadsByFraction(query.value, fractRadioGlobal.value)">Global
|
||||
(change)="filterDecorations(query.value, fractRadioGlobal.value)">Global
|
||||
</label>
|
||||
<a class="pull-right btn btn-success" (click)="openNewSquadForm()">
|
||||
<a class="pull-right btn btn-success" (click)="openNewDecorationForm()">
|
||||
Auszeichnung hinzufügen
|
||||
</a>
|
||||
</div>
|
||||
|
@ -33,11 +33,11 @@
|
|||
<div class="input-group list-header">
|
||||
<input id="search-tasks"
|
||||
type="text" #query class="form-control"
|
||||
(keyup.enter)="findSquads(query.value)"
|
||||
(keyup.enter)="filterDecorations(query.value, fractionRadioSelect)"
|
||||
[formControl]="searchTerm">
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-default" type="button"
|
||||
(click)="findSquads(query.value)">
|
||||
(click)="filterDecorations(query.value, fractionRadioSelect)">
|
||||
Suchen
|
||||
</button>
|
||||
</span>
|
||||
|
|
|
@ -47,7 +47,7 @@ export class DecorationListComponent implements OnInit {
|
|||
|
||||
}
|
||||
|
||||
openNewSquadForm() {
|
||||
openNewDecorationForm() {
|
||||
this.selectedDecorationId = null;
|
||||
this.router.navigate([{outlets: {'right': ['new']}}], {relativeTo: this.route});
|
||||
}
|
||||
|
@ -69,7 +69,7 @@ export class DecorationListComponent implements OnInit {
|
|||
}
|
||||
}
|
||||
|
||||
filterSquadsByFraction(query = '', fractionFilter) {
|
||||
filterDecorations(query, fractionFilter) {
|
||||
this.decorations$ = this.decorationService.findDecorations(query, fractionFilter);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,114 +0,0 @@
|
|||
import {Directive, forwardRef} from '@angular/core';
|
||||
import {AbstractControl, FormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '@angular/forms';
|
||||
import {UserService} from "../services/user-service/user.service";
|
||||
|
||||
export function asyncIfNotBacklogThenAssignee(control): Promise<any> {
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
setTimeout(() => {
|
||||
resolve(ifNotBacklogThanAssignee(control));
|
||||
}, 500);
|
||||
});
|
||||
return promise;
|
||||
}
|
||||
|
||||
export function ifNotBacklogThanAssignee(formGroup: FormControl): { [key: string]: any } {
|
||||
const nameControl = formGroup.get('assignee.name');
|
||||
const stateControl = formGroup.get('state');
|
||||
if (!nameControl || !stateControl) {
|
||||
return null;
|
||||
}
|
||||
if (stateControl.value !== 'BACKLOG' &&
|
||||
(!nameControl.value || nameControl.value === '')) {
|
||||
return {'assigneeRequired': true};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Directive({
|
||||
selector: '[ifNotBacklogThanAssignee]',
|
||||
providers: [
|
||||
{
|
||||
provide: NG_VALIDATORS,
|
||||
useExisting: IfNotBacklogThanAssigneeValidatorDirective, multi: true
|
||||
}]
|
||||
})
|
||||
export class IfNotBacklogThanAssigneeValidatorDirective {
|
||||
|
||||
public validate(formGroup: AbstractControl): { [key: string]: any } {
|
||||
const nameControl = formGroup.get('assignee.name');
|
||||
const stateControl = formGroup.get('state');
|
||||
if (!nameControl || !stateControl) {
|
||||
return null;
|
||||
}
|
||||
if (stateControl.value !== 'BACKLOG' &&
|
||||
(!nameControl.value || nameControl.value === '')) {
|
||||
return {'assigneeRequired': true};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Directive({
|
||||
selector: '[emailValidator]',
|
||||
providers: [{
|
||||
provide: NG_VALIDATORS,
|
||||
useExisting: EmailValidatorDirective, multi: true
|
||||
}]
|
||||
})
|
||||
export class EmailValidatorDirective {
|
||||
validate(control: AbstractControl): { [key: string]: any } {
|
||||
const re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
|
||||
if (!control.value || control.value === '' || re.test(control.value)) {
|
||||
return null;
|
||||
} else {
|
||||
return {'invalidEMail': true};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function emailValidator(control): { [key: string]: any } {
|
||||
return new EmailValidatorDirective().validate(control);
|
||||
}
|
||||
|
||||
export function emailValidator2(control): { [key: string]: any } {
|
||||
const re = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
|
||||
if (!control.value || control.value === '' || re.test(control.value)) {
|
||||
return null;
|
||||
} else {
|
||||
return {'invalidEMail': true};
|
||||
}
|
||||
}
|
||||
|
||||
@Directive({
|
||||
selector: '[pjmUserExistsValidator]',
|
||||
providers: [
|
||||
{
|
||||
provide: NG_ASYNC_VALIDATORS,
|
||||
useExisting: forwardRef(() => UserExistsValidatorDirective), multi: true
|
||||
}
|
||||
]
|
||||
})
|
||||
export class UserExistsValidatorDirective {
|
||||
constructor(private userService: UserService) {
|
||||
}
|
||||
|
||||
// validate(control: AbstractControl): Observable<any> {
|
||||
// return this.userService.checkUserExists(control.value)
|
||||
// .map(userExists => {
|
||||
// return (userExists === false) ? {userNotFound: true} : null;
|
||||
// });
|
||||
// }
|
||||
}
|
||||
|
||||
@Directive({
|
||||
selector: '[emailValidator]',
|
||||
providers: [
|
||||
{provide: NG_VALIDATORS, useValue: emailValidator, multi: true}
|
||||
]
|
||||
})
|
||||
export class EmailValidatorWithFunctionDirective {
|
||||
}
|
||||
|
||||
|
||||
export const APPLICATION_VALIDATORS = [IfNotBacklogThanAssigneeValidatorDirective,
|
||||
EmailValidatorDirective];
|
|
@ -5,19 +5,19 @@
|
|||
<input type="radio" name="fractSelect"
|
||||
[checked]="(fractionRadioSelect == undefined) ? 'true' : 'false'"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
(change)="filterRanksByFraction(query.value)">Alle
|
||||
(change)="filterRanks(query.value, '')">Alle
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="fractSelect" value="blufor"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
#fractRadioBufor
|
||||
(change)="filterRanksByFraction(query.value, fractRadioBufor.value)">NATO
|
||||
(change)="filterRanks(query.value, fractRadioBufor.value)">NATO
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="fractSelect" value="opfor"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
#fractRadioOpfor
|
||||
(change)="filterRanksByFraction(query.value, fractRadioOpfor.value)">CSAT
|
||||
(change)="filterRanks(query.value, fractRadioOpfor.value)">CSAT
|
||||
</label>
|
||||
</form>
|
||||
<a class="pull-right btn btn-success" (click)="openNewRankForm()">
|
||||
|
@ -28,11 +28,11 @@
|
|||
<div class="input-group list-header">
|
||||
<input id="search-tasks"
|
||||
type="text" #query class="form-control"
|
||||
(keyup.enter)="findRanks(query.value)"
|
||||
(keyup.enter)="filterRanks(query.value, fractionRadioSelect)"
|
||||
[formControl]="searchTerm">
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-default" type="button"
|
||||
(click)="findRanks(query.value)">
|
||||
(click)="filterRanks(query.value, fractionRadioSelect)">
|
||||
Suchen
|
||||
</button>
|
||||
</span>
|
||||
|
|
|
@ -57,7 +57,7 @@ export class RankListComponent implements OnInit {
|
|||
this.router.navigate([{outlets: {'right': ['edit', rankId]}}], {relativeTo: this.route});
|
||||
}
|
||||
|
||||
filterRanksByFraction(query = '', fractionFilter) {
|
||||
filterRanks(query, fractionFilter) {
|
||||
this.ranks$ = this.rankService.findRanks(query, fractionFilter);
|
||||
}
|
||||
|
||||
|
|
|
@ -4,19 +4,19 @@
|
|||
<input type="radio" name="fractSelect"
|
||||
[checked]="(fractionRadioSelect == undefined) ? 'true' : 'false'"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
(change)="filterSquadsByFraction(query.value)">Alle
|
||||
(change)="filterSquads(query.value, '')">Alle
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="fractSelect" value="blufor"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
#fractRadioBufor
|
||||
(change)="filterSquadsByFraction(query.value, fractRadioBufor.value)">NATO
|
||||
(change)="filterSquads(query.value, fractRadioBufor.value)">NATO
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="fractSelect" value="opfor"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
#fractRadioOpfor
|
||||
(change)="filterSquadsByFraction(query.value, fractRadioOpfor.value)">CSAT
|
||||
(change)="filterSquads(query.value, fractRadioOpfor.value)">CSAT
|
||||
</label>
|
||||
<a class="pull-right btn btn-success" (click)="openNewSquadForm()">
|
||||
Squad hinzufügen
|
||||
|
@ -26,11 +26,11 @@
|
|||
<div class="input-group search-bar" style="padding-top: 0;">
|
||||
<input id="search-tasks"
|
||||
type="text" #query class="form-control"
|
||||
(keyup.enter)="findSquads(query.value)"
|
||||
(keyup.enter)="filterSquads(query.value, fractionRadioSelect)"
|
||||
[formControl]="searchTerm">
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-default" type="button"
|
||||
(click)="findSquads(query.value)">
|
||||
(click)="filterSquads(query.value, fractionRadioSelect)">
|
||||
Suchen
|
||||
</button>
|
||||
</span>
|
||||
|
|
|
@ -66,7 +66,7 @@ export class SquadListComponent implements OnInit {
|
|||
}
|
||||
}
|
||||
|
||||
filterSquadsByFraction(query = '', fractionFilter) {
|
||||
filterSquads(query = '', fractionFilter) {
|
||||
this.squads$ = this.squadService.findSquads(query, fractionFilter);
|
||||
}
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ export class WarDetailComponent {
|
|||
});
|
||||
}
|
||||
|
||||
filterPlayersByFraction(fraction: string) {
|
||||
filterPlayersByFraction(fraction?: string) {
|
||||
if (fraction) {
|
||||
this.rows = this.war.players.filter((player) => {
|
||||
return player.fraction === fraction;
|
||||
|
|
|
@ -20,7 +20,7 @@ export class WarItemComponent {
|
|||
|
||||
warDelete = new EventEmitter();
|
||||
|
||||
constructor(private loginService: LoginService) {
|
||||
constructor(public loginService: LoginService) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
|
|
|
@ -19,7 +19,7 @@ export class WarListComponent implements OnInit {
|
|||
|
||||
constructor(private warService: WarService,
|
||||
private campaignService: CampaignService,
|
||||
private loginService: LoginService,
|
||||
public loginService: LoginService,
|
||||
private router: Router,
|
||||
private route: ActivatedRoute) {
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ export class WarSubmitComponent {
|
|||
constructor(private route: ActivatedRoute,
|
||||
private router: Router,
|
||||
private warService: WarService,
|
||||
private campaignService: CampaignService) {
|
||||
public campaignService: CampaignService) {
|
||||
}
|
||||
|
||||
fileChange(event) {
|
||||
|
|
|
@ -4,26 +4,26 @@
|
|||
<input type="radio" name="fractSelect"
|
||||
[checked]="(fractionRadioSelect == undefined) ? 'true' : 'false'"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
(change)="filterUsersByFraction(query.value)">Alle
|
||||
(change)="filterUser(query.value, '')">Alle
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="fractSelect" value="blufor"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
#fractRadioBufor
|
||||
(change)="filterUsersByFraction(query.value, fractRadioBufor.value)">NATO
|
||||
(change)="filterUser(query.value, fractRadioBufor.value)">NATO
|
||||
</label>
|
||||
<label class="radio-inline">
|
||||
<input type="radio" name="fractSelect" value="opfor"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
#fractRadioOpfor
|
||||
(change)="filterUsersByFraction(query.value, fractRadioOpfor.value)">CSAT
|
||||
(change)="filterUser(query.value, fractRadioOpfor.value)">CSAT
|
||||
</label>
|
||||
<br>
|
||||
<label class="radio-inline" style="padding-top: 8px;">
|
||||
<input type="radio" name="fractSelect" value="unassigned"
|
||||
[(ngModel)]="fractionRadioSelect"
|
||||
#fractRadioUnassigned
|
||||
(change)="filterUsersByFraction(query.value, fractRadioUnassigned.value)">Ohne Squad
|
||||
(change)="filterUser(query.value, fractRadioUnassigned.value)">Ohne Squad
|
||||
</label>
|
||||
<a class="pull-right btn btn-success" (click)="openNewUserForm()">
|
||||
Teilnehmer hinzufügen
|
||||
|
@ -33,11 +33,11 @@
|
|||
<div class="input-group list-header">
|
||||
<input id="search-tasks"
|
||||
type="text" #query class="form-control"
|
||||
(keyup.enter)="findUsers(query.value)"
|
||||
(keyup.enter)="filterUser(query.value, fractionRadioSelect)"
|
||||
[formControl]="searchTerm">
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-default" type="button"
|
||||
(click)="findUsers(query.value)">
|
||||
(click)="filterUser(query.value, fractionRadioSelect)">
|
||||
Suchen
|
||||
</button>
|
||||
</span>
|
||||
|
|
|
@ -70,7 +70,7 @@ export class UserListComponent implements OnInit {
|
|||
}
|
||||
}
|
||||
|
||||
filterUsersByFraction(query = '', fractionFilter) {
|
||||
filterUser(query, fractionFilter) {
|
||||
this.users$ = this.userService.findUsers(query, fractionFilter);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue