Bug fix and format code
continuous-integration/drone/push Build is passing Details

pull/15/head
Colin FRIZOT 11 months ago
parent f94e9e7634
commit a86a40e845

@ -20,8 +20,7 @@ const routes: Routes = [
]; ];
@NgModule({ @NgModule({
imports: [RouterModule.forRoot(routes)], imports: [RouterModule.forRoot(routes)],
exports: [RouterModule], exports: [RouterModule],
}) })
export class AppRoutingModule { export class AppRoutingModule {}
}

@ -73,7 +73,6 @@ select {
height: 100%; height: 100%;
} }
// @mixin btn-styles($bg-color, $font-color) { // @mixin btn-styles($bg-color, $font-color) {
// background-color: $bg-color; // background-color: $bg-color;
@ -94,4 +93,4 @@ select {
// .btn-save { // .btn-save {
// @include btn-styles(red, white); // @include btn-styles(red, white);
// } // }

@ -1,195 +1,197 @@
import {Component, ViewChild} from '@angular/core'; import { Component, ViewChild } from '@angular/core';
import {CodeExecutionService} from 'src/app/services/codeExecution.service'; import { CodeExecutionService } from 'src/app/services/codeExecution.service';
import {Compartment} from '@codemirror/state'; import { Compartment } from '@codemirror/state';
import {CodeMirrorComponent} from '@sandkasten/codemirror6-editor'; import { CodeMirrorComponent } from '@sandkasten/codemirror6-editor';
import {LanguageDescription} from '@codemirror/language'; import { LanguageDescription } from '@codemirror/language';
import {CODE_DEFAULTS, LANGUAGES} from '../languages'; import { CODE_DEFAULTS, LANGUAGES } from '../languages';
import {SafeHTMLPipe} from '../../safe-html.pipe'; import { SafeHTMLPipe } from '../../safe-html.pipe';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import {ReactiveFormsModule, FormsModule} from '@angular/forms'; import { ReactiveFormsModule, FormsModule } from '@angular/forms';
import { import {
keymap, keymap,
highlightSpecialChars, highlightSpecialChars,
drawSelection, drawSelection,
highlightActiveLine, highlightActiveLine,
dropCursor, dropCursor,
rectangularSelection, rectangularSelection,
crosshairCursor, crosshairCursor,
lineNumbers, lineNumbers,
highlightActiveLineGutter, highlightActiveLineGutter,
gutter, gutter,
} from '@codemirror/view'; } from '@codemirror/view';
import {Extension, EditorState} from '@codemirror/state'; import { Extension, EditorState } from '@codemirror/state';
import { import {
defaultHighlightStyle, defaultHighlightStyle,
syntaxHighlighting, syntaxHighlighting,
indentOnInput, indentOnInput,
bracketMatching, bracketMatching,
foldGutter, foldGutter,
foldKeymap, foldKeymap,
} from '@codemirror/language'; } from '@codemirror/language';
import {defaultKeymap, history, historyKeymap} from '@codemirror/commands'; import { defaultKeymap, history, historyKeymap } from '@codemirror/commands';
import {searchKeymap, highlightSelectionMatches} from '@codemirror/search'; import { searchKeymap, highlightSelectionMatches } from '@codemirror/search';
import { import {
autocompletion, autocompletion,
completionKeymap, completionKeymap,
closeBrackets, closeBrackets,
closeBracketsKeymap, closeBracketsKeymap,
} from '@codemirror/autocomplete'; } from '@codemirror/autocomplete';
import {lintKeymap} from '@codemirror/lint'; import { lintKeymap } from '@codemirror/lint';
import {WorkService} from "../../services/work.service"; import { WorkService } from '../../services/work.service';
const basicSetup: Extension = (() => [ const basicSetup: Extension = (() => [
highlightActiveLineGutter(), highlightActiveLineGutter(),
highlightSpecialChars(), highlightSpecialChars(),
history(), history(),
foldGutter(), foldGutter(),
drawSelection(), drawSelection(),
dropCursor(), dropCursor(),
EditorState.allowMultipleSelections.of(true), EditorState.allowMultipleSelections.of(true),
indentOnInput(), indentOnInput(),
syntaxHighlighting(defaultHighlightStyle, {fallback: true}), syntaxHighlighting(defaultHighlightStyle, { fallback: true }),
bracketMatching(), bracketMatching(),
closeBrackets(), closeBrackets(),
autocompletion(), autocompletion(),
rectangularSelection(), rectangularSelection(),
crosshairCursor(), crosshairCursor(),
highlightActiveLine(), highlightActiveLine(),
highlightSelectionMatches(), highlightSelectionMatches(),
keymap.of([ keymap.of([
...closeBracketsKeymap, ...closeBracketsKeymap,
...defaultKeymap, ...defaultKeymap,
...searchKeymap, ...searchKeymap,
...historyKeymap, ...historyKeymap,
...foldKeymap, ...foldKeymap,
...completionKeymap, ...completionKeymap,
...lintKeymap, ...lintKeymap,
]), ]),
])(); ])();
@Component({ @Component({
selector: 'app-editor', selector: 'app-editor',
templateUrl: './editor.component.html', templateUrl: './editor.component.html',
styleUrls: ['./editor.component.scss'], styleUrls: ['./editor.component.scss'],
standalone: true, standalone: true,
imports: [ imports: [
CodeMirrorComponent, CodeMirrorComponent,
ReactiveFormsModule, ReactiveFormsModule,
FormsModule, FormsModule,
SafeHTMLPipe, SafeHTMLPipe,
TranslateModule TranslateModule,
], ],
}) })
export class EditorComponent { export class EditorComponent {
isLoaded: boolean = false; // Pour vérifier si le chargement est terminé isLoaded: boolean = false; // Pour vérifier si le chargement est terminé
readonly languages: LanguageDescription[] = LANGUAGES; readonly languages: LanguageDescription[] = LANGUAGES;
// Mode par défaut // Mode par défaut
private _selectedLanguage = this.languages.find( private _selectedLanguage = this.languages.find(
(lang) => lang.name === 'JavaScript' (lang) => lang.name === 'JavaScript'
)!; )!;
get selectedLanguage(): LanguageDescription { get selectedLanguage(): LanguageDescription {
return this._selectedLanguage; return this._selectedLanguage;
}
set selectedLanguage(value: LanguageDescription) {
this._selectedLanguage = value;
if (value.name in CODE_DEFAULTS) {
this.editorContent =
CODE_DEFAULTS[value.name as keyof typeof CODE_DEFAULTS];
} }
this.selectedLanguage.load().then((language) => {
set selectedLanguage(value: LanguageDescription) { this.codemirror.editor?.dispatch({
this._selectedLanguage = value; effects: this.languageCompartment.reconfigure(language),
if (value.name in CODE_DEFAULTS) { });
this.editorContent = });
CODE_DEFAULTS[value.name as keyof typeof CODE_DEFAULTS]; }
}
this.selectedLanguage.load().then((language) => { private _linesNumbers: boolean = true;
this.codemirror.editor?.dispatch({ get linesNumbers() {
effects: this.languageCompartment.reconfigure(language), return this._linesNumbers;
}); }
});
} set linesNumbers(lines: boolean) {
this._linesNumbers = lines;
private _linesNumbers: boolean = true; this.codemirror.editor?.dispatch({
get linesNumbers() { effects: this.gutterCompartment.reconfigure(
return this._linesNumbers; lines ? lineNumbers() : gutter({})
} ),
});
set linesNumbers(lines: boolean) { }
this._linesNumbers = lines;
this.codemirror.editor?.dispatch({ // Contenu de l'éditeur que l'on passera au serveur
effects: this.gutterCompartment.reconfigure( editorContent: string =
lines ? lineNumbers() : gutter({}) CODE_DEFAULTS[this.selectedLanguage.name as keyof typeof CODE_DEFAULTS];
), resultContent: string = '';
});
} // Message d'erreur
errorMessage: string = '';
// Contenu de l'éditeur que l'on passera au serveur
editorContent: string = @ViewChild(CodeMirrorComponent) private codemirror!: CodeMirrorComponent;
CODE_DEFAULTS[this.selectedLanguage.name as keyof typeof CODE_DEFAULTS];
resultContent: string = ''; private readonly languageCompartment = new Compartment();
private readonly gutterCompartment = new Compartment();
// Message d'erreur protected readonly extensions: Extension[] = [
errorMessage: string = ''; basicSetup,
this.gutterCompartment.of(lineNumbers()),
@ViewChild(CodeMirrorComponent) private codemirror!: CodeMirrorComponent; this.languageCompartment.of(this.selectedLanguage.support!),
];
private readonly languageCompartment = new Compartment();
private readonly gutterCompartment = new Compartment(); constructor(
protected readonly extensions: Extension[] = [ private codeExecutionService: CodeExecutionService,
basicSetup, protected workService: WorkService
this.gutterCompartment.of(lineNumbers()), ) {}
this.languageCompartment.of(this.selectedLanguage.support!),
]; // Efface le contenu de l'éditeur
clear(): void {
constructor(private codeExecutionService: CodeExecutionService, protected workService: WorkService) { this.editorContent = '';
} }
// Efface le contenu de l'éditeur onRunButtonClicked() {
clear(): void { // Le code à exécuter est le contenu de l'éditeur
this.editorContent = ''; const codeToExecute = this.editorContent;
}
this.codeExecutionService.executeCode(
onRunButtonClicked() { codeToExecute,
// Le code à exécuter est le contenu de l'éditeur this.selectedLanguage.name
const codeToExecute = this.editorContent; );
this.codeExecutionService.executeCode( this.resultContent = '';
codeToExecute, }
this.selectedLanguage.name
); loadFromFile(event: Event) {
const file = (event.target as HTMLInputElement).files![0];
this.resultContent = ''; for (const language of this.languages) {
} if (language.extensions.some((ext) => file.name.endsWith(`.${ext}`))) {
this.selectedLanguage = language;
loadFromFile(event: Event) { const reader = new FileReader();
const file = (event.target as HTMLInputElement).files![0]; reader.onload = (event) => {
for (const language of this.languages) { this.editorContent = event.target!.result as string;
if (language.extensions.some((ext) => file.name.endsWith(`.${ext}`))) { this.errorMessage = '';
this.selectedLanguage = language; };
const reader = new FileReader(); reader.readAsText(file);
reader.onload = (event) => { return;
this.editorContent = event.target!.result as string; }
this.errorMessage = '';
};
reader.readAsText(file);
return;
}
}
const extensions = this.languages.flatMap((lang) => lang.extensions);
this.errorMessage = `Unsupported language. Please select one of the following languages: ${extensions.join(', ')}.`;
console.error(this.errorMessage);
}
saveToFile() {
const blob = new Blob([this.editorContent], {type: 'text/plain'});
const a = document.createElement('a');
a.download = `code.${this.selectedLanguage.extensions![0]}`;
a.href = URL.createObjectURL(blob);
a.click();
}
addToDatabase() {
this.workService.postWorkCode(this.editorContent);
} }
const extensions = this.languages.flatMap((lang) => lang.extensions);
shareButtonClicked(){} this.errorMessage = `Unsupported language. Please select one of the following languages: ${extensions.join(', ')}.`;
saveButtonClicked(){} console.error(this.errorMessage);
}
protected readonly console = console;
saveToFile() {
const blob = new Blob([this.editorContent], { type: 'text/plain' });
const a = document.createElement('a');
a.download = `code.${this.selectedLanguage.extensions![0]}`;
a.href = URL.createObjectURL(blob);
a.click();
}
addToDatabase() {
this.workService.postWorkCode(this.editorContent);
}
shareButtonClicked() {}
saveButtonClicked() {}
protected readonly console = console;
} }

