Merge pull request #6146 from tsiegleauq/angular12

Update to Angular12
This commit is contained in:
Sean 2021-07-13 14:36:38 +02:00 committed by GitHub
commit 18f2e3326d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
267 changed files with 29186 additions and 9065 deletions

7
client/.browserslistrc Normal file
View File

@ -0,0 +1,7 @@
last 1 Chrome version
last 1 Firefox version
last 2 Edge major versions
last 2 Safari major versions
last 2 iOS major versions
Firefox ESR
not IE 11

View File

@ -22,7 +22,6 @@
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"aot": true,
"assets": [
"src/assets",
"src/manifest.json",
@ -43,7 +42,13 @@
"node_modules/video.js/dist/video.min.js",
"src/assets/jitsi/external_api.js"
],
"webWorkerTsConfig": "tsconfig.worker.json"
"webWorkerTsConfig": "tsconfig.worker.json",
"vendorChunk": true,
"extractLicenses": false,
"buildOptimizer": false,
"sourceMap": true,
"optimization": false,
"namedChunks": true
},
"configurations": {
"production": {
@ -56,9 +61,7 @@
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
@ -83,13 +86,14 @@
}
],
"tsConfig": "./tsconfig-es5.app.json"
}
}
},
"development": {}
},
"defaultConfiguration": "production"
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "client:build"
},
"configurations": {
"production": {
@ -97,8 +101,12 @@
},
"es5": {
"browserTarget": "client:build:es5"
},
"development": {
"browserTarget": "client:build:development"
}
}
},
"defaultConfiguration": "development"
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
@ -147,14 +155,17 @@
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "client:serve"
"protractorConfig": "e2e/protractor.conf.js"
},
"configurations": {
"production": {
"devServerTarget": "client:serve:production"
},
"development": {
"devServerTarget": "client:serve:development"
}
}
},
"defaultConfiguration": "development"
}
}
}

View File

@ -1,9 +0,0 @@
# This file is currently used by autoprefixer to adjust CSS to support the below specified browsers
# For additional information regarding the format and rule options, please see:
# https://github.com/browserslist/browserslist#queries
# For IE 9-11 support, please uncomment the last line of the file and adjust as needed
> 0.5%
last 2 versions
Firefox ESR
not dead
IE 9-11

View File

@ -6,7 +6,7 @@ RUN useradd -m openslides
RUN chown -R openslides /build/app
USER root
RUN npm install -g @angular/cli@^10
RUN npm install -g @angular/cli@^12
RUN ng config -g cli.warnings.versionMismatch false
USER openslides

View File

@ -9,19 +9,25 @@ module.exports = function (config) {
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('karma-coverage'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
jasmine: {
timeoutInterval: 10000
}
// you can add configuration options for Jasmine here
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
// for example, you can disable the random execution with `random: false`
// or set a specific seed with `seed: 4321`
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../coverage'),
reports: ['html', 'lcovonly'],
fixWebpackSourcePaths: true
},
jasmineHtmlReporter: {
suppressAll: true // removes the duplicated traces
},
coverageReporter: {
dir: require('path').join(__dirname, './coverage/Test'),
subdir: '.',
reporters: [{ type: 'html' }, { type: 'text-summary' }]
},
reporters: ['progress', 'kjhtml'],
port: 9876,
@ -36,11 +42,6 @@ module.exports = function (config) {
}
},
singleRun: false,
proxies: {
'/apps/': 'http://localhost:8000/apps/',
'/media/': 'http://localhost:8000/media/',
'/rest/': 'http://localhost:8000/rest/',
'/ws/': 'ws://localhost:8000/'
}
restartOnFileChange: true
});
};

