add color in result
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details

pull/6/head
Bastien OLLIER 1 year ago
parent 09bdc6abff
commit 75cddb2e84

29
package-lock.json generated

@ -21,6 +21,7 @@
"@emailjs/browser": "^3.11.0", "@emailjs/browser": "^3.11.0",
"@ngx-translate/core": "^15.0.0", "@ngx-translate/core": "^15.0.0",
"@ngx-translate/http-loader": "^8.0.0", "@ngx-translate/http-loader": "^8.0.0",
"ansi-to-html": "^0.7.2",
"codemirror": "^5.65.16", "codemirror": "^5.65.16",
"rxjs": "~7.8.1", "rxjs": "~7.8.1",
"sse.js": "^2.2.0", "sse.js": "^2.2.0",
@ -3799,6 +3800,28 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/ansi-to-html": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.7.2.tgz",
"integrity": "sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g==",
"dependencies": {
"entities": "^2.2.0"
},
"bin": {
"ansi-to-html": "bin/ansi-to-html"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/ansi-to-html/node_modules/entities": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/anymatch": { "node_modules/anymatch": {
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@ -6343,9 +6366,9 @@
"dev": true "dev": true
}, },
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.15.3", "version": "1.15.5",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {

@ -23,6 +23,7 @@
"@emailjs/browser": "^3.11.0", "@emailjs/browser": "^3.11.0",
"@ngx-translate/core": "^15.0.0", "@ngx-translate/core": "^15.0.0",
"@ngx-translate/http-loader": "^8.0.0", "@ngx-translate/http-loader": "^8.0.0",
"ansi-to-html": "^0.7.2",
"codemirror": "^5.65.16", "codemirror": "^5.65.16",
"rxjs": "~7.8.1", "rxjs": "~7.8.1",
"sse.js": "^2.2.0", "sse.js": "^2.2.0",

@ -24,6 +24,7 @@ import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader'; import { TranslateHttpLoader } from '@ngx-translate/http-loader';
import { TranslationService } from './services/translation.service'; import { TranslationService } from './services/translation.service';
import { SafeHTMLPipe } from './safe-html.pipe';
@NgModule({ @NgModule({
declarations: [ declarations: [
@ -37,8 +38,8 @@ import { TranslationService } from './services/translation.service';
FormComponent, FormComponent,
PrivacyPolicyComponent, PrivacyPolicyComponent,
TermsOfServiceComponent, TermsOfServiceComponent,
OurStoryComponent OurStoryComponent,
SafeHTMLPipe
], ],
imports: [ imports: [
BrowserModule, BrowserModule,
@ -59,7 +60,8 @@ import { TranslationService } from './services/translation.service';
deps: [HttpClient] deps: [HttpClient]
}, },
defaultLanguage: 'fr' defaultLanguage: 'fr'
}) }),
//SafeHTMLPipe
], ],
providers: [TranslationService], providers: [TranslationService],
bootstrap: [AppComponent] bootstrap: [AppComponent]

@ -14,20 +14,7 @@
</ngx-codemirror> </ngx-codemirror>
</div> </div>
<div> <pre [innerHTML]="resultContent | safeHTML"></pre>
<ngx-codemirror
[options]="{
theme: 'material',
lineNumbers: false,
lineWrapping: false,
mode: mode,
autofocus: true,
readOnly: true
}"
[(ngModel)]="resultContent"
>
</ngx-codemirror>
</div>
<div> <div>
<label for="language">Langage de programmation</label> <label for="language">Langage de programmation</label>

@ -3,6 +3,8 @@ import { Router } from "@angular/router";
import { CodeExecutionService } from "src/app/services/codeExecution.service"; import { CodeExecutionService } from "src/app/services/codeExecution.service";
import "codemirror/mode/shell/shell.js"; import "codemirror/mode/shell/shell.js";
import "codemirror/mode/clike/clike.js"; import "codemirror/mode/clike/clike.js";
import Convert from 'ansi-to-html';
// Exemple de code pour chaque langage autorisé // Exemple de code pour chaque langage autorisé
const codeDefaults = { const codeDefaults = {
@ -30,7 +32,7 @@ int main() {
return 0; return 0;
}`, }`,
"text/x-sh": `#!/bin/bash "text/x-sh": `#!/bin/bash
echo "Bonjour ceci est un test de code en shell"`, echo "Bonjour ceci est un test de code en shell"style`,
}; };
// Langages autorisés // Langages autorisés
@ -68,10 +70,11 @@ export class EditorComponent implements OnInit {
ngOnInit(): void { ngOnInit(): void {
// Appel à changeMode pour mettre à jour le contenu de l'éditeur et le mode // Appel à changeMode pour mettre à jour le contenu de l'éditeur et le mode
this.changeMode(); this.changeMode();
const convert = new Convert();
this.codeExecutionService.getResult().subscribe((result) => { this.codeExecutionService.getResult().subscribe((result) => {
if (result.type !== 'exit') { if (result.type !== 'exit') {
this.resultContent += result.text; this.resultContent += convert.toHtml(result.text);
} }
}); });
} }

@ -0,0 +1,8 @@
import { SafeHTMLPipe } from './safe-html.pipe';
describe('SafeHTMLPipe', () => {
it('create an instance', () => {
const pipe = new SafeHTMLPipe();
expect(pipe).toBeTruthy();
});
});

@ -0,0 +1,15 @@
import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
@Pipe({
name: 'safeHTML',
})
export class SafeHTMLPipe implements PipeTransform {
constructor(protected sanitizer: DomSanitizer) {}
transform(value: unknown, ...args: unknown[]): unknown {
return this.sanitizer.bypassSecurityTrustHtml(value as string);
}
}

@ -19,6 +19,7 @@
"target": "ES2022", "target": "ES2022",
"module": "ES2022", "module": "ES2022",
"useDefineForClassFields": false, "useDefineForClassFields": false,
"allowSyntheticDefaultImports": true,
"lib": [ "lib": [
"ES2022", "ES2022",
"dom" "dom"

Loading…
Cancel
Save