diff --git a/src/app/components/editor/editor.component.html b/src/app/components/editor/editor.component.html
index 26a7fa7..d02a36c 100644
--- a/src/app/components/editor/editor.component.html
+++ b/src/app/components/editor/editor.component.html
@@ -35,10 +35,14 @@
id="language"
name="language"
[(ngModel)]="mode"
- (ngModelChange)="changeMode()"
- >
-
-
+ (ngModelChange)="changeMode()">
+
+
+
+
+
+
+
@@ -51,4 +55,17 @@
Chargement: {{ loadingProgress }}%
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/app/components/editor/editor.component.ts b/src/app/components/editor/editor.component.ts
index a048ccb..07f941c 100644
--- a/src/app/components/editor/editor.component.ts
+++ b/src/app/components/editor/editor.component.ts
@@ -1,45 +1,73 @@
-import { Component, OnInit } from '@angular/core';
-import { Router } from '@angular/router';
-import { CodeExecutionService } from 'src/app/services/codeExecution.service';
-
-// Exemple de code pour chaque langage
-const defaults = {
- markdown:
- '# Sankasten\n\nProjet **SAE 3A** par _FRIZOT, MAZINGUE, OLLIER, FREVILLE ET PRADIER_ text\nGit [Sankasten WEB](https://codefirst.iut.uca.fr/git/sandkasten/sandkasten-web.git)',
- 'text/typescript': `const component = {
+import { Component, OnInit } from "@angular/core";
+import { Router } from "@angular/router";
+import { CodeExecutionService } from "src/app/services/codeExecution.service";
+import "codemirror/mode/shell/shell.js";
+import "codemirror/mode/clike/clike.js";
+
+// Exemple de code pour chaque langage autorisé
+const codeDefaults = {
+ "text/typescript": `const component = {
name: "@exemple/Typescript",
author: "Sandkasten",
repo: "https://codefirst.iut.uca.fr/git/sandkasten/sandkasten-web.git"
- };
- const hello: string = 'Bonjour ceci est un test de code en typescript';`
};
+const hello: string = 'Bonjour ceci est un test de code en typescript';`,
+ "text/javascript": `const component = {
+ name: "@exemple/Javascript",
+ author: "Sandkasten",
+ repo: "https://codefirst.iut.uca.fr/git/sandkasten/sandkasten-web.git"
+};
+const hello = 'Bonjour ceci est un test de code en javascript';`,
+ "text/x-c++src": `#include
+using namespace std;
+int main() {
+ cout << "Bonjour ceci est un test de code en c++" << endl;
+ return 0;
+}`,
+ "text/x-csrc": `#include
+int main() {
+ printf("Bonjour ceci est un test de code en c");
+ return 0;
+}`,
+ "text/x-sh": `#!/bin/bash
+echo "Bonjour ceci est un test de code en shell"`,
+};
+
+// Langages autorisés
+type AllowedLanguage = keyof typeof codeDefaults;
@Component({
- selector: 'app-editor',
- templateUrl: './editor.component.html',
- styleUrls: ['./editor.component.scss']
+ selector: "app-editor",
+ templateUrl: "./editor.component.html",
+ styleUrls: ["./editor.component.scss"],
})
-export class EditorComponent implements OnInit{
-
+export class EditorComponent implements OnInit {
loadingProgress: number = 0; // Pour suivre la progression du chargement
isLoaded: boolean = false; // Pour vérifier si le chargement est terminé
// Mode par défaut
- mode: keyof typeof defaults = 'text/typescript';
+ mode: AllowedLanguage = "text/typescript";
options = {
lineNumbers: true,
mode: this.mode,
};
- defaults = defaults;
+ defaults = codeDefaults;
// Contenu de l'éditeur que l'on passera au serveur
- editorContent: string = defaults[this.mode];
- resultContent: string = defaults[this.mode];
+ editorContent: string = this.defaults[this.mode as keyof typeof codeDefaults];
+ resultContent: string = "";
- constructor(private router: Router, private codeExecutionService: CodeExecutionService) {}
+ // Message d'erreur
+ errorMessage: string = "";
+
+ constructor(
+ private router: Router,
+ private codeExecutionService: CodeExecutionService
+ ) {}
ngOnInit(): void {
-
+ // Appel à changeMode pour mettre à jour le contenu de l'éditeur et le mode
+ this.changeMode();
}
// Change le langage de l'éditeur
@@ -48,25 +76,91 @@ export class EditorComponent implements OnInit{
...this.options,
mode: this.mode,
};
+ this.editorContent = this.defaults[this.mode as keyof typeof codeDefaults];
}
// Affiche le contenu de l'éditeur
handleChange($event: Event): void {
- console.log('ngModelChange', $event);
+ console.log("ngModelChange", $event);
}
// Efface le contenu de l'éditeur
clear(): void {
- this.defaults[this.mode] = '';
+ this.editorContent = "";
+ }
+
+ loadFromFile(event: any): void {
+ const file = event.target.files[0];
+ if (file) {
+ const allowedExtensions = ["sh", "js", "ts", "cpp", "c"];
+ const extension = file.name.split(".").pop()?.toLowerCase();
+
+ if (extension && allowedExtensions.includes(extension)) {
+ // Identifiez le mode en fonction de l'extension
+ const modeMap: Record = {
+ sh: "text/x-sh",
+ js: "text/javascript",
+ ts: "text/typescript",
+ cpp: "text/x-c++src",
+ c: "text/x-csrc",
+ };
+ this.mode = modeMap[extension];
+
+ // Mettez à jour le contenu de l'éditeur et le mode
+ this.changeMode();
+
+ const reader = new FileReader();
+ reader.onload = (e) => {
+ this.editorContent = e.target?.result as string;
+ this.errorMessage = ""; // Réinitialisez le message d'erreur en cas de succès.
+ };
+ reader.readAsText(file);
+ } else {
+ this.errorMessage =
+ "Unsupported file type. Please select a file with one of the following extensions: sh, js, ts, cpp, c";
+ console.error(this.errorMessage);
+ }
+ }
}
-
+
+ saveToFile(): void {
+ const languageExtensionMap: Record = {
+ "text/x-sh": "sh",
+ "text/javascript": "js",
+ "text/typescript": "ts",
+ "text/x-c++src": "cpp",
+ "text/x-csrc": "c",
+ };
+
+ if (languageExtensionMap[this.mode]) {
+ const extension = languageExtensionMap[this.mode];
+ if (this.editorContent.trim() === "") {
+ this.errorMessage = "Cannot save an empty file.";
+ console.error(this.errorMessage);
+ } else {
+ this.errorMessage = ""; // Réinitialisez le message d'erreur en cas de succès.
+ const blob = new Blob([this.editorContent], { type: "text/plain" });
+ const a = document.createElement("a");
+ a.href = window.URL.createObjectURL(blob);
+ a.download = `code.${extension}`;
+ document.body.appendChild(a);
+ a.click();
+ document.body.removeChild(a);
+ }
+ } else {
+ this.errorMessage =
+ "Unsupported language. Please select one of the following languages: shell, javascript, typescript, c++, c";
+ console.error(this.errorMessage);
+ }
+ }
+
onRunButtonClicked() {
// Le code à exécuter est le contenu de l'éditeur
const codeToExecute = this.editorContent;
this.codeExecutionService.executeCode(codeToExecute, this.mode);
- this.codeExecutionService.getResult().subscribe(result => {
+ this.codeExecutionService.getResult().subscribe((result) => {
this.resultContent = result;
});
}