mirror of https://github.com/Squidex/squidex.git
33 changed files with 318 additions and 84 deletions
@ -0,0 +1,16 @@ |
|||||
|
<div class="btn-group btn-group-{{size}}" *ngIf="isSmallMode"> |
||||
|
<button type="button" class="btn btn-secondary" *ngFor="let language of languages" [attr.title]="language.englishName" [class.active]="language == languageSelected" (click)="selectLanguage(language)"> |
||||
|
<span class="iso-code">{{language.iso2Code}}</span> |
||||
|
</button> |
||||
|
</div> |
||||
|
|
||||
|
<div class="dropdown-options btn-group btn-group-{{size}}" *ngIf="isLargeMode"> |
||||
|
<button type="button" class="btn btn-secondary dropdown-toggle" [attr.title]="selectedLanguage.englishName" (click)="dropdown.toggle(); $event.stopPropagation()"> |
||||
|
{{selectedLanguage.iso2Code}} |
||||
|
</button> |
||||
|
<div class="dropdown-menu" *sqxModalView="dropdown" closeAlways="true" [@fade]> |
||||
|
<div class="dropdown-item" *ngFor="let language of languages" [class.active]="language == selectedLanguage" (click)="selectLanguage(language)"> |
||||
|
<strong class="iso-code">{{language.iso2Code}}</strong> ({{language.englishName}}) |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
@ -0,0 +1,18 @@ |
|||||
|
@import '_vars'; |
||||
|
@import '_mixins'; |
||||
|
|
||||
|
.btn { |
||||
|
font-family: monospace; |
||||
|
} |
||||
|
|
||||
|
.active { |
||||
|
color: $color-accent-dark; |
||||
|
} |
||||
|
|
||||
|
.dropdown-item { |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
|
||||
|
.iso-code { |
||||
|
font-family: monospace; |
||||
|
} |
||||
@ -0,0 +1,59 @@ |
|||||
|
/* |
||||
|
* Squidex Headless CMS |
||||
|
* |
||||
|
* @license |
||||
|
* Copyright (c) Sebastian Stehle. All rights reserved |
||||
|
*/ |
||||
|
|
||||
|
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; |
||||
|
|
||||
|
import { fadeAnimation, ModalView } from 'framework'; |
||||
|
|
||||
|
export interface Language { iso2Code: string; englishName: string; isMasterLanguage: true; } |
||||
|
|
||||
|
@Component({ |
||||
|
selector: 'sqx-language-selector', |
||||
|
styleUrls: ['./language-selector.component.scss'], |
||||
|
templateUrl: './language-selector.component.html', |
||||
|
animations: [ |
||||
|
fadeAnimation |
||||
|
] |
||||
|
}) |
||||
|
export class LanguageSelectorComponent implements OnInit { |
||||
|
public dropdown = new ModalView(false, true); |
||||
|
|
||||
|
@Input() |
||||
|
public size: string; |
||||
|
|
||||
|
@Input() |
||||
|
public languages: Language[] = []; |
||||
|
|
||||
|
@Input() |
||||
|
public selectedLanguage: Language; |
||||
|
|
||||
|
@Output() |
||||
|
public selectedLanguageChanged = new EventEmitter<Language>(); |
||||
|
|
||||
|
public get isSmallMode(): boolean { |
||||
|
return this.languages && this.languages.length > 0 && this.languages.length <= 0; |
||||
|
} |
||||
|
|
||||
|
public get isLargeMode(): boolean { |
||||
|
return this.languages && this.languages.length > 3; |
||||
|
} |
||||
|
|
||||
|
public ngOnInit() { |
||||
|
if (this.languages && this.languages.length > 0 && !this.selectedLanguage) { |
||||
|
const selectedLanguage = |
||||
|
this.languages.find(l => l.isMasterLanguage) || |
||||
|
this.languages[0]; |
||||
|
|
||||
|
this.selectLanguage(selectedLanguage); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public selectLanguage(language: Language) { |
||||
|
this.selectedLanguage = language; |
||||
|
this.selectedLanguageChanged.emit(language); |
||||
|
} |
||||
|
} |
||||
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue