Add squad module; reformat

pull/7/head
Florian Hartwich 2017-09-03 12:49:59 +02:00
parent 711e82e6cc
commit 91c9986be7
48 changed files with 164 additions and 132 deletions

View File

@ -4,12 +4,12 @@
cd $(dirname $0) cd $(dirname $0)
# array of files to minify # array of files to minify
FILES=(inline main polyfills scripts styles vendor) FILES=(inline.bundle main.bundle polyfills.bundle scripts.bundle styles.bundle vendor.bundle 0.chunk 1.chunk 2.chunk 3.chunk 4.chunk 5.chunk 6.chunk 7.chunk)
OPTIONS="-c toplevel,dead_code=true,unused=true" OPTIONS="-c toplevel,dead_code=true,unused=true"
for i in "${FILES[@]}" for i in "${FILES[@]}"
do do
echo "minify ${i} ..." echo "minify ${i} ..."
$(npm bin)/uglifyjs public/${i}.bundle.js ${OPTIONS} -o public/${i}.bundle.js $(npm bin)/uglifyjs public/${i}.js ${OPTIONS} -o public/${i}.js
rm -f public/${i}.bundle.js.map rm -f public/${i}.js.map
done done

View File

@ -1,4 +1,4 @@
import {browser, element, by} from 'protractor'; import {browser, by, element} from 'protractor';
describe('Main Page Access', function () { describe('Main Page Access', function () {

View File

@ -29,7 +29,8 @@ exports.config = {
jasmineNodeOpts: { jasmineNodeOpts: {
showColors: true, showColors: true,
defaultTimeoutInterval: 30000, defaultTimeoutInterval: 30000,
print: function() {} print: function () {
}
}, },
useAllAngular2AppRoots: true, useAllAngular2AppRoots: true,
beforeLaunch: function () { beforeLaunch: function () {

View File

@ -17,7 +17,8 @@ exports.config= {
jasmineNodeOpts: { jasmineNodeOpts: {
showColors: true, showColors: true,
defaultTimeoutInterval: 30000, defaultTimeoutInterval: 30000,
print: function() {} print: function () {
}
}, },
beforeLaunch: function () { beforeLaunch: function () {
require('ts-node').register({ require('ts-node').register({

View File

@ -47,11 +47,19 @@ unprocessed-child:hover {
/* Safari 4.0 - 8.0 */ /* Safari 4.0 - 8.0 */
@-webkit-keyframes color-blink { @-webkit-keyframes color-blink {
from {background-color: #222222;} from {
to {background-color: orange;} background-color: #222222;
}
to {
background-color: orange;
}
} }
@keyframes color-blink { @keyframes color-blink {
from {background-color: #222222;} from {
to {background-color: orange;} background-color: #222222;
}
to {
background-color: orange;
}
} }

View File

@ -53,17 +53,21 @@
</ul> </ul>
</li> </li>
<li *ngIf="loginService.hasPermission(2) && loginService.hasSquad()" class="dropdown"> <li *ngIf="loginService.hasPermission(2) && loginService.hasSquad()" class="dropdown">
<a href="#" [ngClass]="{'unprocessed': promotionService.hasUnprocessedPromotion || awardingService.hasUnprocessedAwards}" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" <a href="#"
[ngClass]="{'unprocessed': promotionService.hasUnprocessedPromotion || awardingService.hasUnprocessedAwards}"
class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false"> aria-expanded="false">
Anträge Anträge
<span class="caret"></span> <span class="caret"></span>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li> <li>
<a [ngClass]="{'unprocessed-child': promotionService.hasUnprocessedPromotion}" routerLink="{{config.request}}/{{config.confirmPromotionPath}}">Beförderung</a> <a [ngClass]="{'unprocessed-child': promotionService.hasUnprocessedPromotion}"
routerLink="{{config.request}}/{{config.confirmPromotionPath}}">Beförderung</a>
</li> </li>
<li> <li>
<a [ngClass]="{'unprocessed-child': awardingService.hasUnprocessedAwards}" routerLink="{{config.request}}/{{config.confirmAwardPath}}">Orden/ Auszeichnung</a> <a [ngClass]="{'unprocessed-child': awardingService.hasUnprocessedAwards}"
routerLink="{{config.request}}/{{config.confirmAwardPath}}">Orden/ Auszeichnung</a>
</li> </li>
</ul> </ul>
</li> </li>

View File

@ -1,4 +1,4 @@
import {Component, Inject, Optional} from '@angular/core'; import {Component} from '@angular/core';
import {Router} from '@angular/router'; import {Router} from '@angular/router';
import {LoginService} from './services/login-service/login-service'; import {LoginService} from './services/login-service/login-service';
import {PromotionService} from "./services/promotion-service/promotion.service"; import {PromotionService} from "./services/promotion-service/promotion.service";

View File

@ -1,4 +1,3 @@
export class AppConfig { export class AppConfig {
public readonly apiUrl = '/api'; public readonly apiUrl = '/api';

View File

@ -8,7 +8,6 @@ import {SquadService} from "./services/squad-service/squad.service";
import {SquadStore} from "./services/stores/squad.store"; import {SquadStore} from "./services/stores/squad.store";
import {DecorationStore} from "./services/stores/decoration.store"; import {DecorationStore} from "./services/stores/decoration.store";
import {DecorationService} from "./services/decoration-service/decoration.service"; import {DecorationService} from "./services/decoration-service/decoration.service";
import {SquadItemComponent} from "./squads/squad-list/squad-item.component";
import {RankStore} from "./services/stores/rank.store"; import {RankStore} from "./services/stores/rank.store";
import {RankService} from "./services/rank-service/rank.service"; import {RankService} from "./services/rank-service/rank.service";
import {AppConfig} from "./app.config"; import {AppConfig} from "./app.config";
@ -43,8 +42,7 @@ import {BrowserAnimationsModule} from "@angular/platform-browser/animations";
], ],
declarations: [ declarations: [
AppComponent, AppComponent,
routingComponents, routingComponents],
SquadItemComponent],
bootstrap: [AppComponent] bootstrap: [AppComponent]
}) })
export class AppModule { export class AppModule {

View File

@ -2,7 +2,6 @@ import {RouterModule, Routes} from "@angular/router";
import {LoginComponent} from "./login/index"; import {LoginComponent} from "./login/index";
import {NotFoundComponent} from "./common/not-found/not-found.component"; import {NotFoundComponent} from "./common/not-found/not-found.component";
import {LoginGuardAdmin, LoginGuardHL, LoginGuardMT, LoginGuardSQL} from "./login/login.guard"; import {LoginGuardAdmin, LoginGuardHL, LoginGuardMT, LoginGuardSQL} from "./login/login.guard";
import {squadsRoutes, squadsRoutingComponents} from "./squads/squads.routing";
import {armyRoutes, armyRoutingComponents} from "./army/army.routing"; import {armyRoutes, armyRoutingComponents} from "./army/army.routing";
import {SignupComponent} from "./login/signup.component"; import {SignupComponent} from "./login/signup.component";
import {RouteConfig} from "./app.config"; import {RouteConfig} from "./app.config";
@ -20,8 +19,12 @@ export const appRoutes: Routes = [
{path: RouteConfig.request, loadChildren: './request/request.module#RequestModule'}, {path: RouteConfig.request, loadChildren: './request/request.module#RequestModule'},
{path: RouteConfig.userPath, loadChildren: './users/users.module#UsersModule', canActivate: [LoginGuardHL]}, {path: RouteConfig.userPath, loadChildren: './users/users.module#UsersModule', canActivate: [LoginGuardHL]},
{path: RouteConfig.squadPath, children: squadsRoutes, canActivate: [LoginGuardHL]}, {path: RouteConfig.squadPath, loadChildren: './squads/squads.module#SquadsModule', canActivate: [LoginGuardHL]},
{path: RouteConfig.decorationPath, loadChildren: './decorations/decoration.module#DecorationsModule', canActivate: [LoginGuardHL]}, {
path: RouteConfig.decorationPath,
loadChildren: './decorations/decoration.module#DecorationsModule',
canActivate: [LoginGuardHL]
},
{path: RouteConfig.rankPath, loadChildren: './ranks/ranks.module#RanksModule', canActivate: [LoginGuardHL]}, {path: RouteConfig.rankPath, loadChildren: './ranks/ranks.module#RanksModule', canActivate: [LoginGuardHL]},
{path: RouteConfig.adminPanelPath, loadChildren: './admin/admin.module#AdminModule', canActivate: [LoginGuardAdmin]}, {path: RouteConfig.adminPanelPath, loadChildren: './admin/admin.module#AdminModule', canActivate: [LoginGuardAdmin]},
@ -33,6 +36,6 @@ export const appRoutes: Routes = [
export const appRouting = RouterModule.forRoot(appRoutes); export const appRouting = RouterModule.forRoot(appRoutes);
export const routingComponents = [LoginComponent, SignupComponent, ...armyRoutingComponents, NotFoundComponent, ...squadsRoutingComponents]; export const routingComponents = [LoginComponent, SignupComponent, ...armyRoutingComponents, NotFoundComponent];
export const routingProviders = [LoginGuardSQL, LoginGuardHL, LoginGuardMT, LoginGuardAdmin]; export const routingProviders = [LoginGuardSQL, LoginGuardHL, LoginGuardMT, LoginGuardAdmin];

View File

@ -3,7 +3,7 @@ import {User} from "../models/model-interfaces";
import {ActivatedRoute, Router} from "@angular/router"; import {ActivatedRoute, Router} from "@angular/router";
import {UserService} from "../services/user-service/user.service"; import {UserService} from "../services/user-service/user.service";
import {Subscription} from "rxjs/Subscription"; import {Subscription} from "rxjs/Subscription";
import {AppConfig, RouteConfig} from "../app.config"; import {RouteConfig} from "../app.config";
@Component({ @Component({

View File

@ -16,7 +16,8 @@
</div> </div>
<div class=" div-table-row" style="padding-left: 8px"> <div class=" div-table-row" style="padding-left: 8px">
<div *ngFor="let member of squad.members"> <div *ngFor="let member of squad.members">
<div class="member-link text-blufor" (click)="select(member._id)">{{member.rank}} {{member.username}}</div> <div class="member-link text-blufor" (click)="select(member._id)">{{member.rank}} {{member.username}}
</div>
</div> </div>
<br> <br>
<br> <br>

View File

@ -1,5 +1,5 @@
import {Component, Input, Optional} from '@angular/core'; import {Component, Input} from '@angular/core';
import {NgForm, FormGroup} from '@angular/forms'; import {FormGroup, NgForm} from '@angular/forms';
@Component({ @Component({
selector: 'show-error', selector: 'show-error',

View File

@ -79,6 +79,10 @@
} }
@keyframes spin { @keyframes spin {
0% { transform: rotate(0deg); } 0% {
100% { transform: rotate(360deg); } transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
} }

View File

@ -1,5 +1,5 @@
import {Injectable} from '@angular/core'; import {Injectable} from '@angular/core';
import {Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router'; import {ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot} from '@angular/router';
@Injectable() @Injectable()
export class LoginGuardSQL implements CanActivate { export class LoginGuardSQL implements CanActivate {

View File

@ -1,11 +1,6 @@
import {Directive, forwardRef} from '@angular/core'; import {Directive, forwardRef} from '@angular/core';
import { import {AbstractControl, FormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS} from '@angular/forms';
FormControl,
AbstractControl,
NG_VALIDATORS, NG_ASYNC_VALIDATORS
} from '@angular/forms';
import {UserService} from "../services/user-service/user.service"; import {UserService} from "../services/user-service/user.service";
import {Observable} from "rxjs";
export function asyncIfNotBacklogThenAssignee(control): Promise<any> { export function asyncIfNotBacklogThenAssignee(control): Promise<any> {
const promise = new Promise((resolve, reject) => { const promise = new Promise((resolve, reject) => {

View File

@ -28,11 +28,13 @@ export interface Player {
respawn?: number; respawn?: number;
flagTouch?: number; flagTouch?: number;
} }
export interface Campaign { export interface Campaign {
_id?: string; _id?: string;
title?: string; title?: string;
wars?: War[]; wars?: War[];
} }
export interface War { export interface War {
_id?: string; _id?: string;
title?: string; title?: string;

View File

@ -1,5 +1,4 @@
import {Component} from "@angular/core"; import {Component} from "@angular/core";
import {ActivatedRoute, Router} from "@angular/router";
import {Promotion, Rank} from "../../models/model-interfaces"; import {Promotion, Rank} from "../../models/model-interfaces";
import {RankService} from "../../services/rank-service/rank.service"; import {RankService} from "../../services/rank-service/rank.service";
import {PromotionService} from "../../services/promotion-service/promotion.service"; import {PromotionService} from "../../services/promotion-service/promotion.service";

View File

@ -1,8 +1,7 @@
import {Injectable} from "@angular/core"; import {Injectable} from "@angular/core";
import {AppUser, User} from "../../models/model-interfaces"; import {AppUser} from "../../models/model-interfaces";
import {URLSearchParams} from "@angular/http";
import {Observable} from "rxjs/Observable"; import {Observable} from "rxjs/Observable";
import {ADD, EDIT, LOAD, REMOVE} from "../stores/user.store"; import {EDIT, LOAD, REMOVE} from "../stores/user.store";
import {AppConfig} from "../../app.config"; import {AppConfig} from "../../app.config";
import {HttpClient} from "../http-client"; import {HttpClient} from "../http-client";
import {AppUserStore} from "../stores/app-user.store"; import {AppUserStore} from "../stores/app-user.store";

View File

@ -1,7 +1,6 @@
import {Injectable} from "@angular/core"; import {Injectable} from "@angular/core";
import {Headers, Http, RequestMethod} from "@angular/http"; import {Headers, Http, RequestMethod} from "@angular/http";
import {Router} from "@angular/router"; import {Router} from "@angular/router";
import {LoginService} from "./login-service/login-service";
@Injectable() @Injectable()
export class HttpClient { export class HttpClient {

View File

@ -3,7 +3,7 @@ import {Squad} from "../../models/model-interfaces";
import {RequestMethod, RequestOptions, URLSearchParams} from "@angular/http"; import {RequestMethod, RequestOptions, URLSearchParams} from "@angular/http";
import {Observable} from "rxjs/Observable"; import {Observable} from "rxjs/Observable";
import {SquadStore, ADD, EDIT, LOAD, REMOVE} from "../stores/squad.store"; import {ADD, EDIT, LOAD, REMOVE, SquadStore} from "../stores/squad.store";
import {AppConfig} from "../../app.config"; import {AppConfig} from "../../app.config";
import {HttpClient} from "../http-client"; import {HttpClient} from "../http-client";

View File

@ -1,5 +1,5 @@
import {BehaviorSubject} from "rxjs/BehaviorSubject"; import {BehaviorSubject} from "rxjs/BehaviorSubject";
import {AppUser, User} from "../../models/model-interfaces"; import {AppUser} from "../../models/model-interfaces";
export const LOAD = 'LOAD'; export const LOAD = 'LOAD';
export const ADD = 'ADD'; export const ADD = 'ADD';

View File

@ -7,6 +7,7 @@ export const REMOVE = 'REMOVE';
type Id = string | number; type Id = string | number;
interface Identifiable { interface Identifiable {
id?: Id; id?: Id;
} }

View File

@ -0,0 +1,15 @@
import {NgModule} from '@angular/core';
import {CommonModule} from "@angular/common";
import {SharedModule} from "../shared.module";
import {squadRouterModule, squadsRoutingComponents} from "./squads.routing";
import {SquadStore} from "../services/stores/squad.store";
import {SquadService} from "../services/squad-service/squad.service";
@NgModule({
declarations: squadsRoutingComponents,
imports: [CommonModule, SharedModule, squadRouterModule],
providers: [SquadStore, SquadService]
})
export class SquadsModule {
static routes = squadRouterModule;
}

View File

@ -1,7 +1,9 @@
import {Routes} from "@angular/router"; import {RouterModule, Routes} from "@angular/router";
import {SquadComponent} from "./squads.component"; import {SquadComponent} from "./squads.component";
import {SquadListComponent} from "./squad-list/squad-list.component"; import {SquadListComponent} from "./squad-list/squad-list.component";
import {EditSquadComponent} from "./edit-squad/edit-squad.component"; import {EditSquadComponent} from "./edit-squad/edit-squad.component";
import {ModuleWithProviders} from "@angular/core";
import {SquadItemComponent} from "./squad-list/squad-item.component";
export const squadsRoutes: Routes = [{ export const squadsRoutes: Routes = [{
path: '', component: SquadComponent, path: '', component: SquadComponent,
@ -23,5 +25,7 @@ export const squadsRoutes: Routes = [{
outlet: 'right' outlet: 'right'
}]; }];
export const squadsRoutingComponents = [SquadComponent, SquadListComponent, EditSquadComponent]; export const squadRouterModule: ModuleWithProviders = RouterModule.forChild(squadsRoutes);
export const squadsRoutingComponents = [SquadComponent, SquadItemComponent, SquadListComponent, EditSquadComponent];

View File

@ -1,7 +1,6 @@
import {Component} from "@angular/core"; import {Component} from "@angular/core";
import {ActivatedRoute, Router} from "@angular/router"; import {ActivatedRoute} from "@angular/router";
import {WarService} from "../../services/war-service/war.service"; import {WarService} from "../../services/war-service/war.service";
import {LoginService} from "../../services/login-service/login-service";
import {Player, War} from "../../models/model-interfaces"; import {Player, War} from "../../models/model-interfaces";

View File

@ -10,7 +10,8 @@
</div> </div>
<div class="col-xs-3"> <div class="col-xs-3">
<span (click)="delete(); $event.stopPropagation()" title="Löschen" class="glyphicon glyphicon-trash trash" *ngIf="loginService.hasPermission(3)"></span> <span (click)="delete(); $event.stopPropagation()" title="Löschen" class="glyphicon glyphicon-trash trash"
*ngIf="loginService.hasPermission(3)"></span>
</div> </div>
</div> </div>

View File

@ -12,7 +12,8 @@
</div> </div>
<div class="col-sm-4"> <div class="col-sm-4">
<span (click)="delete(); $event.stopPropagation()" title="Löschen" class="glyphicon glyphicon-trash trash pull-right"></span> <span (click)="delete(); $event.stopPropagation()" title="Löschen"
class="glyphicon glyphicon-trash trash pull-right"></span>
<span (click)="award(); $event.stopPropagation()" title="Auszeichnungen" class="icon-award pull-right"></span> <span (click)="award(); $event.stopPropagation()" title="Auszeichnungen" class="icon-award pull-right"></span>
</div> </div>
</div> </div>

View File

@ -1,4 +1,3 @@
export const environment = { export const environment = {
production: false, production: false,
e2eMode: true e2eMode: true

View File

@ -13,11 +13,9 @@
* *
* Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
*/ */
/*************************************************************************************************** /***************************************************************************************************
* BROWSER POLYFILLS * BROWSER POLYFILLS
*/ */
/** IE9, IE10 and IE11 requires all of the following polyfills. **/ /** IE9, IE10 and IE11 requires all of the following polyfills. **/
// import 'core-js/es6/symbol'; // import 'core-js/es6/symbol';
// import 'core-js/es6/object'; // import 'core-js/es6/object';
@ -32,31 +30,21 @@
// import 'core-js/es6/regexp'; // import 'core-js/es6/regexp';
// import 'core-js/es6/map'; // import 'core-js/es6/map';
// import 'core-js/es6/set'; // import 'core-js/es6/set';
/** IE10 and IE11 requires the following for NgClass support on SVG elements */ /** IE10 and IE11 requires the following for NgClass support on SVG elements */
// import 'classlist.js'; // Run `npm install --save classlist.js`. // import 'classlist.js'; // Run `npm install --save classlist.js`.
/** IE10 and IE11 requires the following to support `@angular/animation`. */ /** IE10 and IE11 requires the following to support `@angular/animation`. */
// import 'web-animations-js'; // Run `npm install --save web-animations-js`. // import 'web-animations-js'; // Run `npm install --save web-animations-js`.
/** Evergreen browsers require these. **/ /** Evergreen browsers require these. **/
import 'core-js/es6/reflect'; import 'core-js/es6/reflect';
import 'core-js/es7/reflect'; import 'core-js/es7/reflect';
/** ALL Firefox browsers require the following to support `@angular/animation`. **/ /** ALL Firefox browsers require the following to support `@angular/animation`. **/
// import 'web-animations-js'; // Run `npm install --save web-animations-js`. // import 'web-animations-js'; // Run `npm install --save web-animations-js`.
/*************************************************************************************************** /***************************************************************************************************
* Zone JS is required by Angular itself. * Zone JS is required by Angular itself.
*/ */
import 'zone.js/dist/zone'; // Included with Angular CLI. import 'zone.js/dist/zone'; // Included with Angular CLI.
/*************************************************************************************************** /***************************************************************************************************
* APPLICATION IMPORTS * APPLICATION IMPORTS
*/ */

View File

@ -47,6 +47,7 @@ form {
padding-right: 10px; padding-right: 10px;
} }
#right { #right {
overflow: hidden; overflow: hidden;
padding-left: 4%; padding-left: 4%;

View File

@ -10,17 +10,15 @@ import 'zone.js/dist/fake-async-test';
import 'rxjs/Rx'; import 'rxjs/Rx';
import {getTestBed} from '@angular/core/testing'; import {getTestBed} from '@angular/core/testing';
import { import {BrowserDynamicTestingModule, platformBrowserDynamicTesting} from '@angular/platform-browser-dynamic/testing';
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. // Unfortunately there's no typing for the `__karma__` variable. Just declare it as any.
declare var __karma__: any; declare var __karma__: any;
declare var require: any; declare var require: any;
// Prevent Karma from running prematurely. // Prevent Karma from running prematurely.
__karma__.loaded = function () {}; __karma__.loaded = function () {
};
// First, initialize the Angular testing environment. // First, initialize the Angular testing environment.
getTestBed().initTestEnvironment( getTestBed().initTestEnvironment(

View File

@ -12,7 +12,10 @@
"curly": true, "curly": true,
"eofline": true, "eofline": true,
"forin": true, "forin": true,
"import-blacklist": [true, "rxjs"], "import-blacklist": [
true,
"rxjs"
],
"import-spacing": true, "import-spacing": true,
"indent": [ "indent": [
true, true,
@ -97,9 +100,18 @@
"check-separator", "check-separator",
"check-type" "check-type"
], ],
"directive-selector": [
"directive-selector": [true, "attribute", "app", "camelCase"], true,
"component-selector": [true, "element", "app", "kebab-case"], "attribute",
"app",
"camelCase"
],
"component-selector": [
true,
"element",
"app",
"kebab-case"
],
"use-input-property-decorator": true, "use-input-property-decorator": true,
"use-output-property-decorator": true, "use-output-property-decorator": true,
"use-host-property-decorator": true, "use-host-property-decorator": true,