UI improvements

This commit is contained in:
Emanuel Schütze 2019-01-09 08:31:13 +01:00
parent 7226d04106
commit 1ff84c1ae1
41 changed files with 1061 additions and 452 deletions

View File

@ -45,9 +45,10 @@
"ngx-mat-select-search": "^1.4.2",
"ngx-papaparse": "^3.0.2",
"po2json": "^1.0.0-alpha",
"roboto-fontface": "^0.10.0",
"rxjs": "^6.3.3",
"tinymce": "^4.9.0",
"typeface-fira-sans": "^0.0.54",
"typeface-fira-sans-condensed": "^0.0.54",
"uuid": "^3.3.2",
"zone.js": "^0.8.26"
},

View File

@ -1,12 +0,0 @@
<mat-toolbar color='primary' class="footer">
<mat-toolbar-row>
<button mat-button class="footer-link" [routerLink]=legalNoticeUrl>
<span translate>Legal notice</span>
</button>
<button mat-button class="footer-link" [routerLink]=privacyPolicyUrl>
<span translate>Privacy policy</span>
</button>
<span class="footer-right">© <span>Copyright by</span>&#160;<a href='https://openslides.org/'>OpenSlides</a>
</span>
</mat-toolbar-row>
</mat-toolbar>

View File

@ -1,11 +0,0 @@
.footer-link,
.footer-right {
font-size: 12px;
z-index: inherit;
}
.footer-right {
a {
color: white;
}
}

View File

@ -1,25 +0,0 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { FooterComponent } from './footer.component';
import { E2EImportsModule } from '../../../../e2e-imports.module';
describe('FooterComponent', () => {
let component: FooterComponent;
let fixture: ComponentFixture<FooterComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [E2EImportsModule]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(FooterComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,47 +0,0 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
/**
* Reusable footer Apps.
*
* ## Examples:
*
* ### Usage of the selector:
*
* ```html
* <os-footer></os-footer>
* ```
*/
@Component({
selector: 'os-footer',
templateUrl: './footer.component.html',
styleUrls: ['./footer.component.scss']
})
export class FooterComponent implements OnInit {
/**
* Indicates to location of the legal notice
*/
public legalNoticeUrl = '/legalnotice';
/**
* Indicated the location of the privacy policy
*/
public privacyPolicyUrl = '/privacypolicy';
/**
* Empty constructor
*/
public constructor(private route: ActivatedRoute) {}
/**
* If on login page, redirect the legal notice and privacy policy not to /URL
* but to /login/URL
*/
public ngOnInit(): void {
if (this.route.snapshot.url[0] && this.route.snapshot.url[0].path === 'login') {
this.legalNoticeUrl = '/login/legalnotice';
this.privacyPolicyUrl = '/login/privacypolicy';
}
}
}

View File

@ -47,14 +47,22 @@
<!-- Main action button - desktop -->
<button
mat-mini-fab
color="accent"
mat-icon-button
class="on-transition-fade"
*ngIf="mainButton && !editMode && !vp.isMobile && !multiSelectMode"
*ngIf="mainButtonIcon == 'add' && mainButton && !editMode && !vp.isMobile && !multiSelectMode"
(click)="sendMainEvent()"
>
<mat-icon>{{ mainButtonIcon }}</mat-icon>
<mat-icon>add_circle</mat-icon>
</button>
<button
mat-icon-button
class="on-transition-fade"
*ngIf="mainButtonIcon == 'edit' && mainButton && !editMode && !vp.isMobile && !multiSelectMode"
(click)="sendMainEvent()"
>
<mat-icon>edit</mat-icon>
</button>
<!-- Save button -->
<button mat-button *ngIf="editMode" (click)="save()"><strong translate class="upper">Save</strong></button>

View File

@ -9,7 +9,7 @@
(<span translate>License</span>: {{ versionInfo.openslides_license }})
<div *ngIf="versionInfo.plugins.length">
<div translate>Installed plugins</div>:
<p><span translate>Installed plugins</span>:</p>
<div *ngFor="let plugin of versionInfo.plugins">
<a [attr.href]="plugin.url" target="_blank">
{{ plugin.verbose_name }} {{ plugin.version }}

View File

@ -58,7 +58,6 @@ import { TreeModule } from 'angular-tree-component';
// components
import { HeadBarComponent } from './components/head-bar/head-bar.component';
import { FooterComponent } from './components/footer/footer.component';
import { LegalNoticeContentComponent } from './components/legal-notice-content/legal-notice-content.component';
import { PrivacyPolicyContentComponent } from './components/privacy-policy-content/privacy-policy-content.component';
import { SearchValueSelectorComponent } from './components/search-value-selector/search-value-selector.component';
@ -163,7 +162,6 @@ import { FilterMenuComponent } from './components/os-sort-filter-bar/filter-menu
PermsDirective,
DomChangeDirective,
AutofocusDirective,
FooterComponent,
HeadBarComponent,
SearchValueSelectorComponent,
LegalNoticeContentComponent,
@ -180,7 +178,6 @@ import { FilterMenuComponent } from './components/os-sort-filter-bar/filter-menu
DomChangeDirective,
AutofocusDirective,
HeadBarComponent,
FooterComponent,
LegalNoticeContentComponent,
PrivacyPolicyContentComponent,
SearchValueSelectorComponent,

View File

@ -182,7 +182,7 @@
<!-- Edit button -->
<button mat-menu-item (click)="openEditInfo(item)">
<mat-icon>edit</mat-icon>
<span translate>Edit</span>
<span translate>Edit details</span>
</button>
<!-- Delete Button -->

View File

@ -2,11 +2,13 @@
<!-- Title -->
<div class="title-slot">
<h2>
<span *ngIf="viewItem">{{ viewItem.getTitle() }}:</span> <span translate> List of speakers </span>
<span translate>List of speakers</span>
</h2>
</div>
</os-head-bar>
<h1 class="title-left on-transition-fade" *ngIf="viewItem">{{ viewItem.getTitle() }}</h1>
<mat-card class="speaker-card">
<!-- List of finished speakers -->
<mat-expansion-panel *ngIf="finishedSpeakers && finishedSpeakers.length > 0" class="finished-list">

View File

@ -10,10 +10,9 @@
<!-- Title -->
<div class="title-slot">
<h2>
<span *ngIf="newTopic && !editTopic" translate>New</span>
<span *ngIf="editTopic && !newTopic" translate>Edit</span>
<!-- Whitespace between "New" and "Topic" -->
<span>&nbsp;</span> <span translate>Topic</span>
<span *ngIf="newTopic " translate>New topic</span>
<span *ngIf="editTopic && !newTopic" translate>Edit topic</span>
<span *ngIf="!newTopic && !editTopic" translate>Topic</span>
</h2>
</div>
@ -25,13 +24,13 @@
</div>
</os-head-bar>
<div *ngIf="topic" class="topic-container on-transition-fade">
<div class="topic-title">
<h2 *ngIf="!editTopic">{{ topic.title }}</h2>
<h2 *ngIf="editTopic">{{ topicForm.get('title').value }}</h2>
</div>
<mat-card *ngIf="topic.text || topic.hasAttachments() || editTopic" class="topic-text">
<mat-card *ngIf="topic || editTopic"
[ngClass]="editTopic ? 'os-form-card' : 'os-card'"
class="on-transition-fade">
<div *ngIf="!editTopic">
<h1>{{ topic.title }}</h1>
</div>
<div>
<span *ngIf="!editTopic">
<!-- Render topic text as HTML -->
@ -65,8 +64,12 @@
<mat-error *ngIf="topicForm.invalid" translate>A name is required</mat-error>
</mat-form-field>
</div>
<!-- The editor -->
<editor formControlName="text" [init]="tinyMceSettings"></editor>
<div class="spacer-bottom-20">
<h4 translate>Text</h4>
<editor formControlName="text" [init]="tinyMceSettings"></editor>
</div>
<!-- Attachments -->
<os-search-value-selector
@ -105,7 +108,6 @@
</div>
</form>
</mat-card>
</div>
<mat-menu #topicExtraMenu="matMenu">
<button mat-menu-item *ngIf="topic" [routerLink]="getSpeakerLink()">

View File

@ -1,19 +1,3 @@
.topic-container {
max-width: 1200px;
}
.topic-title {
padding: 40px 0 40px 25px;
line-height: 180%;
font-size: 120%;
color: #317796; // TODO: put in theme as $primary
h2 {
margin: 0;
font-weight: normal;
}
}
.topic-text {
margin: 0 20px 0 20px;
padding: 25px;

View File

@ -1,5 +1,4 @@
import { Component } from '@angular/core';
import { Location } from '@angular/common';
import { FormGroup, Validators, FormBuilder } from '@angular/forms';
import { ActivatedRoute, Router } from '@angular/router';
import { Title } from '@angular/platform-browser';
@ -69,7 +68,6 @@ export class TopicDetailComponent extends BaseViewComponent {
* @param translate Handles translations
* @param route Angulars ActivatedRoute
* @param router Angulars Router
* @param location Enables to navigate back
* @param formBuilder Angulars FormBuilder
* @param repo The topic repository
* @param promptService Allows warning before deletion attempts
@ -82,7 +80,6 @@ export class TopicDetailComponent extends BaseViewComponent {
protected translate: TranslateService,
private route: ActivatedRoute,
private router: Router,
private location: Location,
private formBuilder: FormBuilder,
private repo: TopicRepositoryService,
private promptService: PromptService,
@ -128,11 +125,8 @@ export class TopicDetailComponent extends BaseViewComponent {
if (!this.topicForm.value.agenda_parent_id) {
delete this.topicForm.value.agenda_parent_id;
}
const response = await this.repo.create(this.topicForm.value);
this.router.navigate([`/agenda/topics/${response.id}`]);
// after creating a new topic, go "back" to agenda list view
this.location.replaceState('/agenda/');
await this.repo.create(this.topicForm.value);
this.router.navigate([`/agenda/`]);
} else {
this.setEditMode(false);
await this.repo.update(this.topicForm.value, this.topic);

View File

@ -6,9 +6,8 @@
<mat-card class="os-card">
<div class="app-content" translate>
<h4> {{welcomeTitle | translate}} </h4>
<span> {{welcomeText | translate}} </span>
<button mat-button (click)="giveDataStore()">print the dataStore</button>
<h1>{{ welcomeTitle | translate }}</h1>
<!-- TOODO: translate welcomeText-->
<div [innerHTML]="welcomeText"></div>
</div>
</mat-card>

View File

@ -1,9 +1,5 @@
<main>
<mat-card class="os-card">
<h2 translate>Legal notice</h2>
</mat-card>
<h1 class="center spacer-top-20" translate>Legal notice</h1>
<os-legal-notice-content></os-legal-notice-content>
<button mat-raised-button color="accent" routerLink="/login" routerLinkActive="router-link-active" translate>Login</button>
</main>

View File

@ -1,9 +1,5 @@
<main>
<mat-card class="os-card">
<h2 translate>Privacy Policy</h2>
</mat-card>
<h1 class="center spacer-top-20" translate>Privacy Policy</h1>
<os-privacy-policy-content></os-privacy-policy-content>
<button mat-raised-button color="accent" routerLink="/login" routerLinkActive="router-link-active" translate>Login</button>
</main>

View File

@ -1,12 +1,16 @@
<!-- The actual form -->
<header>
<mat-toolbar class="login-logo-bar" color="primary">
<img src="/assets/img/openslides-logo-h-dark-transparent.svg" alt="OpenSlides-logo">
<a routerLink="/login"><img src="/assets/img/openslides-logo-h-dark-transparent.svg" alt="OpenSlides-logo"></a>
</mat-toolbar>
</header>
<main>
<router-outlet></router-outlet>
</main>
<footer class="page-footer">
<os-footer></os-footer>
</footer>
<div class="footer">
<a href='https://openslides.org/' target='_bank'>© Copyright by OpenSlides</a>
&middot;
<a routerLink='/login/legalnotice' translate>Legal notice</a>
&middot;
<a routerLink='/login/privacypolicy' translate>Privacy policy</a>
</div>

View File

@ -4,13 +4,22 @@ header {
mat-toolbar {
min-height: 200px !important;
}
.login-logo-bar {
.login-logo-bar a {
margin-left: auto;
margin-right: auto;
img {
margin-left: auto;
margin-right: auto;
width: 90%;
height: 90%;
max-width: 400px;
}
}
}
.footer {
margin-left: auto;
margin-right: auto;
margin-top: 80px;
font-size: 12px;
text-align: center;
}

View File

@ -1,28 +1,25 @@
.meta-text-block {
padding: 0px;
margin: 20px;
margin-right: 0;
min-width: 10hv;
margin: 20px 10px 20px 0;
min-width: 200px;
mat-card-header {
display: inherit;
padding: 10px;
padding-top: 10px;
margin: 0;
background-color: #eee;
.mat-card-header-text {
margin: 0 10px;
}
mat-card-title {
margin: 0;
font-size: 16px;
font-weight: 400;
.title-container {
display: flex;
justify-content: space-between;
:host ::ng-deep button {
width: 30px;
height: 30px;
line-height: 30px;
}
}
}
}

View File

@ -18,11 +18,11 @@
</form>
</mat-dialog-content>
<mat-dialog-actions>
<button mat-button mat-dialog-close>
<span translate>Cancel</span>
</button>
<!-- The mat-dialog-close directive optionally accepts a value as a result for the dialog. -->
<button mat-button (click)="saveChangeRecommendation()">
<span translate>Save</span>
</button>
<button mat-button mat-dialog-close>
<span translate>Cancel</span>
</button>
</mat-dialog-actions>

View File

@ -75,15 +75,15 @@ export class MotionChangeRecommendationComponent extends BaseViewComponent {
public replacementTypes = [
{
value: ModificationType.TYPE_REPLACEMENT,
title: 'Replacement'
title: this.translate.instant('Replacement')
},
{
value: ModificationType.TYPE_INSERTION,
title: 'Insertion'
title: this.translate.instant('Insertion')
},
{
value: ModificationType.TYPE_DELETION,
title: 'Deletion'
title: this.translate.instant('Deletion')
}
];

View File

@ -77,7 +77,7 @@
[matMenuTriggerFor]="changeRecommendationMenu"
[matMenuTriggerData]="{ change: change }"
>
<mat-icon>more_vert</mat-icon>
<mat-icon>more_horiz</mat-icon>
</button>
<!--

View File

@ -15,6 +15,10 @@
}
}
.mat-icon-button {
margin-top: -20px;
}
.action-row {
font-size: 0.8em;
padding-top: 5px;
@ -54,7 +58,7 @@
border: solid 1px #ddd;
border-radius: 3px;
margin-bottom: 5px;
padding: 5px 5px 0 5px;
padding: 5px 10px;
a,
a:link,

View File

@ -105,9 +105,9 @@
</os-head-bar>
<!-- Title -->
<div class="motion-title on-transition-fade" *ngIf="motion && !editMotion">
<h2>{{ motion.title }}</h2>
</div>
<h1 class="title-left on-transition-fade" *ngIf="motion && !editMotion">
{{ motion.title }}
</h1>
<ng-container *ngIf="vp.isMobile; then mobileView; else desktopView"></ng-container>
@ -160,7 +160,9 @@
</div>
<div class="desktop-right ">
<!-- Content -->
<mat-card> <ng-container *ngTemplateOutlet="contentTemplate"></ng-container> </mat-card>
<mat-card [ngClass]="editMotion ? 'os-form-card' : 'os-card'">
<ng-container *ngTemplateOutlet="contentTemplate"></ng-container>
</mat-card>
</div>
</div>
</ng-template>
@ -354,7 +356,7 @@
</div>
<!-- Submitter -->
<div *ngIf="newMotion" class="content-field form100">
<div *ngIf="newMotion" class="content-field">
<div *osPerms="['motions.can_manage', 'motions.can_manage_metadata']">
<os-search-value-selector
ngDefaultControl
@ -452,9 +454,9 @@
<div class="extra-data">
<!-- Attachments -->
<div *ngIf="motion.hasAttachments() || editMotion" class="content-field form100">
<div *ngIf="motion.hasAttachments() || editMotion" class="content-field">
<div *ngIf="!editMotion">
<h4 translate>Attachments</h4>
<h3>{{ "Attachments" | translate }}<mat-icon>attach_file</mat-icon></h3>
<mat-list dense>
<mat-list-item *ngFor="let file of motion.attachments">
<a [routerLink]="" (click)="onClickAttacment(file)">{{ file.title }}</a>
@ -474,7 +476,7 @@
</div>
<!-- Category form -->
<div class="content-field form100" *ngIf="newMotion && categoryObserver.value.length > 0">
<div class="content-field" *ngIf="newMotion && categoryObserver.value.length > 0">
<os-search-value-selector
ngDefaultControl
[form]="contentForm"
@ -487,7 +489,7 @@
</div>
<!-- Parent item -->
<div class="content-field form100" *ngIf="newMotion && agendaItemObserver.value.length > 0">
<div class="content-field" *ngIf="newMotion && agendaItemObserver.value.length > 0">
<os-search-value-selector
ngDefaultControl
[form]="contentForm"
@ -500,7 +502,7 @@
</div>
<!-- Visibility -->
<div class="content-field form100" *ngIf="newMotion">
<div class="content-field" *ngIf="newMotion">
<mat-form-field>
<mat-select formControlName="agenda_type" placeholder="{{ 'Agenda visibility' | translate }}">
<mat-option *ngFor="let type of itemVisibility" [value]="type.key">
@ -511,7 +513,7 @@
</div>
<!-- Supporter form -->
<div class="content-field form100" *ngIf="editMotion && minSupporters">
<div class="content-field" *ngIf="editMotion && minSupporters">
<div *osPerms="['motions.can_manage', 'motions.can_manage_metadata']">
<os-search-value-selector
ngDefaultControl
@ -525,7 +527,7 @@
</div>
<!-- Workflow -->
<div class="content-field form100" *ngIf="editMotion && workflowObserver.value.length > 1">
<div class="content-field" *ngIf="editMotion && workflowObserver.value.length > 1">
<div *osPerms="['motions.can_manage', 'motions.can_manage_metadata']">
<os-search-value-selector
ngDefaultControl
@ -539,7 +541,7 @@
</div>
<!-- Origin form -->
<div class="content-field form100" *ngIf="editMotion">
<div class="content-field" *ngIf="editMotion">
<div *osPerms="['motions.can_manage', 'motions.can_manage_metadata']">
<mat-form-field>
<input

View File

@ -17,18 +17,6 @@ span {
}
}
.motion-title {
padding: 40px;
padding-left: 25px;
line-height: 180%;
font-size: 120%;
color: #317796; // TODO: put in theme as $primary
h2 {
margin: 0;
font-weight: normal;
}
}
.motion-content {
display: flow-root;
}
@ -70,14 +58,14 @@ span {
h4 {
margin: 10px 10px 15px 0;
display: block;
font-weight: bold;
font-weight: 500;
font-size: 110%;
}
h5 {
margin: 15px 10px 10px 0;
display: block;
font-weight: bold;
font-weight: 500;
font-size: 100%;
}
@ -88,7 +76,7 @@ span {
//the assembly may decide ...
.text-prefix-label {
display: block;
margin: 0 10px 7px 0px;
margin: 0 10px 20px 0px;
}
.extra-data {
@ -97,25 +85,9 @@ span {
.content-field {
display: inline-block;
::ng-deep {
.mat-form-field {
width: 100%;
}
}
}
.form100 {
width: 100%;
}
.form70 {
width: 70%;
}
.form30 {
width: 30%;
}
.form-id-title {
display: flex;
@ -135,21 +107,24 @@ span {
.desktop-left {
width: 30%;
float: left;
.meta-info-desktop {
padding-left: 20px;
}
padding-left: 65px;
padding-right: 25px;
}
.desktop-right {
display: grid;
min-width: 70%;
min-width: calc(70% - 90px);
mat-card {
display: inline;
margin: 0px 40px 10px 10px;
}
.os-card {
width: 900px;
margin-left: 0 !important;
margin-top: 0 !important;
}
}
}

View File

@ -614,7 +614,7 @@ export class MotionDetailComponent extends BaseViewComponent implements OnInit {
* Trigger to delete the motion.
*/
public async deleteMotionButton(): Promise<void> {
const content = this.translate.instant('Are you sure you want to delete this motion block?');
const content = this.translate.instant('Are you sure you want to delete this motion?');
if (await this.promptService.open(this.motion.title, content)) {
await this.repo.delete(this.motion);
this.router.navigate(['./motions/']);

View File

@ -137,11 +137,6 @@
<span translate>Categories</span>
</button>
<button mat-menu-item routerLink="blocks">
<!-- possible icons:
dashboard
widgets
view_module
-->
<mat-icon>widgets</mat-icon>
<span translate>Motion blocks</span>
</button>
@ -153,7 +148,10 @@
<mat-icon>speaker_notes</mat-icon>
<span translate>Comment fields</span>
</button>
<button mat-menu-item routerLink="/tags" *osPerms="'core.can_manage_tags'">
<mat-icon>local_offer</mat-icon>
<span translate>Tags</span>
</button>
<button mat-menu-item (click)="csvExportMotionList()">
<mat-icon>archive</mat-icon>
<span translate>Export as CSV</span>

View File

@ -22,7 +22,7 @@
padding-left: 10px;
.motion-list-title {
font-weight: bold;
font-weight: 500;
font-size: 16px;
}

View File

@ -32,4 +32,3 @@
</button>
</ng-container>
</os-meta-text-block>

View File

@ -17,7 +17,7 @@
<!-- User Menu -->
<mat-expansion-panel class="user-menu mat-elevation-z0">
<mat-expansion-panel-header>
<mat-expansion-panel-header class="username">
<!-- Get the username from operator -->
{{ username }}
</mat-expansion-panel-header>
@ -34,7 +34,6 @@
<mat-icon>vpn_key</mat-icon>
<span translate>Change password</span>
</a>
<mat-divider></mat-divider>
<a *ngIf="isLoggedIn" (click)="logout()" mat-list-item>
<mat-icon>exit_to_app</mat-icon>
<span translate>Logout</span>
@ -54,13 +53,6 @@
<!-- navigation -->
<mat-nav-list class="main-nav">
<form [formGroup]="searchform" (submit)="search()" *ngIf="showSearch">
<mat-form-field>
<input matInput formControlName="query" placeholder="{{ 'Search' | translate }}" />
<button mat-icon-button matSuffix><mat-icon>search</mat-icon></button>
</mat-form-field>
</form>
<span *ngFor="let entry of mainMenuService.entries">
<a
[@navItemAnim]
@ -75,7 +67,6 @@
<span>{{ entry.displayName | translate }}</span>
</a>
</span>
<mat-divider></mat-divider>
<a
[@navItemAnim]
*osPerms="'core.can_see_projector'"
@ -87,16 +78,53 @@
<mat-icon>videocam</mat-icon>
<span translate>Projector</span>
</a>
<mat-divider></mat-divider>
<a
[@navItemAnim]
mat-list-item
routerLink="/search"
routerLinkActive="active"
(click)="toggleSideNav()"
>
<mat-icon>search</mat-icon>
<span translate>Search</span>
</a>
<a
[@navItemAnim]
mat-list-item
routerLink="/legalnotice"
routerLinkActive="active"
(click)="toggleSideNav()"
>
<mat-icon>info</mat-icon>
<span translate>Legal notice</span>
</a>
<a
[@navItemAnim]
mat-list-item
routerLink="/privacypolicy"
routerLinkActive="active"
(click)="toggleSideNav()"
>
<mat-icon>security</mat-icon>
<span translate>Privacy policy</span>
</a>
<a
[@navItemAnim]
mat-list-item
href="https://openslides.org"
target="_blank"
(click)="toggleSideNav()"
>
<span><small>© Copyright by OpenSlides</small></span>
</a>
</mat-nav-list>
</mat-sidenav>
<mat-sidenav-content>
<div (touchstart)="swipe($event, 'start')" (touchend)="swipe($event, 'end')" class="content">
<div class="relax">
<main [@pageTransition]="o.isActivated ? o.activatedRoute : ''">
<router-outlet #o="outlet"></router-outlet>
</main>
<footer><os-footer></os-footer></footer>
</div>
<main [@pageTransition]="o.isActivated ? o.activatedRoute : ''">
<router-outlet #o="outlet"></router-outlet>
</main>
</div>
</mat-sidenav-content>
</mat-sidenav-container>

View File

@ -1,13 +1,42 @@
.projector-button {
position: fixed;
bottom: 10px;
right: 20px;
/* Main navigation */
mat-sidenav-container {
height: 100vh;
width: 100%;
mat-sidenav.side-panel {
border: 0;
box-shadow: 3px 0px 10px 0px rgba(0, 0, 0, 0.2);
width: 260px;
mat-toolbar,
mat-toolbar-row {
height: 80px;
}
mat-nav-list {
padding-top: 0;
padding-bottom: 20px;
}
mat-nav-list.main-nav {
border-top-width: 1px;
border-top-style: solid;
span {
font-weight: 400;
}
}
mat-icon {
min-width: 20px; //puts the text to the right on the same level
margin-right: 25px;
}
}
}
/* Logo container */
.os-logo-container {
width: 200px;
margin-left: 10px;
background-image: url(/assets/img/openslides-logo-h-dark-transparent.svg);
background-image: url(/assets/img/openslides-logo-h.svg);
background-size: contain;
background-repeat: no-repeat;
background-position: center;
@ -20,31 +49,26 @@
outline: none;
}
.side-panel {
border: 0;
box-shadow: 3px 0px 10px 0px rgba(0, 0, 0, 0.2);
width: 260px;
}
/* Content container */
.content {
min-height: 100%;
position: relative;
main {
display: flex;
flex-direction: column;
width: 100%;
position: relative;
z-index: 50;
flex: 1;
> *:not(router-outlet) {
flex: 1;
display: block;
}
}
}
mat-sidenav-container {
height: 100vh;
width: 100%;
}
.main-nav form {
margin: 0 1em;
}
.relax {
position: initial;
padding-bottom: 70px;
}
/* History mode top bar*/
.history-mode-indicator {
position: fixed;
width: 100%;
@ -69,16 +93,3 @@ mat-sidenav-container {
color: #000000;
}
}
main {
display: flex;
flex-direction: column;
width: 100%;
position: relative;
z-index: 50;
flex: 1;
> *:not(router-outlet) {
flex: 1;
display: block;
}
}

View File

@ -8,74 +8,28 @@
$foreground: map-get($theme, foreground);
$background: map-get($theme, background);
/** the name of the selector */
os-site {
mat-sidenav-container {
/** nav panel on the left */
mat-sidenav {
/** rules for icons in the whole site-view */
mat-icon {
min-width: 20px; //puts the text to the right on the same level
margin-right: 10px; // the distance from the icon to the text
}
}
}
/** adjust the color of the main container to our theme */
/* main background color */
.main-container {
background-color: mat-color($background, background);
background-color: $os-background;
}
/** change the nav-toolbar to the darker nuance of the current theme*/
.nav-toolbar {
height: 80px;
background-color: mat-color($primary, darker);
mat-toolbar-row {
height: 80px;
}
background-color: mat-color($background, card); //TODO
}
/** make the .user-menu expansion panel look like the nav-toolbar above */
.user-menu {
background: mat-color($primary, darker);
// background-color: mat-color($primary, darker);
color: mat-color($background, raised-button);
min-height: 48px;
/** color of the divider just above the log out button */
mat-divider {
border-top-color: rgba(255, 255, 255, 0.25);
}
mat-icon {
color: mat-color($background, raised-button);
}
span {
color: mat-color($background, raised-button);
}
.mat-expansion-indicator:after {
color: mat-color($background, raised-button);
}
.mat-expansion-panel-header {
padding: 0 16px !important;
}
.mat-expansion-panel-header:hover {
// prevent the panel to become white after collapse
background: mat-color($primary, darker) !important;
}
/* seperator */
mat-nav-list.main-nav,
mat-divider {
border-top-color: $os-outline;
}
/** style and align the nav icons the icons*/
.main-nav {
.main-nav,
.user-menu {
mat-icon {
color: mat-color($foreground, icon);
}
span {
font-weight: bold;
color: mat-color($foreground, text);
}
}
@ -83,10 +37,10 @@
/** style the active link */
.active {
mat-icon {
color: mat-color($primary);
color: $os-primary;
}
span {
color: mat-color($primary);
color: $os-primary;
}
}
}

View File

@ -52,11 +52,6 @@ export class SiteComponent extends BaseComponent implements OnInit {
*/
public searchform: FormGroup;
/**
* Flag, if the search bar shoud be shown.
*/
public showSearch: boolean;
/**
* Constructor
*
@ -93,12 +88,6 @@ export class SiteComponent extends BaseComponent implements OnInit {
});
this.searchform = new FormGroup({ query: new FormControl([]) });
this.router.events.subscribe(event => {
if (event instanceof NavigationEnd) {
this.showSearch = !this.router.url.startsWith('/search');
}
});
}
/**

View File

@ -3,14 +3,5 @@ import { Tag } from '../../shared/models/core/tag';
export const TagAppConfig: AppConfig = {
name: 'tag',
models: [{ collectionString: 'core/tag', model: Tag, searchOrder: 8 }],
mainMenuEntries: [
{
route: '/tags',
displayName: 'Tags',
icon: 'turned_in',
weight: 1100,
permission: 'core.can_manage_tags'
}
]
models: [{ collectionString: 'core/tag', model: Tag, searchOrder: 8 }]
};

View File

@ -8,12 +8,10 @@
>
<!-- Title -->
<div class="title-slot">
<h2 *ngIf="editUser">
{{ personalInfoForm.get('title').value }} {{ personalInfoForm.get('first_name').value }}
{{ personalInfoForm.get('last_name').value }}
<h2>
<span *ngIf="newUser" translate>New participant</span>
<span *ngIf="!newUser">{{ user.full_name }}</span>
</h2>
<h2 *ngIf="!editUser">{{ user.full_name }}</h2>
</div>
<!-- Menu -->
@ -35,7 +33,7 @@
</mat-menu>
</os-head-bar>
<mat-card class="os-card" *osPerms="'users.can_see_name'">
<mat-card [ngClass]="editUser ? 'os-form-card' : 'os-card'" *osPerms="'users.can_see_name'">
<form
[ngClass]="{ 'mat-form-field-enabled': editUser }"
[formGroup]="personalInfoForm"
@ -46,7 +44,7 @@
<div *ngIf="isAllowed('seeName')">
<!-- Title -->
<mat-form-field
class="form30 distance force-min-with"
class="form16 distance force-min-with"
*ngIf="user.title || (editUser && isAllowed('manage'))">
<input
type="text"
@ -59,7 +57,7 @@
<!-- First name -->
<mat-form-field
class="form30 distance force-min-with"
class="form37 distance force-min-with"
*ngIf="user.first_name || (editUser && isAllowed('manage'))">
<input
type="text"
@ -70,7 +68,9 @@
</mat-form-field>
<!-- Last name -->
<mat-form-field class="form30 force-min-with" *ngIf="user.last_name || (editUser && isAllowed('manage'))">
<mat-form-field
class="form37 force-min-with"
*ngIf="user.last_name || (editUser && isAllowed('manage'))">
<input
type="text"
matInput
@ -82,7 +82,7 @@
<div *ngIf="isAllowed('seePersonal')">
<!-- E-Mail -->
<mat-form-field class="form100" *ngIf="user.email || editUser">
<mat-form-field *ngIf="user.email || editUser">
<input
type="email"
matInput
@ -109,7 +109,7 @@
<!-- Participant Number -->
<mat-form-field
class="form20 force-min-with"
class="form25 force-min-with"
*ngIf="user.participant_number || (editUser && isAllowed('manage'))">
<input
type="text"
@ -122,7 +122,7 @@
<div>
<!-- Groups -->
<mat-form-field class="form100" *ngIf="(user.groups && user.groups.length > 0) || editUser">
<mat-form-field *ngIf="(user.groups && user.groups.length > 0) || editUser">
<mat-select placeholder="{{ 'Groups' | translate }}" formControlName="groups_id" multiple>
<mat-option *ngFor="let group of groups" [value]="group.id">{{ group }}</mat-option>
</mat-select>
@ -131,7 +131,7 @@
<div *ngIf="isAllowed('manage')">
<!-- Initial Password -->
<mat-form-field class="form100">
<mat-form-field>
<input
matInput
placeholder="{{ 'Initial password' | translate }}"
@ -151,7 +151,7 @@
</div>
<!-- About me -->
<div *ngIf="isAllowed('seePersonal')">
<div *ngIf="isAllowed('seePersonal')" class="spacer-bottom-20">
<!-- The HTML Editor -->
<h4 translate *ngIf="user.about_me || editUser">About me</h4>
<editor formControlName="about_me" [init]="tinyMceSettings" *ngIf="editUser"></editor>
@ -160,7 +160,7 @@
<div *ngIf="isAllowed('seePersonal')">
<!-- username -->
<mat-form-field class="form100" *ngIf="user.username || editUser">
<mat-form-field *ngIf="user.username || editUser">
<input
type="text"
matInput
@ -172,7 +172,7 @@
<div *ngIf="isAllowed('seeExtra')">
<!-- Comment -->
<mat-form-field class="form100" *ngIf="user.comment || editUser">
<mat-form-field *ngIf="user.comment || editUser">
<input
matInput
placeholder="{{ 'Comment' | translate }}"
@ -182,7 +182,7 @@
</mat-form-field>
</div>
<div *ngIf="isAllowed('seeExtra')">
<div *ngIf="isAllowed('seeExtra')" class="spacer-top-20">
<!-- Present? -->
<mat-checkbox
formControlName="is_present"

View File

@ -29,34 +29,34 @@
// angular material does not have this class. This is virtually set using ngClass
.mat-form-field-enabled {
.form100 {
::ng-deep {
width: 100%;
}
}
.form70 {
::ng-deep {
width: 70%;
}
}
.force-min-with {
min-width: 150px;
}
.form30 {
.form37 {
::ng-deep {
width: 30%;
width: 37%;
}
}
.form20 {
.form25 {
::ng-deep {
width: 25%;
}
}
.form16 {
::ng-deep {
width: 16%;
}
}
.force-min-with {
min-width: 110px;
}
.distance {
padding-right: 5%;
}

View File

@ -288,9 +288,9 @@ export class UserDetailComponent extends BaseViewComponent implements OnInit {
public async saveUser(): Promise<void> {
try {
if (this.newUser) {
const response = await this.repo.create(this.personalInfoForm.value);
this.newUser = false;
this.router.navigate([`./users/${response.id}`]);
await this.repo.create(this.personalInfoForm.value);
this.router.navigate([`./users/`]);
} else {
// TODO (Issue #3962): We need a waiting-State, so if autoupdates come before the response,
// the user is also updated.

View File

@ -0,0 +1,618 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://opensource.org/licenses/MIT"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Ebene_3"
x="0px"
y="0px"
width="1079.0952"
height="214.49588"
viewBox="0 0 1079.0951 214.49587"
enable-background="new 0 0 841.89 595.28"
xml:space="preserve"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="openslides-logo-h.svg"
inkscape:export-xdpi="20.85"
inkscape:export-ydpi="20.85"><metadata
id="metadata461"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /><dc:creator><cc:Agent><dc:title>OpenSlides Team</dc:title></cc:Agent></dc:creator></cc:Work></rdf:RDF></metadata><defs
id="defs459">
</defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1672"
inkscape:window-height="978"
id="namedview457"
showgrid="false"
showguides="false"
inkscape:guide-bbox="true"
inkscape:zoom="0.38169128"
inkscape:cx="1239.4445"
inkscape:cy="-221.79039"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="Ebene_3"
fit-margin-top="40"
fit-margin-left="40"
fit-margin-right="40"
fit-margin-bottom="25"
units="px"><sodipodi:guide
orientation="0,1"
position="258.25847,-243.74238"
id="guide3558" /><sodipodi:guide
orientation="0,1"
position="226.61305,-187.79779"
id="guide3560" /></sodipodi:namedview>
<g
id="g5094"
transform="matrix(2.0781875,0,0,2.0781875,39.999967,39.999828)"><g
transform="translate(-154.63686,-116.56793)"
id="g7">
<path
d="m 334.257,126.401 c 3.222,1.985 5.696,4.867 7.423,8.649 1.727,3.782 2.591,8.358 2.591,13.726 0,5.276 -0.865,9.816 -2.591,13.621 -1.728,3.806 -4.202,6.712 -7.423,8.719 -3.221,2.007 -7.05,3.011 -11.485,3.011 -4.436,0 -8.276,-0.993 -11.521,-2.977 -3.245,-1.984 -5.731,-4.878 -7.458,-8.684 -1.728,-3.805 -2.591,-8.369 -2.591,-13.691 0,-5.228 0.875,-9.745 2.626,-13.551 1.751,-3.805 4.248,-6.723 7.494,-8.754 3.244,-2.031 7.061,-3.046 11.45,-3.046 4.435,10e-4 8.264,0.994 11.485,2.977 z m -19.503,8.93 c -1.798,2.801 -2.696,7.283 -2.696,13.446 0,6.163 0.91,10.645 2.731,13.446 1.821,2.801 4.482,4.202 7.984,4.202 3.547,0 6.208,-1.389 7.983,-4.167 1.774,-2.777 2.661,-7.271 2.661,-13.481 0,-6.208 -0.887,-10.703 -2.661,-13.481 -1.775,-2.777 -4.436,-4.167 -7.983,-4.167 -3.549,0 -6.223,1.4 -8.019,4.202 z"
id="path9"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 377.361,139.917 c 2.264,3.432 3.396,8.253 3.396,14.461 0,3.782 -0.584,7.167 -1.75,10.155 -1.167,2.988 -2.86,5.334 -5.077,7.038 -2.218,1.704 -4.844,2.556 -7.879,2.556 -3.782,0 -6.84,-1.331 -9.174,-3.992 v 17.157 l -9.944,1.121 V 135.89 h 8.754 l 0.49,4.342 c 1.4,-1.821 3.046,-3.187 4.937,-4.097 1.891,-0.91 3.792,-1.365 5.708,-1.365 4.761,10e-4 8.274,1.716 10.539,5.147 z m -6.968,14.532 c 0,-4.482 -0.549,-7.657 -1.646,-9.524 -1.098,-1.867 -2.766,-2.801 -5.007,-2.801 -1.354,0 -2.615,0.432 -3.781,1.295 -1.168,0.865 -2.195,2.02 -3.082,3.467 v 16.177 c 1.586,2.428 3.665,3.642 6.233,3.642 4.855,0 7.283,-4.085 7.283,-12.256 z"
id="path11"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 416.333,157.46 h -23.18 c 0.326,3.361 1.236,5.743 2.731,7.143 1.493,1.401 3.524,2.101 6.092,2.101 1.587,0 3.082,-0.256 4.482,-0.771 1.4,-0.513 2.917,-1.331 4.552,-2.451 l 4.132,5.603 c -4.156,3.362 -8.848,5.042 -14.076,5.042 -5.837,0 -10.319,-1.751 -13.446,-5.252 -3.129,-3.501 -4.692,-8.24 -4.692,-14.216 0,-3.782 0.666,-7.178 1.996,-10.189 1.33,-3.011 3.267,-5.38 5.813,-7.108 2.544,-1.727 5.567,-2.591 9.069,-2.591 5.275,0 9.384,1.658 12.326,4.972 2.941,3.315 4.412,7.938 4.412,13.866 -10e-4,0.467 -0.071,1.75 -0.211,3.851 z m -9.664,-6.652 c 0,-6.163 -2.218,-9.244 -6.653,-9.244 -2.055,0 -3.654,0.759 -4.797,2.276 -1.145,1.518 -1.833,3.981 -2.066,7.388 h 13.516 v -0.42 z"
id="path13"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 447.355,137.747 c 1.821,1.985 2.732,4.727 2.732,8.229 v 27.032 h -9.945 v -25.351 c 0,-2.007 -0.339,-3.42 -1.016,-4.237 -0.677,-0.816 -1.692,-1.225 -3.046,-1.225 -1.4,0 -2.673,0.432 -3.817,1.295 -1.145,0.864 -2.252,2.16 -3.326,3.887 v 25.631 h -9.944 v -37.117 h 8.614 l 0.77,4.692 c 1.541,-1.914 3.232,-3.362 5.078,-4.342 1.844,-0.98 3.933,-1.47 6.268,-1.47 3.267,0 5.812,0.992 7.632,2.976 z"
id="path15"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 481.566,124.931 c 2.592,1.004 4.983,2.533 7.178,4.587 l -4.972,5.743 c -1.681,-1.447 -3.386,-2.497 -5.112,-3.152 -1.728,-0.653 -3.572,-0.98 -5.532,-0.98 -2.147,0 -3.864,0.455 -5.147,1.365 -1.285,0.911 -1.926,2.206 -1.926,3.887 0,1.167 0.268,2.125 0.805,2.872 0.537,0.747 1.482,1.448 2.837,2.101 1.354,0.655 3.384,1.401 6.093,2.241 4.809,1.541 8.404,3.443 10.785,5.708 2.381,2.265 3.571,5.498 3.571,9.699 0,2.988 -0.747,5.615 -2.241,7.878 -1.494,2.265 -3.666,4.039 -6.513,5.323 -2.849,1.283 -6.187,1.926 -10.015,1.926 -3.828,0 -7.237,-0.607 -10.225,-1.821 -2.988,-1.214 -5.557,-2.872 -7.703,-4.972 l 5.393,-5.883 c 3.547,3.269 7.633,4.902 12.255,4.902 2.521,0 4.54,-0.583 6.058,-1.751 1.518,-1.167 2.276,-2.801 2.276,-4.902 0,-1.306 -0.27,-2.392 -0.806,-3.256 -0.537,-0.863 -1.459,-1.646 -2.766,-2.346 -1.309,-0.701 -3.199,-1.424 -5.673,-2.171 -5.276,-1.633 -9.046,-3.594 -11.31,-5.882 -2.266,-2.287 -3.396,-5.275 -3.396,-8.964 0,-2.708 0.723,-5.101 2.17,-7.178 1.447,-2.077 3.455,-3.677 6.023,-4.797 2.566,-1.121 5.485,-1.681 8.754,-1.681 3.503,-0.002 6.548,0.501 9.139,1.504 z"
id="path17"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 504.991,165.514 c 0.326,0.467 0.815,0.7 1.471,0.7 0.793,0 1.471,-0.14 2.03,-0.42 l 2.031,7.073 c -2.055,0.84 -4.296,1.261 -6.723,1.261 -2.941,0 -5.218,-0.853 -6.828,-2.556 -1.611,-1.704 -2.416,-4.167 -2.416,-7.388 v -43.069 l 9.944,-1.121 v 43.279 c 10e-4,1.027 0.164,1.775 0.491,2.241 z"
id="path19"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 524.214,118.418 c 1.144,1.098 1.716,2.486 1.716,4.167 0,1.681 -0.572,3.07 -1.716,4.167 -1.145,1.097 -2.603,1.646 -4.377,1.646 -1.774,0 -3.222,-0.548 -4.342,-1.646 -1.12,-1.097 -1.681,-2.486 -1.681,-4.167 0,-1.681 0.561,-3.069 1.681,-4.167 1.12,-1.096 2.567,-1.646 4.342,-1.646 1.775,0 3.232,0.55 4.377,1.646 z m -9.278,54.589 V 135.89 h 9.943 v 37.117 h -9.943 z"
id="path21"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 563.326,173.007 h -8.754 l -0.561,-4.552 c -2.615,3.782 -6.162,5.673 -10.645,5.673 -4.576,0 -8.065,-1.762 -10.469,-5.288 -2.406,-3.524 -3.607,-8.322 -3.607,-14.391 0,-3.828 0.618,-7.224 1.855,-10.189 1.236,-2.964 3,-5.288 5.287,-6.968 2.287,-1.68 4.973,-2.521 8.055,-2.521 1.727,0 3.35,0.339 4.867,1.015 1.516,0.677 2.859,1.576 4.026,2.696 v -18.488 l 9.944,1.121 v 51.892 z m -13.096,-7.423 c 1.121,-0.746 2.171,-1.867 3.151,-3.361 v -16.598 c -0.98,-1.167 -1.961,-2.042 -2.941,-2.626 -0.98,-0.583 -2.125,-0.875 -3.432,-0.875 -2.288,0 -4.085,1.004 -5.392,3.011 -1.309,2.008 -1.961,5.112 -1.961,9.314 0,4.436 0.57,7.587 1.715,9.454 1.145,1.868 2.813,2.801 5.008,2.801 1.447,0.001 2.731,-0.372 3.852,-1.12 z"
id="path23"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 601.494,157.46 h -23.182 c 0.326,3.361 1.236,5.743 2.732,7.143 1.492,1.401 3.523,2.101 6.092,2.101 1.587,0 3.082,-0.256 4.482,-0.771 1.4,-0.513 2.917,-1.331 4.552,-2.451 l 4.132,5.603 c -4.156,3.362 -8.848,5.042 -14.076,5.042 -5.837,0 -10.318,-1.751 -13.445,-5.252 -3.129,-3.501 -4.693,-8.24 -4.693,-14.216 0,-3.782 0.666,-7.178 1.996,-10.189 1.331,-3.011 3.268,-5.38 5.813,-7.108 2.545,-1.727 5.568,-2.591 9.069,-2.591 5.275,0 9.384,1.658 12.325,4.972 2.941,3.315 4.412,7.938 4.412,13.866 0,0.467 -0.07,1.75 -0.209,3.851 z m -9.665,-6.652 c 0,-6.163 -2.218,-9.244 -6.653,-9.244 -2.055,0 -3.653,0.759 -4.797,2.276 -1.145,1.518 -1.833,3.981 -2.066,7.388 h 13.517 v -0.42 z"
id="path25"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 634.127,139.252 -3.781,5.813 c -3.035,-2.054 -6.023,-3.082 -8.965,-3.082 -1.727,0 -3.059,0.304 -3.99,0.911 -0.936,0.607 -1.402,1.425 -1.402,2.451 0,0.747 0.199,1.377 0.596,1.891 0.396,0.514 1.145,1.004 2.242,1.471 1.096,0.467 2.742,1.027 4.936,1.681 3.922,1.075 6.84,2.51 8.754,4.307 1.914,1.798 2.873,4.261 2.873,7.388 0,2.475 -0.713,4.622 -2.137,6.443 -1.424,1.821 -3.352,3.21 -5.777,4.167 -2.428,0.956 -5.137,1.436 -8.123,1.436 -3.129,0 -5.979,-0.479 -8.545,-1.436 -2.568,-0.957 -4.762,-2.276 -6.582,-3.957 l 4.971,-5.532 c 1.402,1.167 2.941,2.078 4.623,2.731 1.68,0.654 3.408,0.98 5.182,0.98 1.914,0 3.42,-0.361 4.518,-1.085 1.096,-0.723 1.646,-1.692 1.646,-2.906 0,-0.98 -0.211,-1.762 -0.631,-2.346 -0.42,-0.583 -1.191,-1.121 -2.311,-1.61 -1.121,-0.49 -2.871,-1.062 -5.254,-1.716 -3.734,-1.026 -6.502,-2.486 -8.297,-4.377 -1.799,-1.891 -2.697,-4.237 -2.697,-7.038 0,-2.101 0.605,-3.992 1.82,-5.673 1.215,-1.681 2.93,-2.999 5.148,-3.957 2.217,-0.957 4.797,-1.436 7.738,-1.436 5.228,0 9.709,1.494 13.445,4.481 z"
id="path27"
inkscape:connector-curvature="0"
style="fill:#002c42" />
</g><g
transform="matrix(1.2794416,0,0,1.2794416,-241.04704,-149.41913)"
id="g29">
<path
d="m 231.138,168.561 h 15.136 c 1.645,0 2.965,0.99 2.965,2.225 0,1.231 -1.32,2.223 -2.965,2.223 h -15.136 c -1.646,0 -2.969,-0.992 -2.969,-2.223 0,-1.235 1.322,-2.225 2.969,-2.225 z"
id="path31"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<g
id="g33">
<path
d="m 224.244,127.652 c 1.516,0.284 2.521,1.745 2.243,3.26 -0.284,1.519 -1.747,2.523 -3.258,2.239 -1.522,-0.277 -2.526,-1.736 -2.241,-3.258 0.278,-1.519 1.739,-2.519 3.256,-2.241 z"
id="path35"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 248.342,127.971 c -0.113,-1.547 -1.455,-2.703 -2.995,-2.586 -1.539,0.114 -2.695,1.456 -2.584,2.996 0.112,1.54 1.455,2.697 2.995,2.576 1.539,-0.111 2.696,-1.453 2.584,-2.986 z"
id="path37"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 254.698,130.199 c -0.111,-1.541 -1.447,-2.698 -2.986,-2.584 -1.54,0.119 -2.696,1.454 -2.586,3 0.115,1.532 1.456,2.69 2.996,2.576 1.54,-0.111 2.698,-1.453 2.576,-2.992 z"
id="path39"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 228.791,118.638 c -1.282,-0.857 -3.021,-0.527 -3.888,0.749 -0.857,1.282 -0.528,3.014 0.748,3.887 1.282,0.864 3.021,0.526 3.886,-0.749 0.866,-1.282 0.528,-3.019 -0.746,-3.887 z"
id="path41"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 244.284,119.378 c -0.113,-1.548 -1.454,-2.703 -2.994,-2.585 -1.535,0.114 -2.698,1.456 -2.579,2.995 0.113,1.54 1.454,2.695 2.987,2.577 1.547,-0.111 2.698,-1.453 2.586,-2.987 z"
id="path43"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 244.284,119.378 c -0.113,-1.548 -1.454,-2.703 -2.994,-2.585 -1.535,0.114 -2.698,1.456 -2.579,2.995 0.113,1.54 1.454,2.695 2.987,2.577 1.547,-0.111 2.698,-1.453 2.586,-2.987 z"
id="path45"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 251.567,120.753 c -0.111,-1.54 -1.447,-2.699 -2.995,-2.584 -1.54,0.119 -2.69,1.454 -2.576,2.999 0.112,1.533 1.453,2.691 2.993,2.58 1.54,-0.115 2.69,-1.456 2.578,-2.995 z"
id="path47"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 251.567,120.753 c -0.111,-1.54 -1.447,-2.699 -2.995,-2.584 -1.54,0.119 -2.69,1.452 -2.576,2.999 0.112,1.533 1.453,2.691 2.993,2.58 1.54,-0.115 2.69,-1.456 2.578,-2.995 z"
id="path49"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 255.645,120.877 c 1.521,0.284 2.518,1.74 2.242,3.26 -0.285,1.519 -1.739,2.517 -3.26,2.239 -1.521,-0.284 -2.519,-1.737 -2.24,-3.259 0.284,-1.518 1.745,-2.517 3.258,-2.24 z"
id="path51"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 240.216,140.03 c -1.276,-0.865 -3.016,-0.537 -3.88,0.746 -0.866,1.277 -0.538,3.014 0.746,3.88 1.282,0.867 3.013,0.53 3.88,-0.746 0.866,-1.276 0.529,-3.016 -0.746,-3.88 z"
id="path53"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 248.446,143.145 c -0.111,-1.54 -1.452,-2.694 -2.992,-2.583 -1.541,0.117 -2.698,1.459 -2.584,2.994 0.112,1.54 1.453,2.695 2.993,2.584 1.54,-0.112 2.696,-1.453 2.583,-2.995 z"
id="path55"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 248.446,143.145 c -0.111,-1.54 -1.452,-2.694 -2.992,-2.584 -1.541,0.119 -2.698,1.461 -2.584,2.996 0.112,1.54 1.453,2.695 2.993,2.584 1.54,-0.113 2.696,-1.454 2.583,-2.996 z"
id="path57"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 229.154,134.489 c -1.275,-0.864 -3.018,-0.527 -3.88,0.749 -0.867,1.283 -0.529,3.014 0.745,3.88 1.282,0.871 3.012,0.534 3.881,-0.742 0.868,-1.283 0.534,-3.021 -0.746,-3.887 z"
id="path59"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 236.296,132.867 c -1.277,-0.864 -3.014,-0.533 -3.881,0.749 -0.866,1.275 -0.527,3.015 0.748,3.88 1.279,0.864 3.021,0.527 3.885,-0.749 0.867,-1.276 0.529,-3.013 -0.752,-3.88 z"
id="path61"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 251.567,136.602 c -0.111,-1.539 -1.447,-2.697 -2.995,-2.583 -1.533,0.117 -2.695,1.452 -2.576,2.992 0.112,1.542 1.453,2.697 2.993,2.586 1.54,-0.121 2.698,-1.456 2.578,-2.995 z"
id="path63"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 251.567,136.602 c -0.111,-1.541 -1.447,-2.697 -2.995,-2.583 -1.533,0.117 -2.695,1.452 -2.576,2.992 0.112,1.542 1.453,2.697 2.993,2.586 1.54,-0.121 2.698,-1.456 2.578,-2.995 z"
id="path65"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 243.808,147.482 c -1.282,-0.868 -3.014,-0.531 -3.881,0.745 -0.864,1.282 -0.535,3.02 0.748,3.886 1.275,0.861 3.014,0.53 3.88,-0.746 0.865,-1.281 0.527,-3.012 -0.747,-3.885 z"
id="path67"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 243.808,147.482 c -1.282,-0.868 -3.014,-0.531 -3.881,0.745 -0.864,1.282 -0.535,3.02 0.748,3.886 1.275,0.861 3.014,0.53 3.88,-0.746 0.865,-1.281 0.527,-3.012 -0.747,-3.885 z"
id="path69"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 236.887,147.482 c -1.274,-0.868 -3.014,-0.531 -3.879,0.745 -0.866,1.282 -0.535,3.02 0.746,3.886 1.275,0.861 3.014,0.53 3.881,-0.746 0.865,-1.281 0.528,-3.012 -0.748,-3.885 z"
id="path71"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 236.887,147.482 c -1.274,-0.868 -3.014,-0.531 -3.879,0.745 -0.866,1.282 -0.535,3.02 0.746,3.886 1.275,0.861 3.014,0.53 3.881,-0.746 0.865,-1.281 0.528,-3.012 -0.748,-3.885 z"
id="path73"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 232.399,125.857 c -1.281,-0.867 -3.021,-0.529 -3.887,0.745 -0.866,1.283 -0.528,3.016 0.747,3.887 1.282,0.859 3.015,0.53 3.886,-0.745 0.861,-1.284 0.53,-3.02 -0.746,-3.887 z"
id="path75"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 241.034,127.336 c -0.11,-1.54 -1.451,-2.696 -2.991,-2.579 -1.54,0.114 -2.698,1.456 -2.587,2.995 0.114,1.534 1.456,2.69 2.995,2.577 1.546,-0.111 2.7,-1.453 2.583,-2.993 z"
id="path77"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 221.422,121.313 c -1.276,-0.866 -3.015,-0.537 -3.88,0.745 -0.867,1.278 -0.529,3.015 0.746,3.88 1.282,0.868 3.015,0.537 3.88,-0.738 0.866,-1.282 0.535,-3.027 -0.746,-3.887 z"
id="path79"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 244.284,119.378 c -0.113,-1.548 -1.454,-2.703 -2.994,-2.585 -1.535,0.114 -2.698,1.456 -2.579,2.995 0.113,1.54 1.454,2.695 2.987,2.577 1.547,-0.111 2.698,-1.453 2.586,-2.987 z"
id="path81"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 237.039,119.377 c -0.112,-1.546 -1.454,-2.698 -2.993,-2.584 -1.533,0.112 -2.69,1.454 -2.579,2.992 0.112,1.541 1.455,2.692 2.996,2.58 1.539,-0.115 2.688,-1.456 2.576,-2.988 z"
id="path83"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 251.567,120.753 c -0.111,-1.54 -1.447,-2.699 -2.995,-2.584 -1.54,0.119 -2.69,1.452 -2.576,2.999 0.112,1.533 1.453,2.691 2.993,2.58 1.54,-0.115 2.69,-1.456 2.578,-2.995 z"
id="path85"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 231.97,140.602 c 1.519,0.282 2.523,1.745 2.239,3.257 -0.278,1.521 -1.736,2.525 -3.259,2.242 -1.512,-0.279 -2.518,-1.74 -2.241,-3.258 0.285,-1.523 1.745,-2.52 3.261,-2.241 z"
id="path87"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 248.446,143.145 c -0.111,-1.54 -1.452,-2.694 -2.992,-2.584 -1.541,0.119 -2.698,1.461 -2.584,2.996 0.112,1.54 1.453,2.695 2.993,2.584 1.54,-0.113 2.696,-1.454 2.583,-2.996 z"
id="path89"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 251.567,136.602 c -0.111,-1.541 -1.447,-2.697 -2.995,-2.583 -1.533,0.117 -2.695,1.452 -2.576,2.992 0.112,1.542 1.453,2.697 2.993,2.586 1.54,-0.121 2.698,-1.456 2.578,-2.995 z"
id="path91"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 244.838,134.975 c -0.115,-1.54 -1.456,-2.695 -2.996,-2.583 -1.534,0.117 -2.698,1.459 -2.577,2.999 0.11,1.542 1.445,2.69 2.992,2.579 1.539,-0.113 2.691,-1.455 2.581,-2.995 z"
id="path93"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 243.808,147.482 c -1.282,-0.868 -3.014,-0.531 -3.881,0.745 -0.864,1.282 -0.535,3.02 0.748,3.886 1.275,0.861 3.014,0.53 3.88,-0.746 0.865,-1.281 0.527,-3.012 -0.747,-3.885 z"
id="path95"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 236.887,147.482 c -1.274,-0.868 -3.014,-0.531 -3.879,0.745 -0.866,1.282 -0.535,3.02 0.746,3.886 1.275,0.861 3.014,0.53 3.881,-0.746 0.865,-1.281 0.528,-3.012 -0.748,-3.885 z"
id="path97"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
</g>
<g
id="g99">
<path
d="m 196.938,156.803 c 1.044,-1.134 2.815,-1.213 3.955,-0.173 1.137,1.043 1.212,2.816 0.169,3.949 -1.04,1.143 -2.81,1.22 -3.949,0.173 -1.141,-1.04 -1.215,-2.808 -0.175,-3.949 z"
id="path101"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 209.977,136.537 c -1.369,-0.725 -3.061,-0.2 -3.779,1.17 -0.718,1.367 -0.192,3.057 1.173,3.777 1.364,0.72 3.057,0.196 3.771,-1.173 0.719,-1.365 0.197,-3.055 -1.165,-3.774 z"
id="path103"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 215.234,132.327 c -1.364,-0.722 -3.053,-0.204 -3.774,1.163 -0.714,1.369 -0.194,3.057 1.176,3.782 1.359,0.716 3.051,0.192 3.772,-1.174 0.719,-1.366 0.196,-3.057 -1.174,-3.771 z"
id="path105"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 191.702,148.171 c -1.404,0.633 -2.047,2.282 -1.425,3.693 0.634,1.408 2.277,2.045 3.691,1.426 1.414,-0.63 2.049,-2.284 1.426,-3.693 -0.629,-1.412 -2.278,-2.049 -3.692,-1.426 z"
id="path107"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 200.54,135.425 c -1.371,-0.726 -3.062,-0.2 -3.778,1.167 -0.718,1.363 -0.194,3.059 1.173,3.774 1.368,0.72 3.056,0.197 3.769,-1.168 0.725,-1.369 0.196,-3.054 -1.164,-3.773 z"
id="path109"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 200.54,135.425 c -1.371,-0.726 -3.062,-0.2 -3.778,1.167 -0.718,1.363 -0.194,3.059 1.173,3.774 1.368,0.72 3.056,0.197 3.769,-1.168 0.725,-1.369 0.196,-3.054 -1.164,-3.773 z"
id="path111"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 205.566,129.977 c -1.366,-0.72 -3.055,-0.201 -3.778,1.17 -0.716,1.368 -0.192,3.052 1.177,3.776 1.361,0.717 3.053,0.193 3.774,-1.171 0.719,-1.367 0.191,-3.055 -1.173,-3.775 z"
id="path113"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 205.566,129.977 c -1.366,-0.72 -3.055,-0.201 -3.778,1.17 -0.716,1.368 -0.195,3.052 1.177,3.776 1.361,0.717 3.053,0.193 3.774,-1.171 0.719,-1.367 0.191,-3.055 -1.173,-3.775 z"
id="path115"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 207.832,126.584 c 1.046,-1.138 2.81,-1.214 3.952,-0.173 1.138,1.046 1.214,2.809 0.172,3.951 -1.048,1.138 -2.807,1.214 -3.95,0.174 -1.137,-1.047 -1.212,-2.815 -0.174,-3.952 z"
id="path117"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 215.898,149.818 c -1.412,0.624 -2.056,2.274 -1.424,3.685 0.623,1.413 2.271,2.054 3.686,1.424 1.414,-0.628 2.045,-2.275 1.423,-3.686 -0.622,-1.409 -2.277,-2.045 -3.685,-1.423 z"
id="path119"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 222.901,144.488 c -1.364,-0.723 -3.055,-0.195 -3.777,1.171 -0.717,1.368 -0.192,3.059 1.17,3.777 1.367,0.721 3.057,0.195 3.78,-1.17 0.719,-1.364 0.195,-3.056 -1.173,-3.778 z"
id="path121"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 222.901,144.488 c -1.364,-0.723 -3.055,-0.195 -3.778,1.169 -0.716,1.37 -0.191,3.061 1.171,3.779 1.367,0.721 3.057,0.195 3.78,-1.17 0.719,-1.364 0.195,-3.056 -1.173,-3.778 z"
id="path123"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 205.336,156.264 c -1.407,0.623 -2.045,2.277 -1.421,3.686 0.629,1.414 2.278,2.045 3.687,1.423 1.419,-0.625 2.05,-2.271 1.428,-3.683 -0.63,-1.413 -2.279,-2.054 -3.694,-1.426 z"
id="path125"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 207.746,149.348 c -1.409,0.624 -2.048,2.274 -1.422,3.687 0.622,1.411 2.278,2.045 3.688,1.422 1.411,-0.628 2.047,-2.283 1.422,-3.691 -0.621,-1.412 -2.273,-2.046 -3.688,-1.418 z"
id="path127"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 219.005,138.374 c -1.363,-0.719 -3.054,-0.2 -3.776,1.171 -0.713,1.362 -0.197,3.057 1.173,3.771 1.366,0.722 3.057,0.197 3.779,-1.167 0.714,-1.371 0.194,-3.06 -1.176,-3.775 z"
id="path129"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 219.005,138.374 c -1.363,-0.719 -3.054,-0.2 -3.776,1.171 -0.713,1.362 -0.197,3.057 1.173,3.771 1.366,0.722 3.057,0.197 3.779,-1.167 0.714,-1.371 0.194,-3.06 -1.176,-3.775 z"
id="path131"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 224.12,150.721 c -1.414,0.627 -2.045,2.275 -1.423,3.687 0.629,1.412 2.277,2.053 3.691,1.425 1.407,-0.625 2.047,-2.275 1.425,-3.686 -0.628,-1.413 -2.274,-2.046 -3.693,-1.426 z"
id="path133"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 224.12,150.721 c -1.414,0.627 -2.045,2.275 -1.423,3.687 0.629,1.412 2.277,2.053 3.691,1.425 1.407,-0.625 2.047,-2.275 1.425,-3.686 -0.628,-1.413 -2.274,-2.046 -3.693,-1.426 z"
id="path135"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 220.454,156.59 c -1.412,0.622 -2.047,2.273 -1.424,3.684 0.628,1.414 2.278,2.054 3.691,1.427 1.405,-0.625 2.048,-2.276 1.423,-3.686 -0.627,-1.413 -2.274,-2.046 -3.69,-1.425 z"
id="path137"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 220.454,156.59 c -1.412,0.622 -2.047,2.273 -1.424,3.684 0.628,1.414 2.278,2.054 3.691,1.427 1.405,-0.625 2.048,-2.276 1.423,-3.686 -0.627,-1.413 -2.274,-2.046 -3.69,-1.425 z"
id="path139"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 199.739,148.936 c -1.418,0.628 -2.052,2.282 -1.429,3.689 0.628,1.415 2.276,2.049 3.692,1.428 1.407,-0.633 2.045,-2.273 1.427,-3.691 -0.633,-1.408 -2.28,-2.049 -3.69,-1.426 z"
id="path141"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 205.567,142.396 c -1.363,-0.721 -3.056,-0.197 -3.773,1.171 -0.718,1.366 -0.194,3.058 1.171,3.78 1.361,0.715 3.053,0.191 3.772,-1.175 0.725,-1.368 0.199,-3.055 -1.17,-3.776 z"
id="path143"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 190.066,155.839 c -1.412,0.623 -2.052,2.271 -1.425,3.684 0.624,1.411 2.276,2.046 3.686,1.424 1.416,-0.63 2.054,-2.272 1.431,-3.683 -0.628,-1.412 -2.284,-2.057 -3.692,-1.425 z"
id="path145"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 200.54,135.425 c -1.371,-0.726 -3.062,-0.2 -3.778,1.167 -0.718,1.363 -0.194,3.059 1.173,3.774 1.368,0.72 3.056,0.197 3.769,-1.168 0.725,-1.369 0.196,-3.054 -1.164,-3.773 z"
id="path147"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 196.699,141.568 c -1.37,-0.724 -3.058,-0.196 -3.778,1.169 -0.718,1.358 -0.192,3.052 1.173,3.771 1.366,0.722 3.054,0.194 3.775,-1.171 0.719,-1.368 0.192,-3.053 -1.17,-3.769 z"
id="path149"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 205.566,129.977 c -1.366,-0.72 -3.055,-0.201 -3.778,1.17 -0.716,1.368 -0.195,3.052 1.177,3.776 1.361,0.717 3.053,0.193 3.774,-1.171 0.719,-1.367 0.191,-3.055 -1.173,-3.775 z"
id="path151"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 212.012,157.114 c 1.046,-1.138 2.819,-1.215 3.95,-0.173 1.144,1.041 1.219,2.812 0.175,3.951 -1.037,1.135 -2.808,1.213 -3.951,0.174 -1.141,-1.047 -1.211,-2.816 -0.174,-3.952 z"
id="path153"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 222.901,144.488 c -1.364,-0.723 -3.055,-0.195 -3.778,1.169 -0.716,1.37 -0.191,3.061 1.171,3.779 1.367,0.721 3.057,0.195 3.78,-1.17 0.719,-1.364 0.195,-3.056 -1.173,-3.778 z"
id="path155"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 219.005,138.374 c -1.363,-0.719 -3.054,-0.2 -3.776,1.171 -0.713,1.362 -0.197,3.057 1.173,3.771 1.366,0.722 3.057,0.197 3.779,-1.167 0.714,-1.371 0.194,-3.06 -1.176,-3.775 z"
id="path157"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 214.061,143.221 c -1.367,-0.719 -3.056,-0.193 -3.776,1.171 -0.715,1.363 -0.193,3.061 1.176,3.774 1.368,0.722 3.049,0.2 3.774,-1.172 0.719,-1.364 0.192,-3.051 -1.174,-3.773 z"
id="path159"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 224.12,150.721 c -1.414,0.627 -2.045,2.275 -1.423,3.687 0.629,1.412 2.277,2.053 3.691,1.425 1.407,-0.625 2.047,-2.275 1.425,-3.686 -0.628,-1.413 -2.274,-2.046 -3.693,-1.426 z"
id="path161"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 220.454,156.59 c -1.412,0.622 -2.047,2.273 -1.424,3.684 0.628,1.414 2.278,2.054 3.691,1.427 1.405,-0.625 2.048,-2.276 1.423,-3.686 -0.627,-1.413 -2.274,-2.046 -3.69,-1.425 z"
id="path163"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
</g>
<g
id="g165">
<path
d="m 278.788,156.803 c -1.044,-1.134 -2.816,-1.213 -3.953,-0.173 -1.136,1.043 -1.213,2.816 -0.172,3.949 1.041,1.143 2.809,1.22 3.95,0.173 1.142,-1.04 1.217,-2.808 0.175,-3.949 z"
id="path167"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 265.747,136.537 c 1.371,-0.725 3.063,-0.2 3.78,1.17 0.722,1.367 0.196,3.057 -1.171,3.777 -1.366,0.72 -3.058,0.196 -3.772,-1.173 -0.72,-1.365 -0.194,-3.055 1.163,-3.774 z"
id="path169"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 260.49,132.327 c 1.366,-0.722 3.057,-0.204 3.774,1.163 0.716,1.369 0.198,3.057 -1.175,3.782 -1.358,0.716 -3.053,0.192 -3.77,-1.174 -0.722,-1.366 -0.197,-3.057 1.171,-3.771 z"
id="path171"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 284.023,148.171 c 1.407,0.633 2.047,2.282 1.423,3.693 -0.631,1.408 -2.274,2.045 -3.69,1.426 -1.412,-0.63 -2.048,-2.284 -1.426,-3.693 0.629,-1.412 2.281,-2.049 3.693,-1.426 z"
id="path173"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 275.186,135.425 c 1.371,-0.726 3.064,-0.2 3.779,1.167 0.717,1.363 0.194,3.059 -1.176,3.774 -1.363,0.72 -3.055,0.197 -3.767,-1.168 -0.724,-1.369 -0.196,-3.054 1.164,-3.773 z"
id="path175"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 275.186,135.425 c 1.371,-0.726 3.064,-0.2 3.779,1.167 0.717,1.363 0.194,3.059 -1.176,3.774 -1.363,0.72 -3.055,0.197 -3.767,-1.168 -0.724,-1.369 -0.196,-3.054 1.164,-3.773 z"
id="path177"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 270.158,129.977 c 1.368,-0.72 3.058,-0.201 3.781,1.17 0.714,1.368 0.192,3.052 -1.179,3.776 -1.358,0.717 -3.055,0.193 -3.773,-1.171 -0.718,-1.367 -0.191,-3.055 1.171,-3.775 z"
id="path179"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 270.158,129.977 c 1.368,-0.72 3.058,-0.201 3.781,1.17 0.714,1.368 0.192,3.052 -1.179,3.776 -1.358,0.717 -3.055,0.193 -3.773,-1.171 -0.718,-1.367 -0.191,-3.055 1.171,-3.775 z"
id="path181"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 267.894,126.584 c -1.046,-1.138 -2.811,-1.214 -3.952,-0.173 -1.137,1.046 -1.213,2.809 -0.171,3.951 1.045,1.138 2.808,1.214 3.95,0.174 1.135,-1.047 1.211,-2.815 0.173,-3.952 z"
id="path183"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 259.827,149.818 c 1.411,0.624 2.055,2.274 1.426,3.685 -0.625,1.413 -2.271,2.054 -3.687,1.424 -1.416,-0.628 -2.047,-2.275 -1.425,-3.686 0.624,-1.409 2.279,-2.045 3.686,-1.423 z"
id="path185"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 252.823,144.488 c 1.365,-0.723 3.057,-0.195 3.779,1.171 0.715,1.368 0.189,3.059 -1.172,3.777 -1.365,0.721 -3.057,0.195 -3.778,-1.17 -0.719,-1.364 -0.194,-3.056 1.171,-3.778 z"
id="path187"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 252.823,144.488 c 1.365,-0.723 3.057,-0.195 3.781,1.169 0.713,1.37 0.188,3.061 -1.174,3.779 -1.365,0.721 -3.057,0.195 -3.778,-1.17 -0.719,-1.364 -0.194,-3.056 1.171,-3.778 z"
id="path189"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 270.387,156.264 c 1.413,0.623 2.046,2.277 1.422,3.686 -0.629,1.414 -2.274,2.045 -3.686,1.423 -1.417,-0.625 -2.048,-2.271 -1.426,-3.683 0.629,-1.413 2.279,-2.054 3.69,-1.426 z"
id="path191"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 267.979,149.348 c 1.411,0.624 2.052,2.274 1.421,3.687 -0.622,1.411 -2.274,2.045 -3.685,1.422 -1.411,-0.628 -2.049,-2.283 -1.425,-3.691 0.625,-1.412 2.273,-2.046 3.689,-1.418 z"
id="path193"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 256.719,138.374 c 1.364,-0.719 3.055,-0.2 3.777,1.171 0.715,1.362 0.198,3.057 -1.169,3.771 -1.369,0.722 -3.061,0.197 -3.781,-1.167 -0.714,-1.371 -0.196,-3.06 1.173,-3.775 z"
id="path195"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 256.719,138.374 c 1.368,-0.719 3.055,-0.2 3.777,1.171 0.715,1.362 0.198,3.057 -1.169,3.771 -1.369,0.722 -3.061,0.197 -3.781,-1.167 -0.714,-1.371 -0.196,-3.06 1.173,-3.775 z"
id="path197"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 251.605,150.721 c 1.416,0.627 2.047,2.275 1.422,3.687 -0.628,1.412 -2.276,2.053 -3.689,1.425 -1.405,-0.625 -2.047,-2.275 -1.428,-3.686 0.631,-1.413 2.279,-2.046 3.695,-1.426 z"
id="path199"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 251.605,150.721 c 1.416,0.627 2.047,2.275 1.422,3.687 -0.628,1.412 -2.276,2.053 -3.689,1.425 -1.405,-0.625 -2.047,-2.275 -1.428,-3.686 0.631,-1.413 2.279,-2.046 3.695,-1.426 z"
id="path201"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 255.272,156.59 c 1.411,0.622 2.045,2.273 1.423,3.684 -0.627,1.414 -2.278,2.054 -3.691,1.427 -1.405,-0.625 -2.049,-2.276 -1.424,-3.686 0.628,-1.413 2.277,-2.046 3.692,-1.425 z"
id="path203"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 255.272,156.59 c 1.411,0.622 2.045,2.273 1.423,3.684 -0.627,1.414 -2.278,2.054 -3.691,1.427 -1.405,-0.625 -2.049,-2.276 -1.424,-3.686 0.628,-1.413 2.277,-2.046 3.692,-1.425 z"
id="path205"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 275.989,148.936 c 1.414,0.628 2.048,2.282 1.427,3.689 -0.626,1.415 -2.276,2.049 -3.69,1.428 -1.407,-0.633 -2.047,-2.273 -1.428,-3.691 0.632,-1.408 2.28,-2.049 3.691,-1.426 z"
id="path207"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 270.158,142.396 c 1.366,-0.721 3.058,-0.197 3.772,1.171 0.72,1.366 0.194,3.058 -1.17,3.78 -1.36,0.715 -3.051,0.191 -3.771,-1.175 -0.726,-1.368 -0.198,-3.055 1.169,-3.776 z"
id="path209"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 285.66,155.839 c 1.41,0.623 2.052,2.271 1.424,3.684 -0.625,1.411 -2.276,2.046 -3.685,1.424 -1.418,-0.63 -2.053,-2.272 -1.432,-3.683 0.632,-1.412 2.284,-2.057 3.693,-1.425 z"
id="path211"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 275.186,135.425 c 1.371,-0.726 3.064,-0.2 3.779,1.167 0.717,1.363 0.194,3.059 -1.176,3.774 -1.363,0.72 -3.055,0.197 -3.767,-1.168 -0.724,-1.369 -0.196,-3.054 1.164,-3.773 z"
id="path213"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 279.025,141.568 c 1.372,-0.724 3.062,-0.196 3.778,1.169 0.717,1.358 0.194,3.052 -1.172,3.771 -1.365,0.722 -3.053,0.194 -3.773,-1.171 -0.719,-1.368 -0.19,-3.053 1.167,-3.769 z"
id="path215"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 270.158,129.977 c 1.368,-0.72 3.058,-0.201 3.781,1.17 0.714,1.368 0.192,3.052 -1.179,3.776 -1.358,0.717 -3.055,0.193 -3.773,-1.171 -0.718,-1.367 -0.191,-3.055 1.171,-3.775 z"
id="path217"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 263.713,157.114 c -1.045,-1.138 -2.817,-1.215 -3.949,-0.173 -1.143,1.041 -1.22,2.812 -0.175,3.951 1.039,1.135 2.811,1.213 3.951,0.174 1.14,-1.047 1.214,-2.816 0.173,-3.952 z"
id="path219"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 252.823,144.488 c 1.365,-0.723 3.057,-0.195 3.781,1.169 0.713,1.37 0.188,3.061 -1.174,3.779 -1.365,0.721 -3.057,0.195 -3.778,-1.17 -0.719,-1.364 -0.194,-3.056 1.171,-3.778 z"
id="path221"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 256.719,138.374 c 1.368,-0.719 3.055,-0.2 3.777,1.171 0.715,1.362 0.198,3.057 -1.169,3.771 -1.369,0.722 -3.061,0.197 -3.781,-1.167 -0.714,-1.371 -0.196,-3.06 1.173,-3.775 z"
id="path223"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 261.667,143.221 c 1.363,-0.719 3.056,-0.193 3.777,1.171 0.71,1.363 0.19,3.061 -1.18,3.774 -1.366,0.722 -3.049,0.2 -3.773,-1.172 -0.719,-1.364 -0.189,-3.051 1.176,-3.773 z"
id="path225"
inkscape:connector-curvature="0"
style="fill:#002c42" />
<path
d="m 251.605,150.721 c 1.416,0.627 2.047,2.275 1.422,3.687 -0.628,1.412 -2.276,2.053 -3.689,1.425 -1.405,-0.625 -2.047,-2.275 -1.428,-3.686 0.631,-1.413 2.279,-2.046 3.695,-1.426 z"
id="path227"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
<path
d="m 255.272,156.59 c 1.411,0.622 2.045,2.273 1.423,3.684 -0.627,1.414 -2.278,2.054 -3.691,1.427 -1.405,-0.625 -2.049,-2.276 -1.424,-3.686 0.628,-1.413 2.277,-2.046 3.692,-1.425 z"
id="path229"
inkscape:connector-curvature="0"
style="opacity:0.9387;fill:#002c42" />
</g>
</g></g>
</svg>

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -68,6 +68,7 @@ $openslides-green: (
// Generate paletes using: https://material.io/design/color/
// default values fir mat-palette: $default: 500, $lighter: 100, $darker: 700.
$openslides-primary: mat-palette($openslides-blue);
$openslides-accent: mat-palette($mat-light-blue);
// $openslides-primary: mat-palette($openslides-green);
// $openslides-accent: mat-palette($mat-amber);
@ -76,3 +77,11 @@ $openslides-warn: mat-palette($mat-red);
// Create the theme object (a Sass map containing all of the palettes).
$openslides-theme: mat-light-theme($openslides-primary, $openslides-accent, $openslides-warn);
// Create Sass color vars (for using in scss files).
$os-primary: mat-color($openslides-primary);
$os-accent: mat-color($openslides-accent);
$os-warn: mat-color($openslides-warn);
$os-outline: mat-color($mat-grey, 300);
$os-background: mat-color($mat-grey, 100);

View File

@ -4,8 +4,8 @@
/** Import brand theme and (new) component themes */
@import './assets/styles/openslides-theme.scss';
@import './app/site/site.component.scss-theme';
@import '../node_modules/roboto-fontface/css/roboto/roboto-fontface.css';
@import '../node_modules/roboto-fontface/css/roboto-condensed/roboto-condensed-fontface.css';
@import '../node_modules/typeface-fira-sans/index.css';
@import '../node_modules/typeface-fira-sans-condensed/index.css';
@mixin openslides-components-theme($theme) {
@include os-site-theme($theme);
/** More components are added here */
@ -16,40 +16,44 @@
@import '~angular-tree-component/dist/angular-tree-component.css';
// Shared scss definitions
%os-table {
width: 100%;
/** size of the mat row */
mat-row {
height: 60px;
}
mat-row:hover {
cursor: pointer;
background-color: rgba(0, 0, 0, 0.025);
}
mat-row.selected {
cursor: pointer;
background-color: rgba(0, 0, 0, 0.055);
}
mat-row.lg {
height: 90px;
}
}
* {
font-family: Roboto, Arial, Helvetica, sans-serif;
font-family: Fira Sans, Roboto, Arial, Helvetica, sans-serif;
}
.mat-toolbar h2 {
font-family: Fira Sans, Roboto, Arial, Helvetica, sans-serif !important;
}
mat-icon {
font-family: MaterialIcons-Regular;
}
body {
// background: #e8eaed;
margin: 0 auto;
padding: 0;
line-height: 1.5;
font-size: 14px;
color: #222;
}
h1,
h2,
h3 {
font-family: Roboto-condensed, Arial, Helvetica, sans-serif;
font-family: Fira Sans Condensed, Roboto-condensed, Arial, Helvetica, sans-serif;
}
h1 {
padding-bottom: 10px;
line-height: 1.2;
color: $os-primary;
margin: 0;
font-weight: normal;
font-size: 36px;
}
h3 {
font-weight: 500;
margin-bottom: 0;
}
h4 {
font-weight: 400;
@ -58,16 +62,27 @@ h4 {
margin-bottom: 5px;
}
body {
// background: #e8eaed;
margin: 0 auto;
padding: 0;
}
.small {
font-size: 90%;
}
img {
border: none;
}
a {
text-decoration: none;
color: #039BE5; /*TODO: move to theme*/
&:hover {
text-decoration: underline;
}
}
strong, b {
font-weight: 500;
}
.generic-mini-button {
bottom: -28px;
z-index: 100;
@ -110,12 +125,53 @@ body {
text-align: center;
color: gray;
}
mat-card {
box-shadow: 0 1px 4px 0 rgba(0,0,0,0.37) !important;
}
.os-card {
max-width: 90%;
margin-top: 10px;
margin-left: auto;
margin-right: auto;
max-width: 770px;
margin-top: 20px !important;
margin-left: auto !important;
margin-right: auto !important;
font-size: 16px;
.mat-select-arrow-wrapper {
visibility: hidden;
}
}
.os-form-card {
max-width: 770px;
margin-top: 20px !important;
margin-left: auto !important;
margin-right: auto !important;
font-size: 16px;
.mat-form-field {
width: 100%;
padding: 10px 0;
}
}
// Shared table definitions
%os-table {
width: 100%;
/** size of the mat row */
mat-row {
height: 60px;
}
mat-row.lg {
height: 90px;
}
mat-row:hover {
cursor: pointer;
background-color: rgba(0, 0, 0, 0.025);
}
mat-row.selected {
cursor: pointer;
background-color: rgba(0, 0, 0, 0.055);
}
}
@keyframes fadeIn {
@ -172,6 +228,16 @@ body {
@extend %os-table;
}
/* TODO: find a better way to get more vertical space in (empty/small) tables for maximize filter dialog */
mat-paginator {
min-height: 800px;
}
/* hide scrollbars caused by hidden filter dialog outside of the viewport */
.mat-drawer-content {
overflow-x: hidden !important;
}
.card-plus-distance {
margin-top: 40px;
}
@ -197,14 +263,6 @@ body {
z-index: 100;
}
footer {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
z-index: 1;
}
mat-expansion-panel {
border-radius: 0 !important;
}
@ -273,6 +331,63 @@ button.mat-menu-item.selected {
font-weight: bold !important;
}
.meta-text-block .mat-icon-button {
margin-top: -12px !important;
}
.meta-text-block .mat-icon-button mat-icon {
font-size: 18px;
}
/** helper classes for margin/padding */
.spacer-top-10 {
margin-top: 10px;
}
.spacer-top-20 {
margin-top: 20px;
}
.spacer-bottom-20 {
margin-bottom: 20px;
}
.button24 {
background-color: white;
color: $os-primary !important;
width: 24px !important;
height: 24px !important;
}
.icon24 {
font-size: 16px;
margin-top: -8px;
}
.mat-mini-fab.large {
width: 24px;
height: 24px;
line-height: 24px;
.mat-icon {
font-size: 24px;
width: 24px;
height: 24px;
line-height: 24px;
}
}
.title-left {
padding-left: 65px;
padding-top: 20px;
padding-bottom: 20px;
}
.mat-radio-button {
padding-right: 20px;
}
/** more helper classes **/
.center {
text-align: center;
}
/** Colors **/
.lightblue {
background-color: rgb(33, 150, 243) !important;
@ -312,6 +427,28 @@ button.mat-menu-item.selected {
color: rgba(0, 0, 0, 0.87) !important;
}
.os-listview-table {
min-height: 800px;
}
/* TODO: move to site.component.scss-theme.scss (does not work currently) */
/* make the .user-menu expansion panel look like the nav-toolbar above */
.user-menu {
min-height: 48px;
.mat-expansion-panel-header {
padding: 0 16px !important;
}
.mat-expansion-panel-body {
padding: 0 !important;
}
}
.mat-drawer-inner-container {
scrollbar-width: none; /* hide scrollbars in Firefox */
-ms-overflow-style: -ms-autohiding-scrollbar; /* hide scrollbars in Edge until the scrollable area is hovered */
}
.mat-drawer-inner-container::-webkit-scrollbar {
display: none !important; /* hide scrollbars in webkit browsers */
}

View File

@ -5,4 +5,4 @@ class ExampleDataGeneratorAppConfig(AppConfig):
name = "tests.example_data_generator"
label = "tests.example_data_generator"
verbose_name = "Example Data Generator"
version = "no specific version"
version = ""