@ -27,9 +27,8 @@
</div> </div>
<nav class="right_part--menu"> <nav class="right_part--menu">
<!--[routerLink]="getLastWorkLink()"-->
<a <a
routerLink="work" [routerLink]="linkLastWork"
routerLinkActive="active" routerLinkActive="active"
[routerLinkActiveOptions]="{ exact: true }" [routerLinkActiveOptions]="{ exact: true }"
>{{ 'HeaderPage.Work' | translate }}</a >{{ 'HeaderPage.Work' | translate }}</a

@ -13,6 +13,7 @@ import { Router, RouterLink, RouterLinkActive } from '@angular/router';
import { NgClass, NgOptimizedImage } from '@angular/common'; import { NgClass, NgOptimizedImage } from '@angular/common';
import { WorkService } from '../../services/work.service'; import { WorkService } from '../../services/work.service';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { Work } from '../../models/work.model';
@Component({ @Component({
selector: 'app-header', selector: 'app-header',
@ -33,7 +34,7 @@ export class HeaderComponent {
version: string = '1.0'; version: string = '1.0';
isMenuOpen: boolean = false; isMenuOpen: boolean = false;
isCheck: boolean = false; isCheck: boolean = false;
linkLastWork: string = this.workService.getIdLastWorkByUserId(""); linkLastWork: string = '';
@ViewChild('menuRef') menuRef!: ElementRef; @ViewChild('menuRef') menuRef!: ElementRef;
@Input() themeClass!: string; @Input() themeClass!: string;
@ -42,9 +43,13 @@ export class HeaderComponent {
// Instanciation du service pour les actions de traduction // Instanciation du service pour les actions de traduction
constructor( constructor(
private router: Router, private router: Router,
private translationService: TranslationService, private translationService: TranslationService,
private workService: WorkService) private workService: WorkService
{ } ) {
this.workService.getLastWorkByUserId('5').subscribe((response: Work) => {
this.linkLastWork = 'work/' + response.link;
});
}
// Méthode pour changer la langue // Méthode pour changer la langue
onLanguageChange(event: Event) { onLanguageChange(event: Event) {
@ -72,9 +77,8 @@ export class HeaderComponent {
} }
} }
onLastWorkLink() : void { onLastWorkLink(): void {
const url = `/work/${this.linkLastWork}`; const url = `/work/${this.linkLastWork}`;
this.router.navigateByUrl(url); this.router.navigateByUrl(url);
} }
} }

@ -1,3 +1,3 @@
body { body {
margin: 0 150px 0 150px; margin: 0 150px 0 150px;
} }

@ -1,3 +1,3 @@
body { body {
margin: 0 150px 0 150px; margin: 0 150px 0 150px;
} }

@ -8,10 +8,9 @@ describe('WorkComponent', () => {
beforeEach(async () => { beforeEach(async () => {
await TestBed.configureTestingModule({ await TestBed.configureTestingModule({
imports: [WorkComponent] imports: [WorkComponent],
}) }).compileComponents();
.compileComponents();
fixture = TestBed.createComponent(WorkComponent); fixture = TestBed.createComponent(WorkComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();
@ -21,5 +20,3 @@ describe('WorkComponent', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
}); });

@ -3,10 +3,10 @@ import { RouterLink, ActivatedRoute } from '@angular/router';
import { ThemeService } from '../../services/theme.service'; import { ThemeService } from '../../services/theme.service';
import { NgClass } from '@angular/common'; import { NgClass } from '@angular/common';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import {Work} from "../../models/work.model"; import { Work } from '../../models/work.model';
import {WorkService} from "../../services/work.service"; import { WorkService } from '../../services/work.service';
import {NgForOf} from "@angular/common"; import { NgForOf } from '@angular/common';
import {FormsModule, NgForm} from "@angular/forms"; import { FormsModule, NgForm } from '@angular/forms';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
@Component({ @Component({
@ -14,14 +14,8 @@ import { Observable } from 'rxjs';
templateUrl: './work.component.html', templateUrl: './work.component.html',
styleUrl: './work.component.scss', styleUrl: './work.component.scss',
standalone: true, standalone: true,
imports: [NgClass, imports: [NgClass, TranslateModule, RouterLink, NgForOf, FormsModule],
TranslateModule,
RouterLink,
NgForOf,
FormsModule
],
}) })
export class WorkComponent implements OnInit { export class WorkComponent implements OnInit {
// à retirer quand les boutons seront dans editor.component // à retirer quand les boutons seront dans editor.component
isLoaded: boolean = false; // Pour vérifier si le chargement est terminé isLoaded: boolean = false; // Pour vérifier si le chargement est terminé
@ -29,6 +23,7 @@ export class WorkComponent implements OnInit {
themeClass!: string; themeClass!: string;
works: Work[] = []; works: Work[] = [];
workEnCours: Observable<Work> = new Observable(); workEnCours: Observable<Work> = new Observable();
constructor( constructor(
private route: ActivatedRoute, private route: ActivatedRoute,
private themeService: ThemeService, private themeService: ThemeService,
@ -41,10 +36,12 @@ export class WorkComponent implements OnInit {
? (this.themeClass = 'dark-theme') ? (this.themeClass = 'dark-theme')
: (this.themeClass = 'light-theme'); : (this.themeClass = 'light-theme');
}); });
this.workService.getWorks().subscribe((response: Work[]) => this.works = response); this.workService
.getWorks()
.subscribe((response: Work[]) => (this.works = response));
const link = String(this.route.snapshot.paramMap.get('link')); const link = String(this.route.snapshot.paramMap.get('link'));
if (link) { if (link) {
this.workEnCours = this.workService.getWorkByLink(link); // this.workEnCours = this.workService.getWorkByLink(link);
} }
} }

@ -1,21 +1,33 @@
<h2>Works</h2> <h2>Works</h2>
<ul> <ul>
<li *ngFor="let work of works"> <li *ngFor="let work of works">
{{ work.id_work }} - {{ work.link }} - {{ work.content }} {{ work.id_work }} - {{ work.link }} - {{ work.content }}
</li> </li>
</ul> </ul>
<form #addBookForm="ngForm" (ngSubmit)="onSubmit(addBookForm)"> <form #addBookForm="ngForm" (ngSubmit)="onSubmit(addBookForm)">
<div class="form-group"> <div class="form-group">
<label for="link">Link</label> <label for="link">Link</label>
<input type="text" class="form-control" id="link" name="link" ngModel required> <input
</div> type="text"
class="form-control"
id="link"
name="link"
ngModel
required />
</div>
<div class="form-group"> <div class="form-group">
<label for="content">Content</label> <label for="content">Content</label>
<input type="text" class="form-control" id="content" name="content" ngModel required> <input
</div> type="text"
class="form-control"
id="content"
name="content"
ngModel
required />
</div>
<button type="submit" class="btn btn-primary">Submit</button> <button type="submit" class="btn btn-primary">Submit</button>
</form> </form>

@ -8,10 +8,9 @@ describe('WorksListComponent', () => {
beforeEach(async () => { beforeEach(async () => {
await TestBed.configureTestingModule({ await TestBed.configureTestingModule({
imports: [WorksListComponent] imports: [WorksListComponent],
}) }).compileComponents();
.compileComponents();
fixture = TestBed.createComponent(WorksListComponent); fixture = TestBed.createComponent(WorksListComponent);
component = fixture.componentInstance; component = fixture.componentInstance;
fixture.detectChanges(); fixture.detectChanges();

@ -1,30 +1,28 @@
import {Component} from '@angular/core'; import { Component } from '@angular/core';
import {Work} from "../../models/work.model"; import { Work } from '../../models/work.model';
import {WorkService} from "../../services/work.service"; import { WorkService } from '../../services/work.service';
import {NgForOf} from "@angular/common"; import { NgForOf } from '@angular/common';
import {FormsModule, NgForm} from "@angular/forms"; import { FormsModule, NgForm } from '@angular/forms';
@Component({ @Component({
selector: 'app-works-list', selector: 'app-works-list',
standalone: true, standalone: true,
imports: [ imports: [NgForOf, FormsModule],
NgForOf, templateUrl: './works-list.component.html',
FormsModule styleUrl: './works-list.component.css',
],
templateUrl: './works-list.component.html',
styleUrl: './works-list.component.css'
}) })
export class WorksListComponent { export class WorksListComponent {
works: Work[] = []; works: Work[] = [];
constructor(protected workService: WorkService) { constructor(protected workService: WorkService) {}
}
ngOnInit() { ngOnInit() {
this.workService.getWorks().subscribe((response: Work[]) => this.works = response) this.workService
} .getWorks()
.subscribe((response: Work[]) => (this.works = response));
}
onSubmit(form: NgForm) { onSubmit(form: NgForm) {
this.workService.postWork(form); this.workService.postWork(form);
} }
} }

@ -1,7 +1,7 @@
export interface Work { export interface Work {
id_work: number, id_work: number;
link: string, link: string;
user_id: number, user_id: number;
language_id: number, language_id: number;
content: string content: string;
} }

@ -1,43 +1,51 @@
import {Injectable} from '@angular/core'; import { Injectable } from '@angular/core';
import {Work} from "../models/work.model"; import { Work } from '../models/work.model';
import {HttpClient} from "@angular/common/http"; import { HttpClient } from '@angular/common/http';
import {Observable} from "rxjs"; import { Observable } from 'rxjs';
import {NgForm} from "@angular/forms"; import { NgForm } from '@angular/forms';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root',
}) })
export class WorkService { export class WorkService {
API_URL = 'http://127.0.0.1:3000' API_URL = 'http://127.0.0.1:3000';
private works: Work[] = []; private works: Work[] = [];
constructor(private http: HttpClient) { constructor(private http: HttpClient) {}
}
getWorks(): Observable<any> {
getWorks(): Observable<any> { return this.http.get(`${this.API_URL}/works`);
return this.http.get(`${this.API_URL}/works`); }
}
//je veux return les works d'un user id
//je veux return les works d'un user id getWorksByUserId(user_id: string): Observable<any> {
getWorksByUserId(user_id: string): Observable<any> { return this.http.get(`${this.API_URL}/works/${user_id}`);
return this.http.get(`${this.API_URL}/works/${user_id}`); }
}
//je veux return le link du dernier work d'un user (en l'occurence celui connecté)
//je veux return le link du dernier work d'un user (en l'occurence celui connecté) getLastWorkByUserId(user_id: string): Observable<any> {
getLastWorkByUserId(user_id: string): Observable<any> { return this.http.get(`${this.API_URL}/works/user/${user_id}`);
return this.http.get(`${this.API_URL}/work/${user_id}`); }
}
postWork(form: NgForm): void {
let body = {
postWork(form: NgForm): void { link: crypto.randomUUID(),
let body = {link: crypto.randomUUID(), user_id: 1, id_language: 1, code: form.value.content, saveDate: new Date()} user_id: 1,
this.http.post<any>(`${this.API_URL}/works`, body).subscribe(); id_language: 1,
} code: form.value.content,
saveDate: new Date(),
postWorkCode(code: string): void { };
let body = {link: crypto.randomUUID(), user_id: 1, id_language: 1, code: code} this.http.post<any>(`${this.API_URL}/works`, body).subscribe();
this.http.post<any>(`${this.API_URL}/works`, body).subscribe(); }
}
} postWorkCode(code: string): void {
let body = {
link: crypto.randomUUID(),
user_id: 1,
id_language: 1,
code: code,
};
this.http.post<any>(`${this.API_URL}/works`, body).subscribe();
}
}

@ -1,32 +1,35 @@
import {Injectable} from '@angular/core'; import { Injectable } from '@angular/core';
import {Work} from "../models/work.model"; import { Work } from '../models/work.model';
import {HttpClient} from "@angular/common/http"; import { HttpClient } from '@angular/common/http';
import {Observable} from "rxjs"; import { Observable } from 'rxjs';
import {NgForm} from "@angular/forms"; import { NgForm } from '@angular/forms';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root',
}) })
export class WorksService { export class WorksService {
API_URL = 'http://127.0.0.1:3000' API_URL = 'http://127.0.0.1:3000';
private works: Work[] = []; private works: Work[] = [];
constructor(private http: HttpClient) { constructor(private http: HttpClient) {}
}
getWorks(): Observable<any> { getWorks(): Observable<any> {
return this.http.get(`${this.API_URL}/works`); return this.http.get(`${this.API_URL}/works`);
} }
postWork(form: NgForm): void { postWork(form: NgForm): void {
let body = {link: form.value.link, id_user: 1, id_language: 1, code: form.value.content} let body = {
this.http.post<any>(`${this.API_URL}/works`, body).subscribe(); link: form.value.link,
} id_user: 1,
id_language: 1,
code: form.value.content,
};
this.http.post<any>(`${this.API_URL}/works`, body).subscribe();
}
postWorkCode(code: string): void { postWorkCode(code: string): void {
let body = {link: 'TODO', id_user: 1, id_language: 1, code: code} let body = { link: 'TODO', id_user: 1, id_language: 1, code: code };
this.http.post<any>(`${this.API_URL}/works`, body).subscribe(); this.http.post<any>(`${this.API_URL}/works`, body).subscribe();
} }
} }

@ -34,7 +34,7 @@
"SocialTittle": "Join us on our networks", "SocialTittle": "Join us on our networks",
"GetStarted": { "GetStarted": {
"Tittle": "Try Sandkasten", "Tittle": "Try Sandkasten",
"Description":"Join the Sandkasten community now by testing our editor!", "Description": "Join the Sandkasten community now by testing our editor!",
"Button": "Get Started !" "Button": "Get Started !"
} }
}, },

@ -34,7 +34,7 @@
"SocialTittle": "Rejoinez-nous sur nos réseaux", "SocialTittle": "Rejoinez-nous sur nos réseaux",
"GetStarted": { "GetStarted": {
"Tittle": "Allez essayer Sandkasten", "Tittle": "Allez essayer Sandkasten",
"Description":"Rejoignez dès maintenant la communauté Sandkasten en testant notre éditeur !", "Description": "Rejoignez dès maintenant la communauté Sandkasten en testant notre éditeur !",
"Button": "Commencez !" "Button": "Commencez !"
} }
}, },

Loading…
Cancel
Save