From 79e879cb6ef9b9fc3d305063b0b82d73f8d8fdeb Mon Sep 17 00:00:00 2001 From: GabrielMeyer Date: Wed, 28 Aug 2019 14:59:30 +0200 Subject: [PATCH] Adds config to see a max number of next speakers - Also updates the 'list of speakers' on the `overlay-slide`. --- ...mmon-list-of-speakers-slide.component.scss | 6 ++- ...t-of-speakers-overlay-slide.component.html | 32 +++++----------- ...t-of-speakers-overlay-slide.component.scss | 14 ++++++- ...ist-of-speakers-overlay-slide.component.ts | 37 ++++++++++++++++++- openslides/agenda/config_variables.py | 22 ++++++++--- openslides/agenda/projector.py | 5 +++ 6 files changed, 84 insertions(+), 32 deletions(-) diff --git a/client/src/app/slides/agenda/common/common-list-of-speakers-slide.component.scss b/client/src/app/slides/agenda/common/common-list-of-speakers-slide.component.scss index 3fe46b824..31109a835 100644 --- a/client/src/app/slides/agenda/common/common-list-of-speakers-slide.component.scss +++ b/client/src/app/slides/agenda/common/common-list-of-speakers-slide.component.scss @@ -6,6 +6,7 @@ .currentSpeaker { font-weight: bold; + margin: 20px 0 16px; .mat-icon, span { @@ -17,10 +18,11 @@ } .nextSpeakers { - margin-left: 13px !important; - margin-top: 10px !important; + margin: 0; + padding-left: 6px; li { + list-style-position: inside; line-height: 150%; } } diff --git a/client/src/app/slides/agenda/current-list-of-speakers-overlay/current-list-of-speakers-overlay-slide.component.html b/client/src/app/slides/agenda/current-list-of-speakers-overlay/current-list-of-speakers-overlay-slide.component.html index b006e8894..bf53ca23a 100644 --- a/client/src/app/slides/agenda/current-list-of-speakers-overlay/current-list-of-speakers-overlay-slide.component.html +++ b/client/src/app/slides/agenda/current-list-of-speakers-overlay/current-list-of-speakers-overlay-slide.component.html @@ -1,27 +1,15 @@ -
+

List of speakers

- -
-
+
+ mic + {{ currentSpeaker.user }} +
+ +
    +
  1. {{ speaker.user }} star -
-
- - -
- mic - {{ data.data.current.user }} -
- - -
-
    -
  1. - {{ speaker.user }} - star -
  2. -
-
+ +
diff --git a/client/src/app/slides/agenda/current-list-of-speakers-overlay/current-list-of-speakers-overlay-slide.component.scss b/client/src/app/slides/agenda/current-list-of-speakers-overlay/current-list-of-speakers-overlay-slide.component.scss index ef666f6e7..4e7f62c45 100644 --- a/client/src/app/slides/agenda/current-list-of-speakers-overlay/current-list-of-speakers-overlay-slide.component.scss +++ b/client/src/app/slides/agenda/current-list-of-speakers-overlay/current-list-of-speakers-overlay-slide.component.scss @@ -6,12 +6,22 @@ bottom: 0; background-color: #d3d3d3; width: 40%; - height: 200px; + height: 210px; margin: 10px; z-index: 20; border-radius: 7px; border: 1px solid #999; - padding: 0px 7px 10px 19px; + padding: 10px 10px 10px 25px; box-shadow: 3px 3px 10px 1px rgba(0, 0, 0, 0.5); overflow: hidden; + + h3 { + margin-top: 0; + } + + .one-line { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } } diff --git a/client/src/app/slides/agenda/current-list-of-speakers-overlay/current-list-of-speakers-overlay-slide.component.ts b/client/src/app/slides/agenda/current-list-of-speakers-overlay/current-list-of-speakers-overlay-slide.component.ts index 3c3b59a03..63bd16b89 100644 --- a/client/src/app/slides/agenda/current-list-of-speakers-overlay/current-list-of-speakers-overlay-slide.component.ts +++ b/client/src/app/slides/agenda/current-list-of-speakers-overlay/current-list-of-speakers-overlay-slide.component.ts @@ -1,14 +1,49 @@ -import { Component } from '@angular/core'; +import { Component, Input } from '@angular/core'; import { BaseSlideComponent } from 'app/slides/base-slide-component'; import { CommonListOfSpeakersSlideData } from '../common/common-list-of-speakers-slide-data'; +/** + * Interface, that describes how the speaker-objects look like. + */ +interface SpeakerObject { + user: string; + marked: boolean; + end_time: number | null; + weight: number | null; +} + @Component({ selector: 'os-current-list-of-speakers-overlay-slide', templateUrl: './current-list-of-speakers-overlay-slide.component.html', styleUrls: ['./current-list-of-speakers-overlay-slide.component.scss'] }) export class CurrentListOfSpeakersOverlaySlideComponent extends BaseSlideComponent { + /** + * Gets the data. Sets necessary information for the list of speakers in the overlay. + * + * @param data The passed data to this overlay. + */ + @Input() + public set data(data: any) { + if (data.data.current) { + this.currentSpeaker = data.data.current; + } + if (data.data.waiting) { + this.nextSpeakers = data.data.waiting; + } + } + + /** + * The current speaker. + */ + public currentSpeaker: SpeakerObject; + + /** + * List with the next speakers for this list. + */ + public nextSpeakers: SpeakerObject[] = []; + public constructor() { super(); } diff --git a/openslides/agenda/config_variables.py b/openslides/agenda/config_variables.py index 1a1f962fc..2d2580db2 100644 --- a/openslides/agenda/config_variables.py +++ b/openslides/agenda/config_variables.py @@ -116,13 +116,25 @@ def get_config_variables(): validators=(MinValueValidator(0),), ) + yield ConfigVariable( + name="agenda_show_next_speakers", + default_value=0, + input_type="integer", + label="Number of the next speakers to be shown on the projector", + help_text="Enter number of the next shown speakers. Choose 0 to disable this.", + weight=222, + group="Agenda", + subgroup="List of speakers", + validators=(MinValueValidator(0),), + ) + yield ConfigVariable( name="agenda_countdown_warning_time", default_value=0, input_type="integer", label="Show orange countdown in the last x seconds of speaking time", help_text="Enter duration in seconds. Choose 0 to disable warning color.", - weight=221, + weight=224, group="Agenda", subgroup="List of speakers", validators=(MinValueValidator(0),), @@ -133,7 +145,7 @@ def get_config_variables(): default_value=60, input_type="integer", label="Predefined seconds of new countdowns", - weight=222, + weight=226, group="Agenda", subgroup="List of speakers", ) @@ -144,7 +156,7 @@ def get_config_variables(): input_type="boolean", label="Couple countdown with the list of speakers", help_text="[Begin speech] starts the countdown, [End speech] stops the countdown.", - weight=223, + weight=228, group="Agenda", subgroup="List of speakers", ) @@ -154,7 +166,7 @@ def get_config_variables(): default_value=False, input_type="boolean", label="Hide the amount of speakers in subtitle of list of speakers slide", - weight=224, + weight=230, group="Agenda", subgroup="List of speakers", ) @@ -164,7 +176,7 @@ def get_config_variables(): default_value=False, input_type="boolean", label="Only present participants can be added to the list of speakers", - weight=225, + weight=232, group="Agenda", subgroup="List of speakers", ) diff --git a/openslides/agenda/projector.py b/openslides/agenda/projector.py index e5cd9d10b..3a08b6e56 100644 --- a/openslides/agenda/projector.py +++ b/openslides/agenda/projector.py @@ -152,6 +152,8 @@ async def get_list_of_speakers_slide_data( speakers_finished = sorted(speakers_finished, key=lambda s: s["end_time"]) number_of_last_speakers = await get_config(all_data, "agenda_show_last_speakers") + number_of_next_speakers = await get_config(all_data, "agenda_show_next_speakers") + if number_of_last_speakers == 0: speakers_finished = [] else: @@ -159,6 +161,9 @@ async def get_list_of_speakers_slide_data( -number_of_last_speakers: ] # Take the last speakers + if number_of_next_speakers != 0: + speakers_waiting = speakers_waiting[:number_of_next_speakers] + return { "waiting": speakers_waiting, "current": current_speaker,