Added a functional Language Editor

This commit is contained in:
George Kalampokis 2020-01-27 18:38:24 +02:00
parent d119a723f3
commit cb9509ee4f
6 changed files with 62 additions and 7 deletions

View File

@ -1,5 +1,8 @@
package eu.eudat.controllers; package eu.eudat.controllers;
import eu.eudat.models.data.helpers.responses.ResponseItem;
import eu.eudat.models.data.security.Principal;
import eu.eudat.types.ApiMessageCode;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
@ -8,9 +11,8 @@ import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.io.FileInputStream; import java.io.*;
import java.io.IOException; import java.util.UUID;
import java.io.InputStream;
@RestController @RestController
@CrossOrigin @CrossOrigin
@ -43,4 +45,14 @@ public class LanguageController {
return new ResponseEntity<>(content, responseHeaders, HttpStatus.OK); return new ResponseEntity<>(content, responseHeaders, HttpStatus.OK);
} }
@RequestMapping(value = "update/{lang}", method = RequestMethod.POST)
public @ResponseBody
ResponseEntity<ResponseItem<String>> updateLang(@PathVariable String lang, @RequestBody String json) throws Exception {
String fileName = this.environment.getProperty("language.path") + lang + ".json";
OutputStream os = new FileOutputStream(fileName);
os.write(json.getBytes());
os.close();
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<String>().status(ApiMessageCode.SUCCESS_MESSAGE).message("Updated").payload("Updated"));
}
} }

View File

@ -164,6 +164,14 @@ const appRoutes: Routes = [
title: 'GENERAL.TITLES.PROFILE' title: 'GENERAL.TITLES.PROFILE'
}, },
}, },
{
path: 'language-editor',
loadChildren: () => import('./ui/language-editor/language-editor.module').then(m => m.LanguageEditorModule),
data: {
breadcrumb: true,
title: 'Language Editor'
},
},
{ {
path: 'login/admin', path: 'login/admin',
loadChildren: () => import('./ui/auth/admin-login/admin-login.module').then(m => m.AdminLoginModule), loadChildren: () => import('./ui/auth/admin-login/admin-login.module').then(m => m.AdminLoginModule),

View File

@ -1,13 +1,22 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { isNullOrUndefined } from 'util'; import { environment } from 'environments/environment';
import { Observable } from 'rxjs';
import { HttpResponse, HttpClient } from '@angular/common/http';
import { BaseHttpService } from '../http/base-http.service';
import { Language } from '@app/models/language/Language';
const availableLanguages: any[] = require('../../../../assets/resources/language.json');
@Injectable() @Injectable()
export class LanguageService { export class LanguageService {
private currentLanguage: string = 'en'; private currentLanguage: string = 'en';
private languageUrl = `${environment.Server}language`;
constructor( constructor(
private translate: TranslateService private translate: TranslateService,
private http: HttpClient,
private baseHttp: BaseHttpService
) {} ) {}
public changeLanguage(lang: string) { public changeLanguage(lang: string) {
@ -19,4 +28,22 @@ export class LanguageService {
return this.currentLanguage; return this.currentLanguage;
} }
public getCurrentLanguageJSON(): Observable<HttpResponse<Blob>> {
return this.http.get(`${this.languageUrl}/${this.currentLanguage}`, { responseType: 'blob', observe: 'response' });
}
public updateLanguage(json: string): Observable<String> {
return this.baseHttp.post<string>(`${this.languageUrl}/update/${this.currentLanguage}`, json);
}
public getCurrentLanguageName() {
let result: string = '';
availableLanguages.forEach(language => {
if (language.value === this.currentLanguage) {
result = this.translate.instant(language.label);
}
});
return result;
}
} }

View File

@ -36,7 +36,7 @@
</mat-menu> </mat-menu>
</div> --> </div> -->
<div class="col-md-auto" *ngIf="!isAuthenticated()"> <div class="col-md-auto" *ngIf="!(isAuthenticated() && onLanguageEditor())">
<button mat-icon-button [matMenuTriggerFor]="languageMenu"> <button mat-icon-button [matMenuTriggerFor]="languageMenu">
<mat-icon>language</mat-icon> <mat-icon>language</mat-icon>
</button> </button>

View File

@ -29,6 +29,7 @@ export class NavbarComponent extends BaseComponent implements OnInit {
private sidebarVisible: boolean; private sidebarVisible: boolean;
languages = availableLanguages; languages = availableLanguages;
language = this.languages[0]; language = this.languages[0];
currentRoute: string;
constructor(location: Location, constructor(location: Location,
@ -45,6 +46,7 @@ export class NavbarComponent extends BaseComponent implements OnInit {
} }
ngOnInit() { ngOnInit() {
this.currentRoute = this.router.url;
this.listTitles = GENERAL_ROUTES.filter(listTitle => listTitle); this.listTitles = GENERAL_ROUTES.filter(listTitle => listTitle);
this.listTitles.push(DMP_ROUTES.filter(listTitle => listTitle)); this.listTitles.push(DMP_ROUTES.filter(listTitle => listTitle));
// this.listTitles.push(HISTORY_ROUTES.filter(listTitle => listTitle)); // this.listTitles.push(HISTORY_ROUTES.filter(listTitle => listTitle));
@ -54,6 +56,7 @@ export class NavbarComponent extends BaseComponent implements OnInit {
this.router.events.subscribe((event) => { this.router.events.subscribe((event) => {
this.sidebarClose(); this.sidebarClose();
var $layer: any = document.getElementsByClassName('close-layer')[0]; var $layer: any = document.getElementsByClassName('close-layer')[0];
this.currentRoute = this.router.url;
if ($layer) { if ($layer) {
$layer.remove(); $layer.remove();
this.mobile_menu_visible = 0; this.mobile_menu_visible = 0;
@ -69,6 +72,10 @@ export class NavbarComponent extends BaseComponent implements OnInit {
return !(!this.authentication.current()); return !(!this.authentication.current());
} }
public onLanguageEditor(): boolean {
return this.currentRoute === '/language-editor';
}
sidebarOpen() { sidebarOpen() {
const toggleButton = this.toggleButton; const toggleButton = this.toggleButton;
const body = document.getElementsByTagName('body')[0]; const body = document.getElementsByTagName('body')[0];

View File

@ -50,7 +50,8 @@ export const PUBLIC_ROUTES: RouteInfo[] = [
export const ADMIN_ROUTES: RouteInfo[] = [ export const ADMIN_ROUTES: RouteInfo[] = [
{ path: '/dmp-profiles', title: 'SIDE-BAR.DMP-TEMPLATES', icon: 'library_books' }, { path: '/dmp-profiles', title: 'SIDE-BAR.DMP-TEMPLATES', icon: 'library_books' },
{ path: '/dataset-profiles', title: 'SIDE-BAR.DATASET-TEMPLATES', icon: 'library_books' }, { path: '/dataset-profiles', title: 'SIDE-BAR.DATASET-TEMPLATES', icon: 'library_books' },
{ path: '/users', title: 'SIDE-BAR.USERS', icon: 'people' } { path: '/users', title: 'SIDE-BAR.USERS', icon: 'people' },
{ path: '/language-editor', title: 'Language Editor', icon: 'language'}
]; ];
// export const HISTORY_ROUTES: RouteInfo[] = [ // export const HISTORY_ROUTES: RouteInfo[] = [
// { path: '/typography', title: 'SIDE-BAR.HISTORY-VISITED', icon: 'visibility'}, // { path: '/typography', title: 'SIDE-BAR.HISTORY-VISITED', icon: 'visibility'},