diff --git a/.gitignore b/.gitignore index 1217825..33bef2c 100644 --- a/.gitignore +++ b/.gitignore @@ -44,7 +44,8 @@ Thumbs.db .directory # Internal Data -/public +public/ +mongodb-data/ resource/ backup/ diff --git a/package.json b/package.json index 346f498..4ee7696 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "opt-cc", - "version": "1.6.3", + "version": "1.6.4", "license": "MIT", "author": "Florian Hartwich ", "private": true, diff --git a/static/src/app/app.component.html b/static/src/app/app.component.html index c3cc9d9..6d4433a 100644 --- a/static/src/app/app.component.html +++ b/static/src/app/app.component.html @@ -96,6 +96,6 @@ diff --git a/static/src/app/app.routing.ts b/static/src/app/app.routing.ts index c9ed43c..06eecf2 100644 --- a/static/src/app/app.routing.ts +++ b/static/src/app/app.routing.ts @@ -58,14 +58,14 @@ export const appRoutes: Routes = [ }, /** Redirect Configuration **/ - { - path: '404', - component: NotFoundComponent - }, - { - path: '**', - redirectTo: '/404' - } // always configure this last - first matching route gets processed + // { + // path: '404', + // component: NotFoundComponent + // }, + // { + // path: '**', + // redirectTo: '/404' + // } // always configure this last - first matching route gets processed ]; export const appRouting = RouterModule.forRoot(appRoutes); diff --git a/static/src/app/statistic/stats.routing.ts b/static/src/app/statistic/stats.routing.ts index dbc6951..a1e914a 100644 --- a/static/src/app/statistic/stats.routing.ts +++ b/static/src/app/statistic/stats.routing.ts @@ -8,6 +8,7 @@ import {WarItemComponent} from "./war-list/war-item.component"; import {ModuleWithProviders} from "@angular/core"; import {CampaignSubmitComponent} from "./campaign-submit/campaign-submit.component"; import {CampaignPlayerDetailComponent} from "./campaign-player-detail/campaign-player-detail.component"; +import {WarDetailHeaderComponent} from "./war-detail-header/war-detail-header.component"; export const statsRoutes: Routes = [{ @@ -36,7 +37,7 @@ export const statsRoutes: Routes = [{ }, { path: 'war/:id', - component: WarDetailComponent, + component: WarDetailHeaderComponent, outlet: 'right' }, { @@ -48,5 +49,6 @@ export const statsRoutes: Routes = [{ export const statsRouterModule: ModuleWithProviders = RouterModule.forChild(statsRoutes); export const statsRoutingComponents = [StatisticComponent, StatisticOverviewComponent, CampaignSubmitComponent, - WarListComponent, WarSubmitComponent, WarDetailComponent, CampaignPlayerDetailComponent, WarItemComponent]; + WarListComponent, WarSubmitComponent, WarDetailHeaderComponent, WarDetailComponent, CampaignPlayerDetailComponent, + WarItemComponent]; diff --git a/static/src/app/statistic/war-detail-header/war-detail-header.component.css b/static/src/app/statistic/war-detail-header/war-detail-header.component.css new file mode 100644 index 0000000..d727ec1 --- /dev/null +++ b/static/src/app/statistic/war-detail-header/war-detail-header.component.css @@ -0,0 +1,15 @@ +.war-header-container { + width: 920px; + min-height: 205px; + margin: auto; +} + +.head-field { + font-size: 24px; + margin-top: 10px; + margin-bottom: 10px; +} + +.war-header { + border-bottom: thin solid lightgrey; +} diff --git a/static/src/app/statistic/war-detail-header/war-detail-header.component.html b/static/src/app/statistic/war-detail-header/war-detail-header.component.html new file mode 100644 index 0000000..a5c31c3 --- /dev/null +++ b/static/src/app/statistic/war-detail-header/war-detail-header.component.html @@ -0,0 +1,66 @@ +
+
+

{{war.title}} - vom {{war.date | date: 'dd.MM.yyyy'}}

+
+

Endpunktestand:

+ {{fraction.BLUFOR}} {{war.ptBlufor}} + | + {{war.ptOpfor}} {{fraction.OPFOR}} +
+ +
+

Teilnehmer:

