Merge pull request #4381 from FinnStutzenstein/closSlide
Current list of speaker slide
This commit is contained in:
commit
fc2963f00a
@ -1,5 +1,6 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { Routes, RouterModule } from '@angular/router';
|
import { Routes, RouterModule } from '@angular/router';
|
||||||
|
|
||||||
import { PrivacyPolicyComponent } from './components/privacy-policy/privacy-policy.component';
|
import { PrivacyPolicyComponent } from './components/privacy-policy/privacy-policy.component';
|
||||||
import { StartComponent } from './components/start/start.component';
|
import { StartComponent } from './components/start/start.component';
|
||||||
import { LegalNoticeComponent } from './components/legal-notice/legal-notice.component';
|
import { LegalNoticeComponent } from './components/legal-notice/legal-notice.component';
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
import { CommonModule } from './common.module';
|
|
||||||
|
|
||||||
describe('CommonModule', () => {
|
|
||||||
let commonModule: CommonModule;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
commonModule = new CommonModule();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should create an instance', () => {
|
|
||||||
expect(commonModule).toBeTruthy();
|
|
||||||
});
|
|
||||||
});
|
|
13
client/src/app/site/common/os-common.module.spec.ts
Normal file
13
client/src/app/site/common/os-common.module.spec.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import { OsCommonModule } from './os-common.module';
|
||||||
|
|
||||||
|
describe('OsCommonModule', () => {
|
||||||
|
let osCommonModule: OsCommonModule;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
osCommonModule = new OsCommonModule();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create an instance', () => {
|
||||||
|
expect(osCommonModule).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -1,5 +1,5 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { CommonModule as AngularCommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
|
|
||||||
import { CommonRoutingModule } from './common-routing.module';
|
import { CommonRoutingModule } from './common-routing.module';
|
||||||
import { SharedModule } from '../../shared/shared.module';
|
import { SharedModule } from '../../shared/shared.module';
|
||||||
@ -10,7 +10,7 @@ import { SearchComponent } from './components/search/search.component';
|
|||||||
import { CountUsersComponent } from './components/count-users/count-users.component';
|
import { CountUsersComponent } from './components/count-users/count-users.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [AngularCommonModule, CommonRoutingModule, SharedModule],
|
imports: [CommonModule, CommonRoutingModule, SharedModule],
|
||||||
declarations: [PrivacyPolicyComponent, StartComponent, LegalNoticeComponent, SearchComponent, CountUsersComponent]
|
declarations: [PrivacyPolicyComponent, StartComponent, LegalNoticeComponent, SearchComponent, CountUsersComponent]
|
||||||
})
|
})
|
||||||
export class CommonModule {}
|
export class OsCommonModule {}
|
@ -7,14 +7,11 @@
|
|||||||
|
|
||||||
<div class="content-container" *ngIf="projector">
|
<div class="content-container" *ngIf="projector">
|
||||||
<div class="column-left">
|
<div class="column-left">
|
||||||
<!--<a [routerLink]="['/projector', projector.id]">
|
<a [routerLink]="['/projector', projector.id]">
|
||||||
<div id="projector">
|
<div id="projector">
|
||||||
<os-projector [projector]="projector"></os-projector>
|
<os-projector [projector]="projector"></os-projector>
|
||||||
</div>
|
</div>
|
||||||
</a>-->
|
</a>
|
||||||
<div id="projector">
|
|
||||||
<os-projector [projector]="projector"></os-projector>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="column-right" *osPerms="'core.can_manage_projector'">
|
<div class="column-right" *osPerms="'core.can_manage_projector'">
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
|
@ -16,7 +16,7 @@ const routes: Routes = [
|
|||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '',
|
path: '',
|
||||||
loadChildren: './common/common.module#CommonModule',
|
loadChildren: './common/os-common.module#OsCommonModule',
|
||||||
data: { preload: true }
|
data: { preload: true }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
export interface CurrentListOfSpeakersSlideData {
|
|
||||||
error: string;
|
|
||||||
}
|
|
@ -3,7 +3,7 @@ interface SlideSpeaker {
|
|||||||
marked: boolean;
|
marked: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ListOfSpeakersSlideData {
|
export interface CommonListOfSpeakersSlideData {
|
||||||
waiting: SlideSpeaker[];
|
waiting: SlideSpeaker[];
|
||||||
current: SlideSpeaker;
|
current: SlideSpeaker;
|
||||||
finished: SlideSpeaker[];
|
finished: SlideSpeaker[];
|
@ -18,7 +18,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Next speakers -->
|
<!-- Next speakers -->
|
||||||
<div *ngIf="data.data.finished.length">
|
<div *ngIf="data.data.waiting.length">
|
||||||
<ol class="nextSpeakers">
|
<ol class="nextSpeakers">
|
||||||
<li *ngFor="let speaker of data.data.waiting">
|
<li *ngFor="let speaker of data.data.waiting">
|
||||||
{{ speaker.user }}
|
{{ speaker.user }}
|
@ -1,21 +1,21 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
import { ListOfSpeakersSlideComponent } from './list-of-speakers-slide.component';
|
import { CommonListOfSpeakersSlideComponent } from './common-list-of-speakers-slide.component';
|
||||||
import { E2EImportsModule } from '../../../../e2e-imports.module';
|
import { E2EImportsModule } from '../../../../e2e-imports.module';
|
||||||
|
|
||||||
describe('ListOfSpeakersSlideComponent', () => {
|
describe('ListOfSpeakersSlideComponent', () => {
|
||||||
let component: ListOfSpeakersSlideComponent;
|
let component: CommonListOfSpeakersSlideComponent;
|
||||||
let fixture: ComponentFixture<ListOfSpeakersSlideComponent>;
|
let fixture: ComponentFixture<CommonListOfSpeakersSlideComponent>;
|
||||||
|
|
||||||
beforeEach(async(() => {
|
beforeEach(async(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [E2EImportsModule],
|
imports: [E2EImportsModule],
|
||||||
declarations: [ListOfSpeakersSlideComponent]
|
declarations: [CommonListOfSpeakersSlideComponent]
|
||||||
}).compileComponents();
|
}).compileComponents();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
fixture = TestBed.createComponent(ListOfSpeakersSlideComponent);
|
fixture = TestBed.createComponent(CommonListOfSpeakersSlideComponent);
|
||||||
component = fixture.componentInstance;
|
component = fixture.componentInstance;
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
});
|
});
|
@ -1,16 +1,16 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
import { BaseSlideComponent } from 'app/slides/base-slide-component';
|
import { BaseSlideComponent } from 'app/slides/base-slide-component';
|
||||||
import { ListOfSpeakersSlideData } from './list-of-speakers-slide-data';
|
import { CommonListOfSpeakersSlideData } from './common-list-of-speakers-slide-data';
|
||||||
import { CollectionStringMapperService } from 'app/core/core-services/collectionStringMapper.service';
|
import { CollectionStringMapperService } from 'app/core/core-services/collectionStringMapper.service';
|
||||||
import { isBaseAgendaContentObjectRepository } from 'app/core/repositories/base-agenda-content-object-repository';
|
import { isBaseAgendaContentObjectRepository } from 'app/core/repositories/base-agenda-content-object-repository';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'os-list-of-speakers-slide',
|
selector: 'os-common-list-of-speakers-slide',
|
||||||
templateUrl: './list-of-speakers-slide.component.html',
|
templateUrl: './common-list-of-speakers-slide.component.html',
|
||||||
styleUrls: ['./list-of-speakers-slide.component.scss']
|
styleUrls: ['./common-list-of-speakers-slide.component.scss']
|
||||||
})
|
})
|
||||||
export class ListOfSpeakersSlideComponent extends BaseSlideComponent<ListOfSpeakersSlideData> {
|
export class CommonListOfSpeakersSlideComponent extends BaseSlideComponent<CommonListOfSpeakersSlideData> {
|
||||||
public constructor(private collectionStringMapperService: CollectionStringMapperService) {
|
public constructor(private collectionStringMapperService: CollectionStringMapperService) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
import { CommonListOfSpeakersSlideModule } from './common-list-of-speakers-slide.module';
|
||||||
|
|
||||||
|
describe('CommonListOfSpeakersSlideModule', () => {
|
||||||
|
let commonListOfSpeakersSlideModule: CommonListOfSpeakersSlideModule;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
commonListOfSpeakersSlideModule = new CommonListOfSpeakersSlideModule();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create an instance', () => {
|
||||||
|
expect(commonListOfSpeakersSlideModule).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,13 @@
|
|||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
|
||||||
|
import { CommonListOfSpeakersSlideComponent } from './common-list-of-speakers-slide.component';
|
||||||
|
import { SharedModule } from '../../../shared/shared.module';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [CommonListOfSpeakersSlideComponent],
|
||||||
|
entryComponents: [CommonListOfSpeakersSlideComponent],
|
||||||
|
imports: [CommonModule, SharedModule],
|
||||||
|
exports: [CommonListOfSpeakersSlideComponent]
|
||||||
|
})
|
||||||
|
export class CommonListOfSpeakersSlideModule {}
|
@ -1,3 +1,3 @@
|
|||||||
<div id="overlay">
|
<div id="overlay" *ngIf="data">
|
||||||
Current list of speakers overlay
|
TODO
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,14 +1,20 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component, Input } from '@angular/core';
|
||||||
|
|
||||||
import { BaseSlideComponent } from 'app/slides/base-slide-component';
|
import { BaseSlideComponent } from 'app/slides/base-slide-component';
|
||||||
import { CurrentListOfSpeakersSlideData } from '../base/current-list-of-speakers-slide-data';
|
import { CommonListOfSpeakersSlideData } from '../common/common-list-of-speakers-slide-data';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'os-current-list-of-speakers-overlay-slide',
|
selector: 'os-current-list-of-speakers-overlay-slide',
|
||||||
templateUrl: './current-list-of-speakers-overlay-slide.component.html',
|
templateUrl: './current-list-of-speakers-overlay-slide.component.html',
|
||||||
styleUrls: ['./current-list-of-speakers-overlay-slide.component.scss']
|
styleUrls: ['./current-list-of-speakers-overlay-slide.component.scss']
|
||||||
})
|
})
|
||||||
export class CurrentListOfSpeakersOverlaySlideComponent extends BaseSlideComponent<CurrentListOfSpeakersSlideData> {
|
export class CurrentListOfSpeakersOverlaySlideComponent extends BaseSlideComponent<CommonListOfSpeakersSlideData> {
|
||||||
|
// TODO: remove to access data in the template
|
||||||
|
@Input()
|
||||||
|
public set data(value: any) {
|
||||||
|
console.log(value.data);
|
||||||
|
}
|
||||||
|
|
||||||
public constructor() {
|
public constructor() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
<div>
|
|
||||||
Current list of speakers slide
|
|
||||||
</div>
|
|
@ -1,26 +0,0 @@
|
|||||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
|
||||||
|
|
||||||
import { CurrentListOfSpeakersSlideComponent } from './current-list-of-speakers-slide.component';
|
|
||||||
import { E2EImportsModule } from '../../../../e2e-imports.module';
|
|
||||||
|
|
||||||
describe('CurrentListOfSpeakersSlideComponent', () => {
|
|
||||||
let component: CurrentListOfSpeakersSlideComponent;
|
|
||||||
let fixture: ComponentFixture<CurrentListOfSpeakersSlideComponent>;
|
|
||||||
|
|
||||||
beforeEach(async(() => {
|
|
||||||
TestBed.configureTestingModule({
|
|
||||||
imports: [E2EImportsModule],
|
|
||||||
declarations: [CurrentListOfSpeakersSlideComponent]
|
|
||||||
}).compileComponents();
|
|
||||||
}));
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
fixture = TestBed.createComponent(CurrentListOfSpeakersSlideComponent);
|
|
||||||
component = fixture.componentInstance;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should create', () => {
|
|
||||||
expect(component).toBeTruthy();
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,18 +0,0 @@
|
|||||||
import { Component, OnInit } from '@angular/core';
|
|
||||||
|
|
||||||
import { BaseSlideComponent } from 'app/slides/base-slide-component';
|
|
||||||
import { CurrentListOfSpeakersSlideData } from '../base/current-list-of-speakers-slide-data';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'os-current-list-of-speakers-slide',
|
|
||||||
templateUrl: './current-list-of-speakers-slide.component.html',
|
|
||||||
styleUrls: ['./current-list-of-speakers-slide.component.scss']
|
|
||||||
})
|
|
||||||
export class CurrentListOfSpeakersSlideComponent extends BaseSlideComponent<CurrentListOfSpeakersSlideData>
|
|
||||||
implements OnInit {
|
|
||||||
public constructor() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ngOnInit(): void {}
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
import { CurrentListOfSpeakersSlideModule } from './current-list-of-speakers-slide.module';
|
|
||||||
|
|
||||||
describe('CurrentListOfSpeakersSlideModule', () => {
|
|
||||||
let currentListOfSpeakersSlideModule: CurrentListOfSpeakersSlideModule;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
currentListOfSpeakersSlideModule = new CurrentListOfSpeakersSlideModule();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should create an instance', () => {
|
|
||||||
expect(currentListOfSpeakersSlideModule).toBeTruthy();
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,7 +1,13 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
|
||||||
import { makeSlideModule } from 'app/slides/base-slide-module';
|
import { SLIDE } from '../../slide-token';
|
||||||
import { CurrentListOfSpeakersSlideComponent } from './current-list-of-speakers-slide.component';
|
import { SharedModule } from 'app/shared/shared.module';
|
||||||
|
import { CommonListOfSpeakersSlideModule } from '../common/common-list-of-speakers-slide.module';
|
||||||
|
import { CommonListOfSpeakersSlideComponent } from '../common/common-list-of-speakers-slide.component';
|
||||||
|
|
||||||
@NgModule(makeSlideModule(CurrentListOfSpeakersSlideComponent))
|
@NgModule({
|
||||||
|
imports: [CommonModule, SharedModule, CommonListOfSpeakersSlideModule],
|
||||||
|
providers: [{ provide: SLIDE, useValue: CommonListOfSpeakersSlideComponent }]
|
||||||
|
})
|
||||||
export class CurrentListOfSpeakersSlideModule {}
|
export class CurrentListOfSpeakersSlideModule {}
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
import { ListOfSpeakersSlideModule } from './list-of-speakers-slide.module';
|
|
||||||
|
|
||||||
describe('ListOfSpeakersSlideModule', () => {
|
|
||||||
let listOfSpeakersSlideModule: ListOfSpeakersSlideModule;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
listOfSpeakersSlideModule = new ListOfSpeakersSlideModule();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should create an instance', () => {
|
|
||||||
expect(listOfSpeakersSlideModule).toBeTruthy();
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,7 +1,13 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
|
||||||
import { makeSlideModule } from 'app/slides/base-slide-module';
|
import { SLIDE } from '../../slide-token';
|
||||||
import { ListOfSpeakersSlideComponent } from './list-of-speakers-slide.component';
|
import { SharedModule } from 'app/shared/shared.module';
|
||||||
|
import { CommonListOfSpeakersSlideModule } from '../common/common-list-of-speakers-slide.module';
|
||||||
|
import { CommonListOfSpeakersSlideComponent } from '../common/common-list-of-speakers-slide.component';
|
||||||
|
|
||||||
@NgModule(makeSlideModule(ListOfSpeakersSlideComponent))
|
@NgModule({
|
||||||
|
imports: [CommonModule, SharedModule, CommonListOfSpeakersSlideModule],
|
||||||
|
providers: [{ provide: SLIDE, useValue: CommonListOfSpeakersSlideComponent }]
|
||||||
|
})
|
||||||
export class ListOfSpeakersSlideModule {}
|
export class ListOfSpeakersSlideModule {}
|
||||||
|
@ -56,7 +56,9 @@ def get_flat_tree(all_data: AllData, parent_id: int = 0) -> List[Dict[str, Any]]
|
|||||||
return tree
|
return tree
|
||||||
|
|
||||||
|
|
||||||
def item_list_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
def item_list_slide(
|
||||||
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Item list slide.
|
Item list slide.
|
||||||
|
|
||||||
@ -84,7 +86,7 @@ def item_list_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any
|
|||||||
|
|
||||||
|
|
||||||
def list_of_speakers_slide(
|
def list_of_speakers_slide(
|
||||||
all_data: AllData, element: Dict[str, Any]
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
) -> Dict[str, Any]:
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
List of speakers slide.
|
List of speakers slide.
|
||||||
@ -96,6 +98,10 @@ def list_of_speakers_slide(
|
|||||||
if item_id is None:
|
if item_id is None:
|
||||||
raise ProjectorElementException("id is required for list of speakers slide")
|
raise ProjectorElementException("id is required for list of speakers slide")
|
||||||
|
|
||||||
|
return get_list_of_speakers_slide_data(all_data, item_id)
|
||||||
|
|
||||||
|
|
||||||
|
def get_list_of_speakers_slide_data(all_data: AllData, item_id: int) -> Dict[str, Any]:
|
||||||
try:
|
try:
|
||||||
item = all_data["agenda/item"][item_id]
|
item = all_data["agenda/item"][item_id]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@ -144,17 +150,53 @@ def list_of_speakers_slide(
|
|||||||
|
|
||||||
|
|
||||||
def current_list_of_speakers_slide(
|
def current_list_of_speakers_slide(
|
||||||
all_data: AllData, element: Dict[str, Any]
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
) -> Dict[str, Any]:
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
TODO
|
The current list of speakers slide. Creates the data for the given projector.
|
||||||
|
|
||||||
Note: This data is for all projectors showing this slide, so we cannot give projector-
|
|
||||||
specific data. The work-around is to make a dict with projector-ids as keys and the
|
|
||||||
data-per-projector as values. This is not a security concern, because if a person can
|
|
||||||
see one projector, he is able to see all others, too. Maybe a bit more data..
|
|
||||||
"""
|
"""
|
||||||
return {"error": "TODO"}
|
try:
|
||||||
|
this_projector = all_data["core/projector"][projector_id]
|
||||||
|
except KeyError:
|
||||||
|
raise ProjectorElementException(f"Projector {projector_id} does not exist")
|
||||||
|
|
||||||
|
reference_projector_id = this_projector["reference_projector_id"] or projector_id
|
||||||
|
try:
|
||||||
|
reference_projector = all_data["core/projector"][reference_projector_id]
|
||||||
|
except KeyError:
|
||||||
|
raise ProjectorElementException(
|
||||||
|
f"Projector {reference_projector_id} does not exist"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Search for elements, that do have an agenda item:
|
||||||
|
# Try to get a model by the collection and id in the element. This
|
||||||
|
# model needs to have a 'agenda_item_id'. This item must exist. The first
|
||||||
|
# matching element is taken.
|
||||||
|
|
||||||
|
elements = reference_projector["elements"]
|
||||||
|
item_id = None
|
||||||
|
for element in elements:
|
||||||
|
if "id" not in element:
|
||||||
|
continue
|
||||||
|
collection = element["name"]
|
||||||
|
id = element["id"]
|
||||||
|
if collection not in all_data or id not in all_data[collection]:
|
||||||
|
continue
|
||||||
|
|
||||||
|
model = all_data[collection][id]
|
||||||
|
if "agenda_item_id" not in model:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not model["agenda_item_id"] in all_data["agenda/item"]:
|
||||||
|
continue
|
||||||
|
|
||||||
|
item_id = model["agenda_item_id"]
|
||||||
|
break
|
||||||
|
|
||||||
|
if item_id is None: # no element found
|
||||||
|
return {}
|
||||||
|
|
||||||
|
return get_list_of_speakers_slide_data(all_data, item_id)
|
||||||
|
|
||||||
|
|
||||||
def register_projector_slides() -> None:
|
def register_projector_slides() -> None:
|
||||||
|
@ -9,7 +9,9 @@ from ..utils.projector import AllData, register_projector_slide
|
|||||||
# to be fast!
|
# to be fast!
|
||||||
|
|
||||||
|
|
||||||
def assignment_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
def assignment_slide(
|
||||||
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Assignment slide.
|
Assignment slide.
|
||||||
"""
|
"""
|
||||||
|
@ -14,7 +14,9 @@ from ..utils.projector import (
|
|||||||
# to be fast!
|
# to be fast!
|
||||||
|
|
||||||
|
|
||||||
def countdown_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
def countdown_slide(
|
||||||
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Countdown slide.
|
Countdown slide.
|
||||||
|
|
||||||
@ -40,7 +42,9 @@ def countdown_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def message_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
def message_slide(
|
||||||
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Message slide.
|
Message slide.
|
||||||
|
|
||||||
@ -59,7 +63,9 @@ def message_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
|||||||
raise ProjectorElementException(f"Message {message_id} does not exist")
|
raise ProjectorElementException(f"Message {message_id} does not exist")
|
||||||
|
|
||||||
|
|
||||||
def clock_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
def clock_slide(
|
||||||
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
|
) -> Dict[str, Any]:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,7 +13,9 @@ from ..utils.projector import (
|
|||||||
# to be fast!
|
# to be fast!
|
||||||
|
|
||||||
|
|
||||||
def mediafile_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
def mediafile_slide(
|
||||||
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Slide for Mediafile.
|
Slide for Mediafile.
|
||||||
"""
|
"""
|
||||||
|
@ -97,7 +97,9 @@ def get_amendment_base_statute(amendment, all_data):
|
|||||||
return {"title": statute["title"], "text": statute["text"]}
|
return {"title": statute["title"], "text": statute["text"]}
|
||||||
|
|
||||||
|
|
||||||
def motion_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
def motion_slide(
|
||||||
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Motion slide.
|
Motion slide.
|
||||||
|
|
||||||
@ -204,7 +206,9 @@ def motion_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
|||||||
return return_value
|
return return_value
|
||||||
|
|
||||||
|
|
||||||
def motion_block_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
def motion_block_slide(
|
||||||
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Motion block slide.
|
Motion block slide.
|
||||||
"""
|
"""
|
||||||
|
@ -13,7 +13,9 @@ from ..utils.projector import (
|
|||||||
# to be fast!
|
# to be fast!
|
||||||
|
|
||||||
|
|
||||||
def topic_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
def topic_slide(
|
||||||
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Topic slide.
|
Topic slide.
|
||||||
|
|
||||||
|
@ -13,7 +13,9 @@ from ..utils.projector import (
|
|||||||
# to be fast!
|
# to be fast!
|
||||||
|
|
||||||
|
|
||||||
def user_slide(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
def user_slide(
|
||||||
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
User slide.
|
User slide.
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ from .cache import element_cache
|
|||||||
|
|
||||||
|
|
||||||
AllData = Dict[str, Dict[int, Dict[str, Any]]]
|
AllData = Dict[str, Dict[int, Dict[str, Any]]]
|
||||||
ProjectorSlide = Callable[[AllData, Dict[str, Any]], Dict[str, Any]]
|
ProjectorSlide = Callable[[AllData, Dict[str, Any], int], Dict[str, Any]]
|
||||||
|
|
||||||
|
|
||||||
projector_slides: Dict[str, ProjectorSlide] = {}
|
projector_slides: Dict[str, ProjectorSlide] = {}
|
||||||
@ -83,7 +83,7 @@ async def get_projector_data(
|
|||||||
for element in projector["elements"]:
|
for element in projector["elements"]:
|
||||||
projector_slide = projector_slides[element["name"]]
|
projector_slide = projector_slides[element["name"]]
|
||||||
try:
|
try:
|
||||||
data = projector_slide(all_data, element)
|
data = projector_slide(all_data, element, projector_id)
|
||||||
except ProjectorElementException as err:
|
except ProjectorElementException as err:
|
||||||
data = {"error": str(err)}
|
data = {"error": str(err)}
|
||||||
projector_data[projector_id].append({"data": data, "element": element})
|
projector_data[projector_id].append({"data": data, "element": element})
|
||||||
|
@ -90,14 +90,18 @@ class TProjector:
|
|||||||
return elements
|
return elements
|
||||||
|
|
||||||
|
|
||||||
def slide1(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
def slide1(
|
||||||
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
Slide that shows the general_event_name.
|
Slide that shows the general_event_name.
|
||||||
"""
|
"""
|
||||||
return {"name": "slide1", "event_name": get_config(all_data, "general_event_name")}
|
return {"name": "slide1", "event_name": get_config(all_data, "general_event_name")}
|
||||||
|
|
||||||
|
|
||||||
def slide2(all_data: AllData, element: Dict[str, Any]) -> Dict[str, Any]:
|
def slide2(
|
||||||
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
||||||
|
) -> Dict[str, Any]:
|
||||||
return {"name": "slide2"}
|
return {"name": "slide2"}
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ def all_data():
|
|||||||
def test_main_items(all_data):
|
def test_main_items(all_data):
|
||||||
element: Dict[str, Any] = {}
|
element: Dict[str, Any] = {}
|
||||||
|
|
||||||
data = projector.item_list_slide(all_data, element)
|
data = projector.item_list_slide(all_data, element, 1)
|
||||||
|
|
||||||
assert data == {
|
assert data == {
|
||||||
"items": [
|
"items": [
|
||||||
@ -109,7 +109,7 @@ def test_main_items(all_data):
|
|||||||
def test_all_items(all_data):
|
def test_all_items(all_data):
|
||||||
element: Dict[str, Any] = {"only_main_items": False}
|
element: Dict[str, Any] = {"only_main_items": False}
|
||||||
|
|
||||||
data = projector.item_list_slide(all_data, element)
|
data = projector.item_list_slide(all_data, element, 1)
|
||||||
|
|
||||||
assert data == {
|
assert data == {
|
||||||
"items": [
|
"items": [
|
||||||
|
@ -256,7 +256,7 @@ def all_data():
|
|||||||
def test_motion_slide(all_data):
|
def test_motion_slide(all_data):
|
||||||
element: Dict[str, Any] = {"id": 1}
|
element: Dict[str, Any] = {"id": 1}
|
||||||
|
|
||||||
data = projector.motion_slide(all_data, element)
|
data = projector.motion_slide(all_data, element, 1)
|
||||||
|
|
||||||
assert data == {
|
assert data == {
|
||||||
"identifier": "4",
|
"identifier": "4",
|
||||||
@ -301,7 +301,7 @@ def test_motion_slide(all_data):
|
|||||||
def test_amendment_slide(all_data):
|
def test_amendment_slide(all_data):
|
||||||
element: Dict[str, Any] = {"id": 2}
|
element: Dict[str, Any] = {"id": 2}
|
||||||
|
|
||||||
data = projector.motion_slide(all_data, element)
|
data = projector.motion_slide(all_data, element, 1)
|
||||||
|
|
||||||
assert data == {
|
assert data == {
|
||||||
"identifier": "Ä1",
|
"identifier": "Ä1",
|
||||||
@ -325,7 +325,7 @@ def test_amendment_slide(all_data):
|
|||||||
def test_statute_amendment_slide(all_data):
|
def test_statute_amendment_slide(all_data):
|
||||||
element: Dict[str, Any] = {"id": 3}
|
element: Dict[str, Any] = {"id": 3}
|
||||||
|
|
||||||
data = projector.motion_slide(all_data, element)
|
data = projector.motion_slide(all_data, element, 1)
|
||||||
|
|
||||||
assert data == {
|
assert data == {
|
||||||
"identifier": None,
|
"identifier": None,
|
||||||
|
Loading…
Reference in New Issue
Block a user