34481
client/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "OpenSlides3-Client",
"version": "3.3.0",
"version": "3.4.0",
"repository": {
"type": "git",
"url": "git://github.com/OpenSlides/OpenSlides.git"
@ -10,14 +10,15 @@
"README": "https://github.com/OpenSlides/OpenSlides/blob/master/client/README.md",
"scripts": {
"ng": "ng",
"start": "ng serve --proxy-config proxy.conf.json --host=0.0.0.0",
"start-https": "ng serve --ssl --ssl-cert localhost.pem --ssl-key localhost-key.pem --proxy-config proxy.conf.json --host=0.0.0.0",
"start-es5": "ng serve --proxy-config proxy.conf.json --host=0.0.0.0 --configuration es5",
"build": "ng build --prod",
"ng-high-memory": "node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng",
"start": "npm run ng-high-memory -- serve --proxy-config proxy.conf.json --host=0.0.0.0",
"start-https": "npm run ng-high-memory -- serve --ssl --ssl-cert localhost.pem --ssl-key localhost-key.pem --proxy-config proxy.conf.json --host=0.0.0.0",
"start-es5": "npm run ng-high-memory -- serve --proxy-config proxy.conf.json --host=0.0.0.0 --configuration es5",
"build": "npm run ng-high-memory -- build --configuration production",
"build-to-dir": "npm run build -- --output-path",
"postinstall": "ngcc",
"build-debug": "ng build",
"test": "ng test",
"build-debug": "npm run ng-high-memory -- build",
"test": "npm run ng-high-memory -- test",
"test-silently": "npm run test -- --watch=false --no-progress --browsers=ChromeHeadlessNoSandbox",
"test-live": "npm run test -- --watch=true --browsers=ChromeHeadlessNoSandbox",
"lint-check": "ng lint",
@ -35,27 +36,27 @@
"cleanup-win": "npm run prettify-write & npm run lint-write"
},
"dependencies": {
"@angular/animations": "~10.0.14",
"@angular/cdk": "~10.0.0",
"@angular/cdk-experimental": "~10.0.0",
"@angular/common": "~10.0.14",
"@angular/compiler": "~10.0.14",
"@angular/core": "~10.0.14",
"@angular/forms": "~10.0.14",
"@angular/material": "~10.0.0",
"@angular/material-moment-adapter": "~10.1.3",
"@angular/platform-browser": "~10.0.14",
"@angular/platform-browser-dynamic": "~10.0.14",
"@angular/router": "~10.0.14",
"@angular/service-worker": "~10.0.14",
"@ngx-pwa/local-storage": "~10.0.1",
"@angular/animations": "~12.1.1",
"@angular/cdk": "~12.1.1",
"@angular/cdk-experimental": "~12.1.1",
"@angular/common": "~12.1.1",
"@angular/compiler": "~12.1.1",
"@angular/core": "~12.1.1",
"@angular/forms": "~12.1.1",
"@angular/material": "~12.1.1",
"@angular/material-moment-adapter": "~12.1.1",
"@angular/platform-browser": "~12.1.1",
"@angular/platform-browser-dynamic": "~12.1.1",
"@angular/router": "~12.1.1",
"@angular/service-worker": "~12.1.1",
"@ngx-pwa/local-storage": "~12.0.0",
"@ngx-translate/core": "~13.0.0",
"@ngx-translate/http-loader": "^6.0.0",
"@pebula/ngrid": "2.0.0",
"@pebula/ngrid-material": "2.0.0",
"@pebula/ngrid": "4.0.0-alpha.3",
"@pebula/ngrid-material": "4.0.0-alpha.3",
"@pebula/utils": "1.0.2",
"@tinymce/tinymce-angular": "^4.1.0",
"@videojs/http-streaming": "^1.13.3",
"@tinymce/tinymce-angular": "^4.2.4",
"@videojs/http-streaming": "^2.9.1",
"acorn": "^8.0.1",
"chart.js": "^2.9.3",
"core-js": "^3.6.5",
@ -64,14 +65,14 @@
"file-saver": "^2.0.2",
"jszip": "^3.5.0",
"lz4js": "^0.2.0",
"material-icon-font": "git+https://github.com/petergng/materialIconFont.git",
"material-design-icons-iconfont": "6.1.0",
"moment": "^2.27.0",
"ng-particles": "^2.6.0",
"ng2-charts": "^2.4.0",
"ng2-pdf-viewer": "^6.4.1",
"ngx-device-detector": "^2.0.0",
"ngx-file-drop": "^9.0.1",
"ngx-mat-select-search": "^3.0.3",
"ngx-file-drop": "^11.1.0",
"ngx-mat-select-search": "^3.3.0",
"ngx-material-timepicker": "^5.5.3",
"ngx-papaparse": "^4.0.4",
"pdfjs-dist": "2.5.207",
@ -79,41 +80,38 @@
"po2json": "^1.0.0-beta-2",
"rxjs": "^6.6.2",
"tinymce": "5.7.1",
"tslib": "^1.10.0",
"tslib": "^2.0.0",
"tsparticles": "^1.23.0",
"video.js": "^7.8.4",
"zone.js": "~0.10.2"
"zone.js": "~0.11.4"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.1000.8",
"@angular-devkit/schematics": "^10.0.8",
"@angular/cli": "~10.0.8",
"@angular/compiler-cli": "~10.0.14",
"@angular/language-service": "~10.0.14",
"@biesbjerg/ngx-translate-extract": "^7.0.2",
"@angular-devkit/build-angular": "~12.1.1",
"@angular-devkit/schematics": "^12.1.1",
"@angular/cli": "~12.1.1",
"@angular/compiler-cli": "~12.1.1",
"@angular/language-service": "~12.1.1",
"@biesbjerg/ngx-translate-extract": "^7.0.4",
"@biesbjerg/ngx-translate-extract-marker": "^1.0.0",
"@compodoc/compodoc": "^1.1.11",
"@compodoc/compodoc": "^1.0.9",
"@schematics/angular": "^10.0.8",
"@types/jasmine": "^3.5.14",
"@types/jasminewd2": "^2.0.6",
"@types/jasmine": "~3.6.0",
"@types/node": "^14.6.2",
"@types/yargs": "^15.0.4",
"codelyzer": "^6.0.0",
"husky": "^4.2.3",
"jasmine-core": "~3.6.0",
"jasmine-spec-reporter": "~5.0.1",
"karma": "^5.1.1",
"jasmine-core": "~3.8.0",
"karma": "^6.3.4",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage-istanbul-reporter": "^3.0.3",
"karma-jasmine": "~4.0.1",
"karma-jasmine-html-reporter": "^1.4.0",
"npm-license-crawler": "^0.2.1",
"prettier": "~2.1.1",
"karma-coverage": "~2.0.3",
"karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.5.0",
"prettier": "2.3.2",
"protractor": "^7.0.0",
"resize-observer-polyfill": "^1.5.1",
"ts-node": "~9.0.0",
"tslint": "~6.1.3",
"tsutils": "3.17.1",
"typescript": "~3.9.7"
"typescript": "~4.3.5"
}
}

View File

@ -36,7 +36,7 @@ const routes: Route[] = [
];
@NgModule({
imports: [RouterModule.forRoot(routes, { onSameUrlNavigation: 'reload' })],
imports: [RouterModule.forRoot(routes, { onSameUrlNavigation: 'reload', relativeLinkResolution: 'legacy' })],
exports: [RouterModule]
})
export class AppRoutingModule {}

View File