+ + +
+ +
+ Logfile + anzeigen +
+ + + +
+
+
+
+ + + + + + +
diff --git a/static/src/app/statistic/war-detail-header/war-detail-header.component.ts b/static/src/app/statistic/war-detail-header/war-detail-header.component.ts new file mode 100644 index 0000000..f17b40c --- /dev/null +++ b/static/src/app/statistic/war-detail-header/war-detail-header.component.ts @@ -0,0 +1,49 @@ +import {Component} from "@angular/core"; +import {ActivatedRoute} from "@angular/router"; +import {WarService} from "../../services/logs/war.service"; +import {War} from "../../models/model-interfaces"; +import {ChartUtils} from "../../utils/chart-utils"; +import {Fraction} from "../../utils/fraction.enum"; + + +@Component({ + selector: 'war-detail-header', + templateUrl: './war-detail-header.component.html', + styleUrls: ['./war-detail-header.component.css', '../../style/list-entry.css', '../../style/hide-scrollbar.css'] +}) +export class WarDetailHeaderComponent { + + readonly fraction = Fraction; + + war: War; + + fractionFilterSelected: string; + + playerChart: any[] = []; + + colorScheme = { + domain: [Fraction.COLOR_OPFOR, Fraction.COLOR_BLUFOR] + }; + + constructor(private route: ActivatedRoute, + private warService: WarService) { + } + + ngOnInit() { + this.route.params + .map(params => params['id']) + .filter(id => id != undefined) + .flatMap(id => this.warService.getWar(id)) + .subscribe(war => { + this.war = war; + this.fractionFilterSelected = undefined; + this.playerChart = ChartUtils.getSingleDataArray(Fraction.OPFOR, war.playersOpfor, Fraction.BLUFOR, war.playersBlufor); + Object.assign(this, [this.playerChart]); + }) + } + + filterPlayersByFraction(fraction?: string) { + this.fractionFilterSelected = fraction; + } + +} diff --git a/static/src/app/statistic/war-detail/war-detail.component.css b/static/src/app/statistic/war-detail/war-detail.component.css index ac69342..5716be4 100644 --- a/static/src/app/statistic/war-detail/war-detail.component.css +++ b/static/src/app/statistic/war-detail/war-detail.component.css @@ -34,27 +34,6 @@ font-weight: bold; } -/* ########### TABS ########### */ - -:host /deep/ .nav-tabs { - padding-left: 35% !important; -} - -:host /deep/ .nav-link { - background: #4b4b4b; - color: white; -} - -:host /deep/ .nav-link:hover { - background: #afafaf; - color: #000; -} - -:host /deep/ .nav-tabs > li.active > a { - background: #222222; - color: white; -} - /* ########### DATATABLE ########### */ :host /deep/ .datatable-header { diff --git a/static/src/app/statistic/war-detail/war-detail.component.html b/static/src/app/statistic/war-detail/war-detail.component.html index 306a641..3a1b31e 100644 --- a/static/src/app/statistic/war-detail/war-detail.component.html +++ b/static/src/app/statistic/war-detail/war-detail.component.html @@ -1,63 +1,7 @@
-
-
-
-

{{war.title}} - vom {{war.date | date: 'dd.MM.yyyy'}}

-
-

Endpunktestand:

- {{fraction.BLUFOR}} {{war.ptBlufor}} - | - {{war.ptOpfor}} {{fraction.OPFOR}} -
-
-

Teilnehmer:

- - -
- -
- Logfile anzeigen -
- - - -
-
-
-
-
- - - - - Scoreboard - -
-
- - - Fraktionen - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + -
- - - - - - - - -
+ + + + + + + + + + + + + + + + + -
- - -
- -
- - -
-
- - - - - - -
+ + + + + + + + + + + + + + + + +
diff --git a/static/src/app/statistic/war-detail/war-detail.component.ts b/static/src/app/statistic/war-detail/war-detail.component.ts index 99b39d2..cdea6c5 100644 --- a/static/src/app/statistic/war-detail/war-detail.component.ts +++ b/static/src/app/statistic/war-detail/war-detail.component.ts @@ -1,18 +1,13 @@ -/// -import {Component, ElementRef, ViewChild} from "@angular/core"; +import {Component, ElementRef, SimpleChanges, ViewChild} from "@angular/core"; import {ActivatedRoute, Router} from "@angular/router"; -import {WarService} from "../../services/logs/war.service"; import {War} from "../../models/model-interfaces"; -import {LogsService} from "../../services/logs/logs.service"; -import {TabsetComponent} from "ngx-bootstrap"; -import * as d3 from "d3"; -import {ChartUtils} from "../../utils/chart-utils"; import {Fraction} from "../../utils/fraction.enum"; @Component({ selector: 'war-detail', templateUrl: './war-detail.component.html', + inputs: ['war', 'fractionFilterSelected'], styleUrls: ['./war-detail.component.css', '../../style/list-entry.css', '../../style/hide-scrollbar.css'] }) export class WarDetailComponent { @@ -21,21 +16,9 @@ export class WarDetailComponent { @ViewChild('overview') private overviewContainer: ElementRef; - @ViewChild('staticTabs') staticTabs: TabsetComponent; + war: War; - war: War = {players: []}; - - logData: any; - - initialized: any; - - startDateObj: Date; - - public chartSelectModel: string; - - fractionRadioSelect: string; - - playerChart: any[] = []; + fractionFilterSelected: string; cellHeight = 40; @@ -48,80 +31,35 @@ export class WarDetailComponent { sortDescending: 'glyphicon glyphicon-triangle-bottom', }; - lineChartData: any[] = []; - areaChartData: any[] = []; - - tmpPointData; - tmpBudgetData; - tmpKillData; - tmpFrienlyFireData; - tmpTransportData; - tmpReviveData; - tmpStabilizeData; - tmpFlagCaptureData; - - colorScheme = { - domain: [Fraction.COLOR_BLUFOR, Fraction.COLOR_OPFOR] - }; - - labelPoints = 'Punkte'; - labelBudget = 'Budget'; - labelKill = 'Kills'; - labelFriendlyFire = 'FriendlyFire'; - labelTransport = 'Lufttransport'; - labelRevive = 'Revive'; - labelStabilize = 'Stabilisiert'; - labelFlag = 'Flaggenbesitz'; - lineChartLabel: string = this.labelPoints; - - showLineChart = true; - stepCurve = d3.curveStepAfter; - gradient = false; - yAxis = true; - xAxis = true; - legend = false; - legendTitle = false; - showXAxisLabel = false; - showYAxisLabel = true; - autoscale = true; - timeline = false; - roundDomains = true; - constructor(private route: ActivatedRoute, - private router: Router, - private warService: WarService, - private logsService: LogsService) { + private router: Router) { } ngOnInit() { - this.route.params - .map(params => params['id']) - .filter(id => id != undefined) - .flatMap(id => this.warService.getWar(id)) - .subscribe(war => { - this.war = war; - this.rows = war.players; - this.playerChart = ChartUtils.getSingleDataArray(Fraction.OPFOR, war.playersOpfor, Fraction.BLUFOR, war.playersBlufor); + } - this.initialized = { - basic: false, - budget: false, - kill: false, - revive: false, - transport: false, - flag: false - }; - Object.assign(this, [this.playerChart, this.lineChartData, this.areaChartData]); - this.chartSelectModel = this.labelPoints; + selectPlayerDetail(player) { + if (player && player.selected && player.selected.length > 0) { + this.router.navigate(['../../campaign-player/' + this.war.campaign + '/' + player.selected[0].name], + {relativeTo: this.route}); + } + } - this.startDateObj = new Date(this.war.date); - this.startDateObj.setHours(0); - this.startDateObj.setMinutes(1); + ngOnChanges(changes: SimpleChanges) { + if (changes.war) { + this.rows = changes.war.currentValue.players; + } + if (changes.fractionFilterSelected) { + this.filterPlayersByFraction(this.fractionFilterSelected) + } + this.scrollOverviewTop(); + } - this.fractionRadioSelect = undefined; - this.staticTabs.tabs[0].active = true; - this.scrollOverviewTop(); - }); + scrollOverviewTop() { + try { + this.overviewContainer.nativeElement.scrollTop = 0; + } catch (err) { + } } filterPlayersByFraction(fraction?: string) { @@ -134,272 +72,4 @@ export class WarDetailComponent { } } - selectChart() { - if (this.chartSelectModel !== this.labelFlag) { - this.showLineChart = true; - this.lineChartLabel = this.chartSelectModel; - switch (this.chartSelectModel) { - case this.labelPoints: - this.lineChartData = this.tmpPointData; - break; - case this.labelBudget: - this.initBudgetData(); - this.lineChartData = this.tmpBudgetData; - break; - case this.labelKill: - this.initKillData(); - this.lineChartData = this.tmpKillData; - break; - case this.labelFriendlyFire: - this.initKillData(); - this.lineChartData = this.tmpFrienlyFireData; - break; - case this.labelRevive: - this.initRevive(); - this.lineChartData = this.tmpReviveData; - break; - case this.labelStabilize: - this.initRevive(); - this.lineChartData = this.tmpStabilizeData; - break; - case this.labelTransport: - this.initTransportData(); - this.lineChartData = this.tmpTransportData; - break; - } - } else { - this.initFlagHoldData(); - this.showLineChart = false; - this.areaChartData = this.tmpFlagCaptureData; - } - } - - selectPlayerDetail(player) { - if (player && player.selected && player.selected.length > 0) { - this.router.navigate(['../../campaign-player/' + this.war.campaign + '/' + player.selected[0].name], - {relativeTo: this.route}); - } - } - - scrollOverviewTop() { - try { - this.overviewContainer.nativeElement.scrollTop = 0; - } catch (err) { - } - } - - loadFractionData() { - if (this.initialized.basic) { - return; - } - - this.initializeTempCollections(); - - this.logsService.getFullLog(this.war._id).subscribe((data) => { - this.logData = data; - this.initPointData(); - this.showLineChart = true; - this.lineChartLabel = this.labelPoints; - this.lineChartData = this.tmpPointData; - this.initialized.basic = true; - }); - } - - initPointData() { - this.logData.points.forEach(pointEntry => { - this.tmpPointData[0].series.push(ChartUtils.getSeriesEntry(new Date(pointEntry.time), pointEntry.ptBlufor)); - this.tmpPointData[1].series.push(ChartUtils.getSeriesEntry(new Date(pointEntry.time), pointEntry.ptOpfor)); - }); - this.addFinalTimeData(this.tmpPointData); - } - - initBudgetData() { - if (this.initialized.budget) { - return; - } - this.logData.budget.forEach(budgetEntry => { - const budgetEntryDate = new Date(budgetEntry.time); - const fractionChange = budgetEntry.fraction === 'BLUFOR' ? 0 : 1; - const fractionOld = budgetEntry.fraction !== 'BLUFOR' ? 0 : 1; - - if (WarDetailComponent.isTwoMinutesAhead(budgetEntryDate, this.tmpBudgetData)) { - this.tmpBudgetData[fractionChange].series.push(ChartUtils.getSeriesEntry(new Date(budgetEntry.time), budgetEntry.newBudget)); - this.tmpBudgetData[fractionOld].series.push(ChartUtils.getSeriesEntry(new Date(budgetEntry.time), - this.tmpBudgetData[fractionOld].series[this.tmpBudgetData[fractionOld].series.length - 1].value)); - } - }); - this.addFinalTimeData(this.tmpBudgetData); - this.initialized.budget = true; - } - - initKillData() { - if (this.initialized.kill) { - return; - } - let killCountBlufor = 0, killCountOpfor = 0, ffKillCountBlufor = 0, ffKillCountOpfor = 0; - - for (const {killEntry, index} of this.logData.kill.map((killEntry, index) => ({killEntry, index}))) { - const killEntryDate = new Date(killEntry.time); - if (killEntry.friendlyFire === false) { - if (killEntry.fraction === 'BLUFOR') { - killCountBlufor++; - } - if (killEntry.fraction === 'OPFOR') { - killCountOpfor++; - } - if (WarDetailComponent.isTwoMinutesAhead(killEntryDate, this.tmpKillData)) { - this.tmpKillData[0].series.push(ChartUtils.getSeriesEntry(killEntryDate, killCountBlufor)); - this.tmpKillData[1].series.push(ChartUtils.getSeriesEntry(killEntryDate, killCountOpfor)); - } - } else { - if (killEntry.fraction === 'BLUFOR') { - ffKillCountBlufor++; - } - if (killEntry.fraction === 'OPFOR') { - ffKillCountOpfor++; - } - if (WarDetailComponent.isTwoMinutesAhead(killEntryDate, this.tmpFrienlyFireData)) { - this.tmpFrienlyFireData[0].series.push(ChartUtils.getSeriesEntry(killEntryDate, ffKillCountBlufor)); - this.tmpFrienlyFireData[1].series.push(ChartUtils.getSeriesEntry(killEntryDate, ffKillCountOpfor)); - } - } - if (index === this.logData.kill.length - 1) { - this.tmpKillData[0].series.push(ChartUtils.getSeriesEntry(killEntryDate, killCountBlufor)); - this.tmpKillData[1].series.push(ChartUtils.getSeriesEntry(killEntryDate, killCountOpfor)); - this.tmpFrienlyFireData[0].series.push(ChartUtils.getSeriesEntry(killEntryDate, ffKillCountBlufor)); - this.tmpFrienlyFireData[1].series.push(ChartUtils.getSeriesEntry(killEntryDate, ffKillCountOpfor)); - } - } - - this.addFinalTimeData(this.tmpKillData); - this.addFinalTimeData(this.tmpFrienlyFireData) - this.initialized.kill = true; - } - - initRevive() { - if (this.initialized.revive) { - return; - } - let reviveCountBlufor = 0, reviveCountOpfor = 0, stabilizeCountBlufor = 0, stabilizeCountOpfor = 0; - for (const {reviveEntry, index} of this.logData.revive.map((reviveEntry, index) => ({reviveEntry, index}))) { - const reviveEntryDate = new Date(reviveEntry.time); - if (reviveEntry.stabilized === false) { - if (reviveEntry.fraction === 'BLUFOR') { - reviveCountBlufor++; - } else { - reviveCountOpfor++; - } - if (WarDetailComponent.isTwoMinutesAhead(reviveEntryDate, this.tmpReviveData)) { - this.tmpReviveData[0].series.push(ChartUtils.getSeriesEntry(reviveEntryDate, reviveCountBlufor)); - this.tmpReviveData[1].series.push(ChartUtils.getSeriesEntry(reviveEntryDate, reviveCountOpfor)); - } - } else { - if (reviveEntry.fraction === 'BLUFOR') { - stabilizeCountBlufor++; - } else { - stabilizeCountOpfor++; - } - if (WarDetailComponent.isTwoMinutesAhead(reviveEntryDate, this.tmpStabilizeData)) { - this.tmpStabilizeData[0].series.push(ChartUtils.getSeriesEntry(reviveEntryDate, stabilizeCountBlufor)); - this.tmpStabilizeData[1].series.push(ChartUtils.getSeriesEntry(reviveEntryDate, stabilizeCountOpfor)); - } - } - if (index === this.logData.revive.length - 1) { - this.tmpReviveData[0].series.push(ChartUtils.getSeriesEntry(reviveEntryDate, reviveCountBlufor)); - this.tmpReviveData[1].series.push(ChartUtils.getSeriesEntry(reviveEntryDate, reviveCountOpfor)); - this.tmpStabilizeData[0].series.push(ChartUtils.getSeriesEntry(reviveEntryDate, stabilizeCountBlufor)); - this.tmpStabilizeData[1].series.push(ChartUtils.getSeriesEntry(reviveEntryDate, stabilizeCountOpfor)); - } - } - this.addFinalTimeData(this.tmpReviveData); - this.addFinalTimeData(this.tmpStabilizeData); - this.initialized.revive = true; - } - - initTransportData() { - if (this.initialized.transport) { - return; - } - let transportCountBlufor = 0, transportCountOpfor = 0; - for (const {transportEntry, index} of this.logData.transport.map((transportEntry, index) => ({ - transportEntry, - index - }))) { - const transportEntryDate = new Date(transportEntry.time); - if (transportEntry.fraction === 'BLUFOR') { - transportCountBlufor++; - } else { - transportCountOpfor++; - } - if (WarDetailComponent.isTwoMinutesAhead(transportEntryDate, this.tmpTransportData) || index === this.logData.transport.length - 1) { - this.tmpTransportData[0].series.push(ChartUtils.getSeriesEntry(transportEntryDate, transportCountBlufor)); - this.tmpTransportData[1].series.push(ChartUtils.getSeriesEntry(transportEntryDate, transportCountOpfor)); - } - } - this.addFinalTimeData(this.tmpTransportData); - this.initialized.transport = true; - - } - - initFlagHoldData() { - if (this.initialized.flag) { - return; - } - let flagStatusBlufor = true; - let flagStatusOpfor = true; - this.tmpFlagCaptureData[0].series.push(ChartUtils.getSeriesEntry(this.startDateObj, flagStatusBlufor)); - this.tmpFlagCaptureData[1].series.push(ChartUtils.getSeriesEntry(this.startDateObj, flagStatusOpfor)); - - this.logData.flag.forEach(flagEntry => { - if (flagEntry.flagFraction === 'BLUFOR') { - flagStatusBlufor = !flagEntry.capture; - } else { - flagStatusOpfor = !flagEntry.capture; - } - this.tmpFlagCaptureData[flagEntry.flagFraction === 'BLUFOR' ? 0 : 1].series.push( - ChartUtils.getSeriesEntry(new Date(flagEntry.time), flagEntry.flagFraction === 'BLUFOR' ? flagStatusBlufor : flagStatusOpfor) - ) - }); - - this.addFinalTimeData(this.tmpFlagCaptureData); - this.initialized.flag = true; - } - - private static isTwoMinutesAhead(entryDate: Date, tmpData: any): boolean { - return entryDate.getTime() >= tmpData[0].series[tmpData[0].series.length - 1].name.getTime() + (1.5 * 60000) - } - - initializeTempCollections() { - this.tmpPointData = ChartUtils.getMultiDataArray(Fraction.BLUFOR, Fraction.OPFOR); - this.tmpBudgetData = ChartUtils.getMultiDataArray(Fraction.BLUFOR, Fraction.OPFOR); - this.tmpKillData = ChartUtils.getMultiDataArray(Fraction.BLUFOR, Fraction.OPFOR); - this.tmpFrienlyFireData = ChartUtils.getMultiDataArray(Fraction.BLUFOR, Fraction.OPFOR); - this.tmpTransportData = ChartUtils.getMultiDataArray(Fraction.BLUFOR, Fraction.OPFOR); - this.tmpReviveData = ChartUtils.getMultiDataArray(Fraction.BLUFOR, Fraction.OPFOR); - this.tmpStabilizeData = ChartUtils.getMultiDataArray(Fraction.BLUFOR, Fraction.OPFOR); - this.tmpFlagCaptureData = ChartUtils.getMultiDataArray(Fraction.BLUFOR, Fraction.OPFOR); - - [this.tmpKillData, this.tmpFrienlyFireData, this.tmpReviveData, this.tmpStabilizeData, this.tmpTransportData].forEach(tmp => { - [0, 1].forEach(index => { - tmp[index].series.push(ChartUtils.getSeriesEntry(this.startDateObj, 0)); - }) - }); - this.tmpBudgetData[0].series.push(ChartUtils.getSeriesEntry(this.startDateObj, this.war.budgetBlufor)); - this.tmpBudgetData[1].series.push(ChartUtils.getSeriesEntry(this.startDateObj, this.war.budgetOpfor)); - } - - addFinalTimeData(tmpCollection) { - const endDate = new Date(this.war.endDate); - if (tmpCollection === this.tmpBudgetData) { - this.tmpBudgetData[0].series.push(ChartUtils.getSeriesEntry(endDate, this.war.endBudgetBlufor)); - this.tmpBudgetData[1].series.push(ChartUtils.getSeriesEntry(endDate, this.war.endBudgetOpfor)); - } else { - for (let j in [0, 1]) { - if (tmpCollection[j].series[tmpCollection[j].series.length - 1].name < endDate) { - tmpCollection[j].series.push(ChartUtils.getSeriesEntry(endDate, tmpCollection[j].series[tmpCollection[j].series.length - 1].value)); - } - } - } - } - } diff --git a/static/src/app/statistic/war-list/war-list.component.ts b/static/src/app/statistic/war-list/war-list.component.ts index f109160..4f6eb9a 100644 --- a/static/src/app/statistic/war-list/war-list.component.ts +++ b/static/src/app/statistic/war-list/war-list.component.ts @@ -82,7 +82,6 @@ export class WarListComponent implements OnInit { if (confirm('Soll die Kampagne ' + campaign.title + ' wirklich gelöscht werden?')) { this.campaignService.deleteCampaign(campaign._id) .subscribe((res) => { - console.log(res) if (this.selectedWarId === campaign._id) { this.selectOverview('all'); } diff --git a/static/src/styles.css b/static/src/styles.css index ab03687..1eda07a 100644 --- a/static/src/styles.css +++ b/static/src/styles.css @@ -47,3 +47,11 @@ form { #right { overflow: hidden; } + +#right-top { + overflow: hidden; +} + +#right-bottom { + overflow: hidden; +}