placidenduwayo 1 год назад
Родитель
Сommit
8855e7a5e4

+ 3
- 2
angular.json Просмотреть файл

@@ -51,7 +51,7 @@
51 51
               {
52 52
                 "glob": "**/*",
53 53
                 "input": "node_modules/monaco-editor",
54
-                "output": "/assets/monaco"
54
+                "output": "./assets/monaco/"
55 55
               },
56 56
               "src/favicon.ico",
57 57
               "src/assets"
@@ -60,7 +60,8 @@
60 60
               "@angular/material/prebuilt-themes/indigo-pink.css",
61 61
               "src/styles.scss"
62 62
             ],
63
-            "scripts": []
63
+            "scripts": [
64
+            ]
64 65
           },
65 66
           "configurations": {
66 67
             "production": {

+ 3
- 3
package-lock.json Просмотреть файл

@@ -6637,9 +6637,9 @@
6637 6637
       "dev": true
6638 6638
     },
6639 6639
     "monaco-editor": {
6640
-      "version": "0.36.1",
6641
-      "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.36.1.tgz",
6642
-      "integrity": "sha512-/CaclMHKQ3A6rnzBzOADfwdSJ25BFoFT0Emxsc4zYVyav5SkK9iA6lEtIeuN/oRYbwPgviJT+t3l+sjFa28jYg=="
6640
+      "version": "0.34.1",
6641
+      "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.34.1.tgz",
6642
+      "integrity": "sha512-FKc80TyiMaruhJKKPz5SpJPIjL+dflGvz4CpuThaPMc94AyN7SeC9HQ8hrvaxX7EyHdJcUY5i4D0gNyJj1vSZQ=="
6643 6643
     },
6644 6644
     "ms": {
6645 6645
       "version": "2.1.2",

+ 1
- 1
package.json Просмотреть файл

@@ -21,7 +21,7 @@
21 21
     "@angular/platform-browser-dynamic": "^15.2.0",
22 22
     "@angular/router": "^15.2.0",
23 23
     "bootstrap": "^5.2.3",
24
-    "monaco-editor": "^0.36.1",
24
+    "monaco-editor": "^0.34.1",
25 25
     "ngx-monaco-editor-v2": "^15.0.1",
26 26
     "primeicons": "^6.0.1",
27 27
     "primeng": "^15.2.0",

+ 2
- 1
src/app/app-routing.module.ts Просмотреть файл

@@ -1,7 +1,8 @@
1 1
 import { NgModule } from '@angular/core';
2 2
 import { RouterModule, Routes } from '@angular/router';
3 3
 
4
-const routes: Routes = [];
4
+const routes: Routes = [
5
+];
5 6
 
6 7
 @NgModule({
7 8
   imports: [RouterModule.forRoot(routes)],

+ 2
- 2
src/app/pages/monaco-editor-test/monaco-editor-test.module.ts Просмотреть файл

@@ -4,8 +4,8 @@ import { CommonModule } from '@angular/common';
4 4
 import { MonacoEditorTestRoutingModule } from './monaco-editor-test-routing.module';
5 5
 import { MonacoEditorTestComponent } from './monaco-editor-test/monaco-editor-test.component';
6 6
 import { FormsModule } from '@angular/forms';
7
-import { MonacoEditorModule} from 'ngx-monaco-editor-v2'
8
-import { monacoConfig } from 'src/monaco-config';
7
+import { MonacoEditorModule} from 'ngx-monaco-editor-v2';
8
+import { monacoConfig } from 'src/monaco-editor/monaco-editor-config';
9 9
 
10 10
 
11 11
 @NgModule({

+ 9
- 2
src/app/pages/monaco-editor-test/monaco-editor-test/monaco-editor-test.component.html Просмотреть файл

@@ -1,3 +1,10 @@
1 1
 <h1></h1>
2
-<ngx-monaco-editor class="code-editor" [options]="options" [(ngModel)]="java_placeholder"></ngx-monaco-editor>
3
-  
2
+<div style="height: 500px">
3
+    <ngx-monaco-editor 
4
+        style="height: 100%" 
5
+        [options]="options"
6
+        [model]="model"
7
+        [(ngModel)]="html_placeholder"
8
+        (onInit)="onInit($event)">
9
+    </ngx-monaco-editor>
10
+</div>

+ 41
- 18
src/app/pages/monaco-editor-test/monaco-editor-test/monaco-editor-test.component.ts Просмотреть файл

@@ -1,4 +1,5 @@
1 1
 import { Component } from '@angular/core';
2
+import {NgxEditorModel } from 'ngx-monaco-editor-v2'
2 3
 
3 4
 @Component({
4 5
   selector: 'app-monaco-editor',
@@ -6,26 +7,23 @@ import { Component } from '@angular/core';
6 7
   styleUrls: ['./monaco-editor-test.component.scss']
7 8
 })
8 9
 export class MonacoEditorTestComponent{
9
-    
10
-  language: string = 'java';
11
-  theme: string = 'vs-dark';
12
-
13
-    options = {
14
-      theme:this.theme,
15
-      language: this.language,
16
-      automaticLayout: true,
17
-      quickSuggestions:true,
18
-      wordBasedSuggestions:true
19 10
 
20
-    };
21
-  js_placeholder: string=
22
-  `
11
+  onInit(editor:any) {
12
+    let line = editor.getPosition();
13
+    console.log(line);
14
+  }
15
+     
16
+  languages = ['java','csharp','python','html'];
17
+  theme: string = 'vs-dark';
18
+    
19
+  ts_placeholder: string=
20
+  `//typescript placeholder function
23 21
   function printHello () {
24 22
     console.log("Hello world!");
25 23
   }`;
26 24
   
27 25
   java_placeholder: string = 
28
-  `
26
+  `//java placeholder class
29 27
   public class TestHelloWorld {
30 28
     public static void main (String [] args){
31 29
       System.out.println("Hello World");
@@ -33,7 +31,7 @@ export class MonacoEditorTestComponent{
33 31
   }`;
34 32
 
35 33
   csharp_placeholder: string = 
36
-  `
34
+  `//csharp placeholder class
37 35
   using System;
38 36
   namespace Demo
39 37
   {
@@ -44,9 +42,34 @@ export class MonacoEditorTestComponent{
44 42
   }`;
45 43
   json_placeholder: string ='';
46 44
 
47
-  onInit(editor: { getPosition: () => any; }) {
48
-    let line = editor.getPosition();
49
-    console.log(line);
45
+  html_placeholder: string =`
46
+  <html>
47
+    <title>Monaco editor integration</title>
48
+    <body>
49
+      <!-- the body of the page -->
50
+    </body>
51
+  </html>`;
52
+  css_placeholder: string ='';
53
+
54
+  python_placeholder: string = `
55
+  class ClassName {
56
+    __init__(){}
57
+    def method() {
58
+
59
+    }
60
+  }`;
61
+
62
+  options = {
63
+    theme:this.theme,
64
+    automaticLayout: true,
65
+    quickSuggestions:true,
66
+    wordBasedSuggestions:true
67
+  };
68
+
69
+  model: NgxEditorModel = {
70
+    value: this.html_placeholder,
71
+    language: this.languages[3],
50 72
   }
73
+
51 74
 }
52 75
  

+ 0
- 41
src/monaco-config.ts Просмотреть файл

@@ -1,41 +0,0 @@
1
-import { NgxMonacoEditorConfig } from "ngx-monaco-editor-v2";
2
-
3
-
4
-export function onMonacoEditorLoad(id: string = 'java') {
5
-
6
-  (<any>window).monaco.languages.register({ id });
7
-
8
-  (<any>window).monaco.languages.registerCompletionItemProvider(id, {
9
-    triggerCharacters : ['1'],
10
-    providerCompletionItems: function () {
11
-      var suggestions = [
12
-        {
13
-          label: 'simpleText',
14
-          kind: (<any>window).monaco.languages.CompletionItemKind.Text,
15
-          insertText: 'simpleText'
16
-        },
17
-        {
18
-          label: 'testing',
19
-          kind: (<any>window).monaco.languages.CompletionItemKind.Keyword,
20
-          insertText: 'testing(${1:condition})',
21
-          insertTextRules: (<any>window).monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet
22
-        },
23
-        {
24
-          label: 'ifelse',
25
-          kind: (<any>window).monaco.languages.CompletionItemKind.Snippet,
26
-          insertTest: ['if (${1:condition}) {', '\t$0', '} else {', '\t', '}'].join('\n'),
27
-          insertTextRules: (<any>window).monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
28
-          documentation: 'If-Else Statement'
29
-        },
30
-      ];
31
-      return { suggestions: suggestions };
32
-    }
33
-  });
34
-
35
-}
36
-
37
-export const monacoConfig: NgxMonacoEditorConfig = {
38
-  baseUrl: './assets',
39
-  defaultOptions: { scrollBeyondLastLine: false },
40
-  onMonacoLoad: onMonacoEditorLoad
41
-};

+ 71
- 0
src/monaco-editor/monaco-editor-config.ts Просмотреть файл

@@ -0,0 +1,71 @@
1
+declare var monaco: any;
2
+
3
+async function onMonacoEditorLoad(range: Range, languages=['java','csharp','python','html']) {
4
+  const allLangs = await (<any>window).monaco.languages.getLanguages();
5
+  console.log('all supported languages:', allLangs);
6
+  console.log(monaco);
7
+  monaco.languages.register({id: languages[3]});
8
+  monaco.languages.registerCompletionItemProvider(languages[3],{
9
+    triggerCharacters : ['.'],
10
+    provideCompletionItems: function(model:any, position: any){
11
+      var textUntilPosition = model.getValueInRange(
12
+        {startLineNumber: 1, startColumn: 1, 
13
+          endLineNumber: position.lineNumber, 
14
+          endColumn: position.column
15
+        }
16
+      );
17
+        console.log(textUntilPosition);
18
+        var match = textUntilPosition.match(/"dependencies"\s*:\s*\{\s*("[^"]*"\s*:\s*"[^"]*"\s*,\s*)*([^"]*)?$/);
19
+        if (!match) {
20
+            return { suggestions: [] };
21
+        }
22
+        var word = model.getWordUntilPosition(position);
23
+        var range = {
24
+          startLineNumber: position.lineNumber,
25
+          endLineNumber: position.lineNumber,
26
+          startColumn: word.startColumn,
27
+          endColumn: word.endColumn
28
+      };
29
+
30
+      var suggestions = [
31
+        {
32
+            label: '"lodash"',
33
+            kind: monaco.languages.CompletionItemKind.Function,
34
+            documentation: "The Lodash library exported as Node.js modules.",
35
+            insertText: '"lodash": "*"',
36
+            range: range
37
+        },
38
+        {
39
+            label: '"express"',
40
+            kind: monaco.languages.CompletionItemKind.Function,
41
+            documentation: "Fast, unopinionated, minimalist web framework",
42
+            insertText: '"express": "*"',
43
+            range: range
44
+        },
45
+        {
46
+            label: '"mkdirp"',
47
+            kind: monaco.languages.CompletionItemKind.Function,
48
+            documentation: "Recursively mkdir, like <code>mkdir -p</code>",
49
+            insertText: '"mkdirp": "*"',
50
+            range: range
51
+        },
52
+        {
53
+            label: '"my-third-party-library"',
54
+            kind: monaco.languages.CompletionItemKind.Function,
55
+            documentation: "Describe your library here",
56
+            insertText: '"${1:my-third-party-library}": "${2:1.2.3}"',
57
+            insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
58
+            range: range
59
+        }
60
+    ];
61
+    return{suggestions:suggestions};
62
+    }
63
+
64
+  });
65
+}
66
+
67
+export const monacoConfig = {
68
+  baseUrl:'./assets',
69
+  defaultOptions: { scrollBeyondLastLine: false },
70
+  onMonacoLoad: onMonacoEditorLoad
71
+};

Powered by TurnKey Linux.