From e653021eff8f027135447bbae8b07990dacabd49 Mon Sep 17 00:00:00 2001 From: Joshua Sangmeister Date: Tue, 19 May 2020 13:14:37 +0200 Subject: [PATCH] Add a configurable monospace font for the countdown use Roboto Condensed bold by default --- .../core/ui-services/media-manage.service.ts | 2 +- .../countdown-time.component.scss | 4 ++- .../contdown-time/countdown-time.component.ts | 26 +++++++++++++++-- .../countdown/countdown-slide.component.scss | 1 - .../assets/fonts/roboto-condensed-bold.woff | Bin 0 -> 20216 bytes client/src/assets/styles/font-variables.scss | 5 ++++ client/src/assets/styles/fonts.scss | 9 ++++++ openslides/core/config_variables.py | 21 +++++++++++++- .../migrations/0032_add_monospace_font.py | 27 ++++++++++++++++++ 9 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 client/src/assets/fonts/roboto-condensed-bold.woff create mode 100644 openslides/core/migrations/0032_add_monospace_font.py diff --git a/client/src/app/core/ui-services/media-manage.service.ts b/client/src/app/core/ui-services/media-manage.service.ts index 9114703c6..cc3623d46 100644 --- a/client/src/app/core/ui-services/media-manage.service.ts +++ b/client/src/app/core/ui-services/media-manage.service.ts @@ -18,7 +18,7 @@ interface ImageConfigObject { /** * The structure of a font config */ -interface FontConfigObject { +export interface FontConfigObject { display_name: string; default: string; path: string; diff --git a/client/src/app/shared/components/contdown-time/countdown-time.component.scss b/client/src/app/shared/components/contdown-time/countdown-time.component.scss index 05b01439a..c9aeb62c9 100644 --- a/client/src/app/shared/components/contdown-time/countdown-time.component.scss +++ b/client/src/app/shared/components/contdown-time/countdown-time.component.scss @@ -49,7 +49,7 @@ .countdown-wrapper { width: 170px; - text-align: right; + text-align: right !important; position: relative; height: 100%; @@ -67,6 +67,8 @@ } #countdown { + white-space: nowrap; + font-family: $font-monospace; font-weight: bold; text-align: center; } diff --git a/client/src/app/shared/components/contdown-time/countdown-time.component.ts b/client/src/app/shared/components/contdown-time/countdown-time.component.ts index c16721128..ed46a4ccf 100644 --- a/client/src/app/shared/components/contdown-time/countdown-time.component.ts +++ b/client/src/app/shared/components/contdown-time/countdown-time.component.ts @@ -1,6 +1,10 @@ -import { Component, Input, OnDestroy } from '@angular/core'; +import { Component, Input, OnDestroy, OnInit } from '@angular/core'; import { ServertimeService } from 'app/core/core-services/servertime.service'; +import { ConfigService } from 'app/core/ui-services/config.service'; +import { FontConfigObject } from 'app/core/ui-services/media-manage.service'; + +declare let FontFace: any; export interface CountdownData { running: boolean; @@ -15,7 +19,7 @@ export interface CountdownData { templateUrl: './countdown-time.component.html', styleUrls: ['./countdown-time.component.scss'] }) -export class CountdownTimeComponent implements OnDestroy { +export class CountdownTimeComponent implements OnInit, OnDestroy { /** * The time in seconds to make the countdown orange, is the countdown is below this value. */ @@ -92,7 +96,23 @@ export class CountdownTimeComponent implements OnDestroy { return this._countdown; } - public constructor(private servertimeService: ServertimeService) {} + public constructor(private servertimeService: ServertimeService, private configService: ConfigService) {} + + public ngOnInit(): void { + this.configService.get('font_monospace').subscribe(font => { + if (font) { + const customFont = new FontFace('OSFont Monospace', `url(${font.path || font.default})`); + customFont + .load() + .then(res => { + (document as any).fonts.add(res); + }) + .catch(error => { + console.log(error); + }); + } + }); + } /** * Updates the countdown time and string format it. diff --git a/client/src/app/slides/core/countdown/countdown-slide.component.scss b/client/src/app/slides/core/countdown/countdown-slide.component.scss index 3f7c35158..ef89ba7e5 100644 --- a/client/src/app/slides/core/countdown/countdown-slide.component.scss +++ b/client/src/app/slides/core/countdown/countdown-slide.component.scss @@ -34,7 +34,6 @@ font-weight: normal; font-size: 18px; padding-right: 6px; - padding-top: 20px; } } } diff --git a/client/src/assets/fonts/roboto-condensed-bold.woff b/client/src/assets/fonts/roboto-condensed-bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..44a9bac7649c81c4ddd31e392024a245ea1dd138 GIT binary patch literal 20216 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 YK$FFA2omrHIq)!NtJn~H0VWDcof#_|!2kdN literal 0 HcmV?d00001 diff --git a/client/src/assets/styles/font-variables.scss b/client/src/assets/styles/font-variables.scss index f799a6f53..479a098f3 100644 --- a/client/src/assets/styles/font-variables.scss +++ b/client/src/assets/styles/font-variables.scss @@ -20,3 +20,8 @@ $font-condensed: 'OSFont Condensed'; $font-condensed-regular: url('assets/fonts/fira-sans-condensed-latin-400.woff') format('woff'); $font-weight-condensed-regular: 400; + +/** Monospace Font */ +$font-monospace: 'OSFont Monospace'; +$font-monospace-src: url('assets/fonts/roboto-condensed-bold.woff') format('woff'); +$font-weight-monospace: 400; diff --git a/client/src/assets/styles/fonts.scss b/client/src/assets/styles/fonts.scss index 7dd03d2a3..489397cc0 100644 --- a/client/src/assets/styles/fonts.scss +++ b/client/src/assets/styles/fonts.scss @@ -44,3 +44,12 @@ font-weight: $font-weight-condensed-regular; src: $font-condensed-regular; } + +/** Countown */ +@font-face { + font-family: $font-monospace; + font-style: normal; + font-display: swap; + font-weight: $font-weight-monospace; + src: $font-monospace-src; +} diff --git a/openslides/core/config_variables.py b/openslides/core/config_variables.py index 49f803450..278aa22ec 100644 --- a/openslides/core/config_variables.py +++ b/openslides/core/config_variables.py @@ -300,7 +300,13 @@ def get_config_variables(): # Fonts yield ConfigVariable( name="fonts_available", - default_value=["font_regular", "font_italic", "font_bold", "font_bold_italic"], + default_value=[ + "font_regular", + "font_italic", + "font_bold", + "font_bold_italic", + "font_monospace", + ], weight=320, group="Font", hidden=True, @@ -358,6 +364,19 @@ def get_config_variables(): hidden=True, ) + yield ConfigVariable( + name="font_monospace", + default_value={ + "display_name": "Font monospace", + "default": "assets/fonts/courier-prime.woff", + "path": "", + }, + input_type="static", + weight=321, + group="Font", + hidden=True, + ) + # Custom translations yield ConfigVariable( name="translations", diff --git a/openslides/core/migrations/0032_add_monospace_font.py b/openslides/core/migrations/0032_add_monospace_font.py new file mode 100644 index 000000000..8b5cf9113 --- /dev/null +++ b/openslides/core/migrations/0032_add_monospace_font.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations + +from openslides.core.config import config + + +def update_available_fonts(apps, schema_editor): + ConfigStore = apps.get_model("core", "ConfigStore") + + try: + fonts = ConfigStore.objects.get(key="fonts_available") + except ConfigStore.DoesNotExist: + return # The key is not in the database, nothing to change here + + default_fonts = config.config_variables["fonts_available"].default_value + + fonts.value = default_fonts + fonts.save() + + +class Migration(migrations.Migration): + + dependencies = [("core", "0031_projector_default_height")] + + operations = [migrations.RunPython(update_available_fonts)]