@ -442,7 +442,7 @@ export class PdfDocumentService {
const isIE = /msie\s|trident\//i.test(window.navigator.userAgent);
if (typeof Worker !== 'undefined' && !isIE) {
this.pdfWorker = new Worker('./pdf-worker.worker', {
this.pdfWorker = new Worker(new URL('./pdf-worker.worker', import.meta.url), {
type: 'module'
});

View File

@ -36,9 +36,8 @@ export abstract class BaseIsAgendaItemAndListOfSpeakersContentObjectRepository<
T extends TitleInformationWithAgendaItem
>
extends BaseRepository<V, M, T>
implements
IBaseIsAgendaItemContentObjectRepository<V, M, T>,
IBaseIsListOfSpeakersContentObjectRepository<V, M, T> {
implements IBaseIsAgendaItemContentObjectRepository<V, M, T>, IBaseIsListOfSpeakersContentObjectRepository<V, M, T>
{
protected extendRelations(): void {
this.relationDefinitions.push({
type: 'M2O',

View File

@ -43,7 +43,8 @@ export abstract class BaseIsAgendaItemContentObjectRepository<
T extends TitleInformationWithAgendaItem
>
extends BaseRepository<V, M, T>
implements IBaseIsAgendaItemContentObjectRepository<V, M, T> {
implements IBaseIsAgendaItemContentObjectRepository<V, M, T>
{
public constructor(
DS: DataStoreService,
dataSend: DataSendService,

View File

@ -40,7 +40,8 @@ export abstract class BaseIsListOfSpeakersContentObjectRepository<
T extends TitleInformation
>
extends BaseRepository<V, M, T>
implements IBaseIsListOfSpeakersContentObjectRepository<V, M, T> {
implements IBaseIsListOfSpeakersContentObjectRepository<V, M, T>
{
public constructor(
DS: DataStoreService,
dataSend: DataSendService,

View File

@ -31,7 +31,8 @@ export interface NestedModelDescriptors {
}
export abstract class BaseRepository<V extends BaseViewModel & T, M extends BaseModel, T extends TitleInformation>
implements OnAfterAppsLoaded, Collection, HasViewModelListObservable<V> {
implements OnAfterAppsLoaded, Collection, HasViewModelListObservable<V>
{
/**
* Stores all the viewModel in an object
*/

View File

@ -890,28 +890,19 @@ export class MotionRepositoryService extends BaseIsAgendaItemAndListOfSpeakersCo
}
return amendmentParagraphs
?.map(
(newText: string, paraNo: number): DiffLinesInParagraph => {
?.map((newText: string, paraNo: number): DiffLinesInParagraph => {
if (baseParagraphs[paraNo] === undefined) {
throw new Error(
this.translate.instant('Inconsistent data.') +
' ' +
this.translate.instant(
'An amendment is probably referring to a non-existant line number.'
)
this.translate.instant('An amendment is probably referring to a non-existant line number.')
);
} else if (newText !== null) {
return this.diff.getAmendmentParagraphsLines(
paraNo,
baseParagraphs[paraNo],
newText,
lineLength
);
return this.diff.getAmendmentParagraphsLines(paraNo, baseParagraphs[paraNo], newText, lineLength);
} else {
return null; // Nothing has changed in this paragraph
}
}
)
})
.map((diffLines: DiffLinesInParagraph, paraNo: number) => {
// If nothing has changed and we want to keep unchanged paragraphs for the context,
// return the original text in "textPre"
@ -969,8 +960,7 @@ export class MotionRepositoryService extends BaseIsAgendaItemAndListOfSpeakersCo
const changedAmendmentParagraphs = this.applyChangesToAmendment(amendment, lineLength, changeRecos, false);
return changedAmendmentParagraphs
?.map(
(newText: string, paraNo: number): ViewMotionAmendedParagraph => {
?.map((newText: string, paraNo: number): ViewMotionAmendedParagraph => {
if (newText === null) {
return null;
}
@ -978,9 +968,7 @@ export class MotionRepositoryService extends BaseIsAgendaItemAndListOfSpeakersCo
console.error(
this.translate.instant('Inconsistent data.') +
' ' +
this.translate.instant(
'An amendment is probably referring to a non-existant line number.'
)
this.translate.instant('An amendment is probably referring to a non-existant line number.')
);
return null;
}
@ -998,8 +986,7 @@ export class MotionRepositoryService extends BaseIsAgendaItemAndListOfSpeakersCo
const affectedConsolidated = this.diff.diffHtmlToFinalText(affectedDiff);
return new ViewMotionAmendedParagraph(amendment, paraNo, affectedConsolidated, affectedLines);
}
)
})
.filter((para: ViewMotionAmendedParagraph) => para !== null);
}

View File

@ -233,7 +233,7 @@ export abstract class BaseImportService<M extends BaseModel> {
/**
* Trigger for executing the import.
*/
public abstract async doImport(): Promise<void>;
public abstract doImport(): Promise<void>;
/**
* counts the amount of duplicates that have no decision on the action to

View File

@ -121,7 +121,7 @@ export abstract class BaseSortListService<V extends BaseViewModel> extends BaseS
/**
* Enforce children to implement a method that returns the fault sorting
*/
protected abstract async getDefaultDefinition(): Promise<OsSortingDefinition<V>>;
protected abstract getDefaultDefinition(): Promise<OsSortingDefinition<V>>;
/**
* Defines the sorting properties, and returns an observable with sorted data

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -9,11 +9,13 @@ describe('FullscreenProjectorComponent', () => {
let component: FullscreenProjectorComponent;
let fixture: ComponentFixture<FullscreenProjectorComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule, FullscreenProjectorModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(FullscreenProjectorComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { FormBuilder } from '@angular/forms';
import { E2EImportsModule } from 'e2e-imports.module';
@ -9,11 +9,13 @@ describe('AgendaContentObjectFormComponent', () => {
let component: AgendaContentObjectFormComponent;
let fixture: ComponentFixture<AgendaContentObjectFormComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(AgendaContentObjectFormComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('AssignmentPollDetailContentComponent', () => {
let component: AssignmentPollDetailContentComponent;
let fixture: ComponentFixture<AssignmentPollDetailContentComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(AssignmentPollDetailContentComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('AttachmentControlComponent', () => {
let component: AttachmentControlComponent;
let fixture: ComponentFixture<AttachmentControlComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(AttachmentControlComponent);

View File

@ -1,4 +1,4 @@
@import '~@angular/material/theming';
@use '~@angular/material' as mat;
/** Custom component theme. Only lives in a specific scope */
@mixin os-banner-style($theme) {
@ -6,6 +6,6 @@
/** style for the offline-banner */
.banner {
background: mat-color($accent, 500);
background: mat.get-color-from-palette($accent, 500);
}
}

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('BannerComponent', () => {
let component: BannerComponent;
let fixture: ComponentFixture<BannerComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(BannerComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,12 +8,14 @@ describe('BlockTileComponent', () => {
let component: BlockTileComponent;
let fixture: ComponentFixture<BlockTileComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
// declarations: [BlockTileComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(BlockTileComponent);

View File

@ -1,4 +1,4 @@
import { async, TestBed } from '@angular/core/testing';
import { TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -6,11 +6,13 @@ describe('ChartsComponent', () => {
// let component: ChartsComponent;
// let fixture: ComponentFixture<ChartsComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
// fixture = TestBed.createComponent(ChartsComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('CheckInputComponent', () => {
let component: CheckInputComponent;
let fixture: ComponentFixture<CheckInputComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(CheckInputComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { E2EImportsModule } from 'e2e-imports.module';
@ -9,7 +9,8 @@ describe('ChoiceDialogComponent', () => {
let component: ChoiceDialogComponent;
let fixture: ComponentFixture<ChoiceDialogComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
providers: [
@ -20,7 +21,8 @@ describe('ChoiceDialogComponent', () => {
}
]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(ChoiceDialogComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { CountdownTimeComponent } from './countdown-time.component';
import { E2EImportsModule } from '../../../../e2e-imports.module';
@ -7,11 +7,13 @@ describe('CountdownTimeComponent', () => {
let component: CountdownTimeComponent;
let fixture: ComponentFixture<CountdownTimeComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(CountdownTimeComponent);

View File

@ -0,0 +1,29 @@
<h2 mat-dialog-title>{{ caption | translate }}</h2>
<mat-dialog-content>
<ng-container *ngIf="partnerName">
<div class="space">
<div class="coin info-coin thisPlayer"></div>
<span>{{ getPlayerName() }}</span>
</div>
<div>
<div class="coin info-coin partner"></div>
<span>{{ partnerName }}</span>
</div>
</ng-container>
<table [class]="disableBoard ? 'disabled' : ''" id="c4">
<tr *ngFor="let row of [5, 4, 3, 2, 1, 0]">
<td *ngFor="let col of [0, 1, 2, 3, 4, 5, 6]">
<div [class]="getCoinClass(row, col)" (click)="clickField(row, col)"></div>
</td>
</tr>
</table>
<div class="center">
<button (click)="handleEvent('searchClicked')" *ngIf="state === 'start'" mat-raised-button color="accent">
{{ 'Search player' | translate }}
</button>
</div>
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button mat-dialog-close>{{ 'Close' | translate }}</button>
</mat-dialog-actions>

View File

@ -0,0 +1,51 @@
span {
font-size: 20px;
padding-left: 10px;
}
.center {
text-align: center;
}
.space {
margin-bottom: 5px;
}
#c4 {
background-color: yellow;
padding: 10px;
margin: 15px auto;
}
#c4.disabled {
background-color: grey;
}
#c4 td {
width: 50px;
height: 50px;
}
#c4 .notSelected {
cursor: pointer;
background-color: white;
}
#c4.disabled .notSelected {
cursor: auto;
}
.thisPlayer {
background-color: blue;
}
#c4.disabled .thisPlayer {
background-color: #8888ff;
}
.partner {
background-color: red;
}
#c4.disabled .partner {
background-color: #ff8888;
}
.coin {
border-radius: 50%;
width: 100%;
height: 100%;
}
.coin.info-coin {
display: inline-block;
width: 20px;
height: 20px;
}

View File

@ -62,97 +62,8 @@ type StateMachine = { [state in State]?: { [event in StateEvent]?: SMAction } };
@Component({
selector: 'os-c4dialog',
template: `
<h2 mat-dialog-title>{{ caption | translate }}</h2>
<mat-dialog-content>
<ng-container *ngIf="partnerName">
<div class="space">
<div class="coin info-coin thisPlayer"></div>
<span>{{ getPlayerName() }}</span>
</div>
<div>
<div class="coin info-coin partner"></div>
<span>{{ partnerName }}</span>
</div>
</ng-container>
<table [class]="disableBoard ? 'disabled' : ''" id="c4">
<tr *ngFor="let row of [5, 4, 3, 2, 1, 0]">
<td *ngFor="let col of [0, 1, 2, 3, 4, 5, 6]">
<div [class]="getCoinClass(row, col)" (click)="clickField(row, col)"></div>
</td>
</tr>
</table>
<div class="center">
<button
(click)="handleEvent('searchClicked')"
*ngIf="state === 'start'"
mat-raised-button
color="accent"
>
{{ 'Search player' | translate }}
</button>
</div>
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button mat-dialog-close>{{ 'Close' | translate }}</button>
</mat-dialog-actions>
`,
styles: [
`
span {
font-size: 20px;
padding-left: 10px;
}
.center {
text-align: center;
}
.space {
margin-bottom: 5px;
}
#c4 {
background-color: yellow;
padding: 10px;
margin: 15px auto;
}
#c4.disabled {
background-color: grey;
}
#c4 td {
width: 50px;
height: 50px;
}
#c4 .notSelected {
cursor: pointer;
background-color: white;
}
#c4.disabled .notSelected {
cursor: auto;
}
.thisPlayer {
background-color: blue;
}
#c4.disabled .thisPlayer {
background-color: #8888ff;
}
.partner {
background-color: red;
}
#c4.disabled .partner {
background-color: #ff8888;
}
.coin {
border-radius: 50%;
width: 100%;
height: 100%;
}
.coin.info-coin {
display: inline-block;
width: 20px;
height: 20px;
}
`
]
templateUrl: './copyright-sign.component.html',
styleUrls: ['./copyright-sign.component.scss']
})
export class C4DialogComponent implements OnInit, OnDestroy {
/**
@ -577,8 +488,7 @@ export class C4DialogComponent implements OnInit, OnDestroy {
@Component({
selector: 'os-copyright-sign',
template: ` <span (click)="launchC4($event)">©</span> `,
styles: [``]
template: ` <span (click)="launchC4($event)">©</span> `
})
export class CopyrightSignComponent {
private clickTimeout: number | null;

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('ExtensionFieldComponent', () => {
let component: ExtensionFieldComponent;
let fixture: ComponentFixture<ExtensionFieldComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(ExtensionFieldComponent);

View File

@ -1,5 +1,3 @@
@import '~@angular/material/theming';
@mixin os-global-spinner-theme($theme) {
.spinner-container {
display: flex;

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('GlobalSpinnerComponent', () => {
let component: GlobalSpinnerComponent;
let fixture: ComponentFixture<GlobalSpinnerComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(GlobalSpinnerComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,12 +8,14 @@ describe('GridLayoutComponent', () => {
let component: GridLayoutComponent;
let fixture: ComponentFixture<GridLayoutComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
// declarations: [GridLayoutComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(GridLayoutComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from '../../../../e2e-imports.module';
import { HeadBarComponent } from './head-bar.component';
@ -7,11 +7,13 @@ describe('HeadBarComponent', () => {
let component: HeadBarComponent;
let fixture: ComponentFixture<HeadBarComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(HeadBarComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('IconContainerComponent', () => {
let component: IconContainerComponent;
let fixture: ComponentFixture<IconContainerComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(IconContainerComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from '../../../../e2e-imports.module';
import { LegalNoticeContentComponent } from './legal-notice-content.component';
@ -7,11 +7,13 @@ describe('LegalNoticeComponent', () => {
let component: LegalNoticeContentComponent;
let fixture: ComponentFixture<LegalNoticeContentComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(LegalNoticeContentComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('ListOfSpeakersContentComponent', () => {
let component: ListOfSpeakersContentComponent;
let fixture: ComponentFixture<ListOfSpeakersContentComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(ListOfSpeakersContentComponent);

View File

@ -1,4 +1,4 @@
@import '~@angular/material/theming';
@use '~@angular/material' as mat;
@mixin os-list-view-table-theme($theme) {
$primary: map-get($theme, primary);
@ -8,6 +8,6 @@
$background: map-get($theme, background);
.projected {
background-color: mat-color($background, hover) !important;
background-color: mat.get-color-from-palette($background, hover) !important;
}
}

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('ListViewTableComponent', () => {
let component: ListViewTableComponent<any>;
let fixture: ComponentFixture<ListViewTableComponent<any>>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(ListViewTableComponent);

View File

@ -12,8 +12,15 @@ import {
} from '@angular/core';
import { NavigationStart, Router } from '@angular/router';
import { columnFactory, createDS, DataSourcePredicate, PblDataSource, PblNgridComponent } from '@pebula/ngrid';
import { PblColumnDefinition, PblColumnFactory, PblNgridColumnSet, PblNgridRowContext } from '@pebula/ngrid/lib/grid';
import {
columnFactory,
createDS,
DataSourcePredicate,
PblColumnDefinition,
PblDataSource,
PblNgridComponent
} from '@pebula/ngrid';
import { PblColumnFactory, PblNgridColumnSet, PblNgridRowContext } from '@pebula/ngrid/lib/grid';
import { PblNgridDataMatrixRow } from '@pebula/ngrid/target-events';
import { Observable, Subscription } from 'rxjs';
import { distinctUntilChanged, filter } from 'rxjs/operators';
@ -91,7 +98,8 @@ export interface ColumnRestriction {
encapsulation: ViewEncapsulation.None
})
export class ListViewTableComponent<V extends BaseViewModel | BaseViewModelWithContentObject>
implements OnInit, OnDestroy {
implements OnInit, OnDestroy
{
/**
* Declare the table
*/

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('LogoComponent', () => {
let component: LogoComponent;
let fixture: ComponentFixture<LogoComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(LogoComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('MediaUploadContentComponent', () => {
let component: MediaUploadContentComponent;
let fixture: ComponentFixture<MediaUploadContentComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(MediaUploadContentComponent);

View File

@ -1,4 +1,4 @@
@import '~@angular/material/theming';
@use '~@angular/material' as mat;
@mixin os-meta-text-block-style($theme) {
$foreground: map-get($theme, foreground);
@ -9,7 +9,7 @@
min-width: 200px;
.mat-icon-button mat-icon {
color: mat-color($foreground, icon);
color: mat.get-color-from-palette($foreground, icon);
font-size: 18px;
}

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('MetaTextBlockComponent', () => {
let component: MetaTextBlockComponent;
let fixture: ComponentFixture<MetaTextBlockComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(MetaTextBlockComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('MotionPollDetailContentComponent', () => {
let component: MotionPollDetailContentComponent;
let fixture: ComponentFixture<MotionPollDetailContentComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(MotionPollDetailContentComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('PreviewComponent', () => {
let component: PreviewComponent;
let fixture: ComponentFixture<PreviewComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(PreviewComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from '../../../../e2e-imports.module';
import { PrivacyPolicyContentComponent } from './privacy-policy-content.component';
@ -7,11 +7,13 @@ describe('PrivacyPolicyComponent', () => {
let component: PrivacyPolicyContentComponent;
let fixture: ComponentFixture<PrivacyPolicyContentComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(PrivacyPolicyContentComponent);

View File

@ -1,4 +1,4 @@
@import '~@angular/material/theming';
@use '~@angular/material' as mat;
/** Custom component theme. Only lives in a specific scope */
@mixin os-progress-snack-bar-style($theme) {
@ -6,7 +6,7 @@
.progress-snack-bar {
.mat-progress-bar-buffer {
background-color: mat-color($background, card) !important;
background-color: mat.get-color-from-palette($background, card) !important;
}
}
}

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { MatSnackBarRef } from '@angular/material/snack-bar';
import { E2EImportsModule } from 'e2e-imports.module';
@ -9,12 +9,14 @@ describe('ProgressSnackBarComponent', () => {
let component: ProgressSnackBarComponent;
let fixture: ComponentFixture<ProgressSnackBarComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
providers: [{ provide: MatSnackBarRef, useValue: {} }]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(ProgressSnackBarComponent);

View File

@ -1,26 +1,26 @@
@import '~@angular/material/theming';
@use '~@angular/material' as mat;
@mixin os-progress-theme($theme) {
$primary: map-get($theme, primary);
$accent: map-get($theme, accent);
.progress-wrapper {
background-color: mat-color($primary);
background-color: mat.get-color-from-palette($primary);
}
.end-icon {
color: mat-color($primary, default-contrast);
color: mat.get-color-from-palette($primary, default-contrast);
}
.slot {
color: mat-color($primary, default-contrast);
color: mat.get-color-from-palette($primary, default-contrast);
}
.buffer {
background-color: mat-color($primary, darker);
background-color: mat.get-color-from-palette($primary, darker);
}
.progress {
background-color: mat-color($accent);
background-color: mat.get-color-from-palette($accent);
}
}

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { ProgressComponent } from './progress.component';
@ -6,11 +6,13 @@ describe('ProgressComponent', () => {
let component: ProgressComponent;
let fixture: ComponentFixture<ProgressComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [ProgressComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(ProgressComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { E2EImportsModule } from 'e2e-imports.module';
@ -9,7 +9,8 @@ describe('ProjectionDialogComponent', () => {
let component: ProjectionDialogComponent;
let fixture: ComponentFixture<ProjectionDialogComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
providers: [
@ -20,7 +21,8 @@ describe('ProjectionDialogComponent', () => {
}
]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(ProjectionDialogComponent);

View File

@ -1,4 +1,4 @@
@import '~@angular/material/theming';
@use '~@angular/material' as mat;
@mixin os-projector-button-style($theme) {
$primary: map-get($theme, primary);
@ -7,7 +7,7 @@
$contrast: map-get($primary, contrast);
.mat-mini-fab.projector-inactive {
color: mat-color($contrast, A200) !important;
background-color: mat-color($contrast, 500) !important;
color: mat.get-color-from-palette($contrast, A200) !important;
background-color: mat.get-color-from-palette($contrast, 500) !important;
}
}

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('ProjectorButtonComponent', () => {
let component: ProjectorButtonComponent;
let fixture: ComponentFixture<ProjectorButtonComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(ProjectorButtonComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('ProjectorComponent', () => {
let component: ProjectorComponent;
let fixture: ComponentFixture<ProjectorComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(ProjectorComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { E2EImportsModule } from 'e2e-imports.module';
@ -9,7 +9,8 @@ describe('PromptDialogComponent', () => {
let component: PromptDialogComponent;
let fixture: ComponentFixture<PromptDialogComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
providers: [
@ -20,7 +21,8 @@ describe('PromptDialogComponent', () => {
}
]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(PromptDialogComponent);

View File

@ -1,4 +1,4 @@
@import '~@angular/material/theming';
@use '~@angular/material' as mat;
:host.full-width {
width: 100%;
@ -8,7 +8,7 @@
$background: map-get($theme, background);
$foreground: map-get($theme, foreground);
$foreground-color: mat-color($foreground, icon);
$foreground-color: mat.get-color-from-palette($foreground, icon);
.input-container {
position: relative;
@ -39,7 +39,7 @@
border-radius: 32px;
font-size: 16px;
border: 1px solid #ccc;
background: mat-color($background, background);
background: mat.get-color-from-palette($background, background);
color: $foreground-color;
transition: all 0.25s ease;

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('RoundedInputComponent', () => {
let component: RoundedInputComponent;
let fixture: ComponentFixture<RoundedInputComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(RoundedInputComponent);

View File

@ -1,5 +1,5 @@
import { Component, ViewChild } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { FormBuilder } from '@angular/forms';
import { BehaviorSubject } from 'rxjs';
@ -22,12 +22,14 @@ describe('SearchValueSelectorComponent', () => {
let hostComponent: TestHostComponent;
let hostFixture: ComponentFixture<TestHostComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [TestHostComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
hostFixture = TestBed.createComponent(TestHostComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('SlideContainerComponent', () => {
let component: SlideContainerComponent;
let fixture: ComponentFixture<SlideContainerComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(SlideContainerComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -7,11 +7,13 @@ import { SortBottomSheetComponent } from './sort-bottom-sheet.component';
describe('SortBottomSheetComponent', () => {
let fixture: ComponentFixture<SortBottomSheetComponent<any>>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(SortBottomSheetComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('OsSortFilterBarComponent', () => {
let component: SortFilterBarComponent<any>;
let fixture: ComponentFixture<any>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(SortFilterBarComponent);

View File

@ -1,5 +1,5 @@
import { Component, ViewChild } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from '../../../../e2e-imports.module';
import { EmptySelectable } from '../empty-selectable';
@ -19,12 +19,14 @@ describe('SortingListComponent', () => {
let hostComponent: TestHostComponent;
let hostFixture: ComponentFixture<TestHostComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [TestHostComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
hostFixture = TestBed.createComponent(TestHostComponent);

View File

@ -1,5 +1,5 @@
@use '~@angular/material' as mat;
@import '../../../../assets/styles/drag.scss';
@import '~@angular/material/theming';
@mixin os-sorting-tree-style($theme) {
$background: map-get($theme, background);
@ -37,7 +37,7 @@
div.backgroundColorLight {
box-sizing: border-box;
background-color: mat-color($background, background);
background-color: mat.get-color-from-palette($background, background);
border-radius: 4px;
box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2), 0 8px 10px 1px rgba(0, 0, 0, 0.14),
0 3px 14px 2px rgba(0, 0, 0, 0.12);

View File

@ -1,5 +1,5 @@
import { Component, ViewChild } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
import { BehaviorSubject } from 'rxjs';
@ -37,12 +37,14 @@ describe('SortingTreeComponent', () => {
let hostComponent: TestHostComponent;
let hostFixture: ComponentFixture<TestHostComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [TestHostComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
hostFixture = TestBed.createComponent(TestHostComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('SpeakerButtonComponent', () => {
let component: SpeakerButtonComponent;
let fixture: ComponentFixture<SpeakerButtonComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(SpeakerButtonComponent);

View File

@ -1,4 +1,4 @@
@import '~@angular/material/theming';
@use 'sass:math';
@import '../../../../assets/styles/media-queries.scss';
@mixin os-tile-style($theme) {
@ -64,7 +64,7 @@
@if $space == true {
@return calc(#{$size} / 4 * 100% - 16px);
} @else {
@return $size / 4 * 100%;
@return math.div($size, 4) * 100%;
}
}
@ -72,7 +72,7 @@
@if $space == true {
@return calc(#{$size} / 8 * 100% - 16px);
} @else {
@return $size / 8 * 100%;
@return math.div($size, 8) * 100%;
}
}
@ -80,7 +80,7 @@
@if $space == true {
@return calc(#{$size} / 12 * 100% - 16px);
} @else {
@return $size / 12 * 100%;
@return math.div($size, 12) * 100%;
}
}
@ -88,7 +88,7 @@
@if $space == true {
@return calc(#{$size} / 16 * 100% - 16px);
} @else {
@return $size / 16 * 100%;
@return math.div($size, 16) * 100%;
}
}
}

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { TileComponent } from './tile.component';
@ -6,11 +6,13 @@ describe('TileComponent', () => {
let component: TileComponent;
let fixture: ComponentFixture<TileComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
declarations: [TileComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(TileComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('UserMenuComponent', () => {
let component: UserMenuComponent;
let fixture: ComponentFixture<UserMenuComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(UserMenuComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('VjsPlayerComponent', () => {
let component: VideoPlayerComponent;
let fixture: ComponentFixture<VideoPlayerComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(VideoPlayerComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,11 +8,13 @@ describe('VotingPrivacyWarningComponent', () => {
let component: VotingPrivacyWarningComponent;
let fixture: ComponentFixture<VotingPrivacyWarningComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(VotingPrivacyWarningComponent);

View File

@ -23,8 +23,8 @@ import { Subject, Subscription } from 'rxjs';
*/
@Directive()
export abstract class BaseFormControlComponentDirective<T>
extends MatFormFieldControl<T>
implements OnDestroy, ControlValueAccessor {
implements MatFormFieldControl<T>, OnDestroy, ControlValueAccessor
{
public static nextId = 0;
@HostBinding() public id = `base-form-control-${BaseFormControlComponentDirective.nextId++}`;
@ -102,8 +102,6 @@ export abstract class BaseFormControlComponentDirective<T>
protected element: ElementRef<HTMLElement>,
@Optional() @Self() public ngControl: NgControl
) {
super();
this.initializeForm();
if (this.ngControl !== null) {

View File

@ -11,7 +11,8 @@ export function isBaseModelWithAgendaItemAndListOfSpeakers(obj: any): obj is Bas
*/
export abstract class BaseModelWithAgendaItemAndListOfSpeakers<T = object>
extends BaseModel<T>
implements BaseModelWithAgendaItem<T>, BaseModelWithListOfSpeakers<T> {
implements BaseModelWithAgendaItem<T>, BaseModelWithListOfSpeakers<T>
{
public agenda_item_id: number;
public list_of_speakers_id: number;
}

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { AgendaListComponent } from './agenda-list.component';
import { E2EImportsModule } from '../../../../../e2e-imports.module';
@ -7,12 +7,14 @@ describe('AgendaListComponent', () => {
let component: AgendaListComponent;
let fixture: ComponentFixture<AgendaListComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [AgendaListComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(AgendaListComponent);

View File

@ -81,11 +81,11 @@ export class AgendaListComponent extends BaseListViewComponent<ViewItem> impleme
public tableColumnDefinition: PblColumnDefinition[] = [
{
prop: 'title',
width: 'auto'
width: '100%'
},
{
prop: 'info',
width: '15%'
width: '100px'
}
];

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,12 +8,14 @@ describe('AgendaSortComponent', () => {
let component: AgendaSortComponent;
let fixture: ComponentFixture<AgendaSortComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [AgendaSortComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(AgendaSortComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { E2EImportsModule } from 'e2e-imports.module';
@ -9,7 +9,8 @@ describe('ItemInfoDialogComponent', () => {
let component: ItemInfoDialogComponent;
let fixture: ComponentFixture<ItemInfoDialogComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [ItemInfoDialogComponent],
@ -21,7 +22,8 @@ describe('ItemInfoDialogComponent', () => {
}
]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(ItemInfoDialogComponent);

View File

@ -1,4 +1,4 @@
@import '~@angular/material/theming';
@use '~@angular/material' as mat;
@mixin os-list-of-speakers-style($theme) {
$primary: map-get($theme, primary);
@ -8,20 +8,20 @@
$foreground: map-get($theme, foreground);
.current-speaker {
background-color: mat-color($accent) !important;
background-color: mat.get-color-from-palette($accent) !important;
> span {
color: mat-color($accent, default-contrast);
color: mat.get-color-from-palette($accent, default-contrast);
}
}
.finished-speaker-grid {
> .number .name .controls {
color: mat-color($foreground, text);
color: mat.get-color-from-palette($foreground, text);
}
> .time {
color: mat-color($foreground, secondary-text);
color: mat.get-color-from-palette($foreground, secondary-text);
}
}
}

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from '../../../../../e2e-imports.module';
import { ListOfSpeakersComponent } from './list-of-speakers.component';
@ -7,12 +7,14 @@ describe('ListOfSpeakersComponent', () => {
let component: ListOfSpeakersComponent;
let fixture: ComponentFixture<ListOfSpeakersComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [ListOfSpeakersComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(ListOfSpeakersComponent);

View File

@ -12,7 +12,8 @@ export interface ItemTitleInformation {
export class ViewItem
extends BaseViewModelWithContentObject<Item, BaseViewModelWithAgendaItem>
implements ItemTitleInformation {
implements ItemTitleInformation
{
public static COLLECTIONSTRING = Item.COLLECTIONSTRING;
protected _collectionString = Item.COLLECTIONSTRING;

View File

@ -23,7 +23,8 @@ export enum UserListIndexType {
*/
export class ViewListOfSpeakers
extends BaseViewModelWithContentObject<ListOfSpeakers, BaseViewModelWithListOfSpeakers>
implements ListOfSpeakersTitleInformation, Projectable {
implements ListOfSpeakersTitleInformation, Projectable
{
public static COLLECTIONSTRING = ListOfSpeakers.COLLECTIONSTRING;
protected _collectionString = ListOfSpeakers.COLLECTIONSTRING;

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -11,7 +11,8 @@ describe('AssignmentDetailComponent', () => {
let component: AssignmentDetailComponent;
let fixture: ComponentFixture<AssignmentDetailComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [
@ -21,7 +22,8 @@ describe('AssignmentDetailComponent', () => {
PollProgressComponent
]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(AssignmentDetailComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,12 +8,14 @@ describe('AssignmentListComponent', () => {
let component: AssignmentListComponent;
let fixture: ComponentFixture<AssignmentListComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [AssignmentListComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(AssignmentListComponent);

View File

@ -38,11 +38,10 @@ export class AssignmentListComponent extends BaseListViewComponent<ViewAssignmen
public tableColumnDefinition: PblColumnDefinition[] = [
{
prop: 'title',
width: 'auto'
width: '100%'
},
{
prop: 'phase',
width: '20%',
minWidth: 180
},
{

View File

@ -36,7 +36,8 @@ export const AssignmentPollPercentBaseVerbose = {
export class ViewAssignmentPoll
extends ViewBasePoll<AssignmentPoll, AssignmentPollMethod, AssignmentPollPercentBase>
implements AssignmentPollTitleInformation {
implements AssignmentPollTitleInformation
{
public static COLLECTIONSTRING = AssignmentPoll.COLLECTIONSTRING;
protected _collectionString = AssignmentPoll.COLLECTIONSTRING;

View File

@ -39,7 +39,8 @@ export const AssignmentPhases: { name: string; value: number; display_name: stri
export class ViewAssignment
extends BaseViewModelWithAgendaItemAndListOfSpeakers<Assignment>
implements AssignmentTitleInformation {
implements AssignmentTitleInformation
{
public static COLLECTIONSTRING = Assignment.COLLECTIONSTRING;
protected _collectionString = Assignment.COLLECTIONSTRING;

View File

@ -1,4 +1,4 @@
@import '~@angular/material/theming';
@use '~@angular/material' as mat;
@mixin os-assignment-poll-detail-style($theme) {
$background: map-get($theme, background);
@ -6,24 +6,24 @@
.assignment-result-table {
border-collapse: collapse;
tr {
border-bottom: 1px solid mat-color($background, focused-button);
border-bottom: 1px solid mat.get-color-from-palette($background, focused-button);
}
}
.openslides-theme .pbl-ngrid-row:hover {
background-color: mat-color($background, card);
background-color: mat.get-color-from-palette($background, card);
}
.openslides-theme os-list-view-table os-sort-filter-bar .custom-table-header {
&,
.action-buttons .input-container input {
background: mat-color($background, card);
background: mat.get-color-from-palette($background, card);
}
}
.openslides-theme .pbl-ngrid-header-cell:first-child {
&::after {
border-right: 1px solid mat-color($background, focused-button);
border-right: 1px solid mat.get-color-from-palette($background, focused-button);
}
}
}

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,12 +8,14 @@ describe('AssignmentPollDetailComponent', () => {
let component: AssignmentPollDetailComponent;
let fixture: ComponentFixture<AssignmentPollDetailComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [AssignmentPollDetailComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(AssignmentPollDetailComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { E2EImportsModule } from 'e2e-imports.module';
@ -9,7 +9,8 @@ describe('AssignmentPollDialogComponent', () => {
let component: AssignmentPollDialogComponent;
let fixture: ComponentFixture<AssignmentPollDialogComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
providers: [
@ -20,7 +21,8 @@ describe('AssignmentPollDialogComponent', () => {
}
]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(AssignmentPollDialogComponent);

View File

@ -33,7 +33,8 @@ type OptionsObject = { user_id: number; user: ViewUser }[];
})
export class AssignmentPollDialogComponent
extends BasePollDialogComponent<ViewAssignmentPoll, AssignmentPollService>
implements OnInit {
implements OnInit
{
public unknownUserLabel = UnknownUserLabel;
/**
* The summary values that will have fields in the dialog

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,12 +8,14 @@ describe('AssignmentPollMetaInfoComponent', () => {
let component: AssignmentPollMetaInfoComponent;
let fixture: ComponentFixture<AssignmentPollMetaInfoComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [AssignmentPollMetaInfoComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(AssignmentPollMetaInfoComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,12 +8,14 @@ describe('AssignmentPollVoteComponent', () => {
let component: AssignmentPollVoteComponent;
let fixture: ComponentFixture<AssignmentPollVoteComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [AssignmentPollVoteComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(AssignmentPollVoteComponent);

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -10,12 +10,14 @@ describe('AssignmentPollComponent', () => {
let component: AssignmentPollComponent;
let fixture: ComponentFixture<AssignmentPollComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [AssignmentPollComponent, AssignmentPollVoteComponent, PollProgressComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(AssignmentPollComponent);

View File

@ -29,7 +29,8 @@ import { AssignmentPollService } from '../../services/assignment-poll.service';
})
export class AssignmentPollComponent
extends BasePollComponent<ViewAssignmentPoll, AssignmentPollService>
implements OnInit {
implements OnInit
{
@Input()
public set poll(value: ViewAssignmentPoll) {
this.initPoll(value);

View File

@ -16,7 +16,8 @@ import { BaseViewComponentDirective } from './base-view';
@Directive()
export abstract class BaseImportListComponentDirective<M extends BaseModel>
extends BaseViewComponentDirective
implements OnInit {
implements OnInit
{
/**
* The data source for a table. Requires to be initialised with a BaseViewModel
*/

View File

@ -11,7 +11,8 @@ import { BaseViewModel } from './base-view-model';
export abstract class BaseListViewComponent<V extends BaseViewModel>
extends BaseViewComponentDirective
implements OnDestroy {
implements OnDestroy
{
/**
* The source of the table data, will be filled by an event emitter
*/

View File

@ -9,7 +9,8 @@ import { Projectable, ProjectorElementBuildDeskriptor } from './projectable';
*/
export abstract class BaseProjectableViewModel<M extends BaseModel = any>
extends BaseViewModel<M>
implements Projectable {
implements Projectable
{
public abstract getSlide(configService?: ConfigService): ProjectorElementBuildDeskriptor;
/**

View File

@ -24,7 +24,8 @@ export interface SortTreeFilterOption extends Identifiable {
@Directive()
export abstract class SortTreeViewComponentDirective<V extends BaseViewModel>
extends BaseViewComponentDirective
implements CanComponentDeactivate {
implements CanComponentDeactivate
{
/**
* Reference to the view child
*/

View File

@ -1,4 +1,4 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
import { E2EImportsModule } from 'e2e-imports.module';
@ -8,12 +8,14 @@ describe('ChatMessageComponent', () => {
let component: ChatMessageComponent;
let fixture: ComponentFixture<ChatMessageComponent>;
beforeEach(async(() => {
beforeEach(
waitForAsync(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule],
declarations: [ChatMessageComponent]
}).compileComponents();
}));
})
);
beforeEach(() => {
fixture = TestBed.createComponent(ChatMessageComponent);

Some files were not shown because too many files have changed in this diff Show More