aboutsummaryrefslogtreecommitdiffstats
path: root/language-web/src/main/js
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <marussy@mit.bme.hu>2021-06-30 11:42:41 +0200
committerLibravatar Kristóf Marussy <marussy@mit.bme.hu>2021-06-30 11:45:25 +0200
commita17708ac1ddcfa8dd53ff7be9bfb0e5ba43a0cea (patch)
treecf96b878b0d91ca7a806224960d3bd1d65f0aec8 /language-web/src/main/js
parentFix enum literal scopes (diff)
downloadrefinery-a17708ac1ddcfa8dd53ff7be9bfb0e5ba43a0cea.tar.gz
refinery-a17708ac1ddcfa8dd53ff7be9bfb0e5ba43a0cea.tar.zst
refinery-a17708ac1ddcfa8dd53ff7be9bfb0e5ba43a0cea.zip
Convert to React app
Diffstat (limited to 'language-web/src/main/js')
-rw-r--r--language-web/src/main/js/components/XtextCodeMirror.jsx32
-rw-r--r--language-web/src/main/js/index.js12
-rw-r--r--language-web/src/main/js/index.jsx43
3 files changed, 75 insertions, 12 deletions
diff --git a/language-web/src/main/js/components/XtextCodeMirror.jsx b/language-web/src/main/js/components/XtextCodeMirror.jsx
new file mode 100644
index 00000000..75a20daa
--- /dev/null
+++ b/language-web/src/main/js/components/XtextCodeMirror.jsx
@@ -0,0 +1,32 @@
1import React, { useCallback, useState } from 'react';
2import { Controlled as CodeMirror } from 'react-codemirror2';
3import 'mode-problem';
4import { createServices, removeServices } from 'xtext/xtext-codemirror';
5
6export default function XtextCodeMirror({ initialValue }) {
7 const [value, setValue] = useState(initialValue);
8
9 const codeMirrorOptions = {
10 mode: 'xtext/problem',
11 indentUnit: 2,
12 };
13
14 const xtextOptions = {
15 xtextLang: 'problem',
16 enableFormattingAction: true,
17 };
18
19 const onBeforeChange = useCallback((_editor, _data, newValue) => {
20 setValue(newValue);
21 }, [setValue]);
22
23 return (
24 <CodeMirror
25 value={value}
26 options={codeMirrorOptions}
27 editorDidMount={editor => createServices(editor, xtextOptions)}
28 editorWillUnmount={removeServices}
29 onBeforeChange={onBeforeChange}
30 />
31 );
32};
diff --git a/language-web/src/main/js/index.js b/language-web/src/main/js/index.js
deleted file mode 100644
index b4cd450e..00000000
--- a/language-web/src/main/js/index.js
+++ /dev/null
@@ -1,12 +0,0 @@
1import xtext from 'xtext/xtext-codemirror';
2import 'mode-problem';
3
4import '../css/index.scss';
5
6xtext.createEditor({
7 baseUrl: '/',
8 xtextLang: 'problem',
9 enableFormattingAction: true,
10 sendFullText: false,
11 indentUnit: 2,
12});
diff --git a/language-web/src/main/js/index.jsx b/language-web/src/main/js/index.jsx
new file mode 100644
index 00000000..48c0baeb
--- /dev/null
+++ b/language-web/src/main/js/index.jsx
@@ -0,0 +1,43 @@
1import React from 'react';
2import { render } from 'react-dom';
3
4import XtextCodeMirror from "./components/XtextCodeMirror";
5
6import '../css/index.scss';
7
8const initialValue = `class Family {
9 contains Person[] members
10}
11
12class Person {
13 Person[] children opposite parent
14 Person[0..1] parent opposite children
15 int age
16 TaxStatus taxStatus
17}
18
19enum TaxStatus {
20 child, student, adult, retired
21}
22
23% A child cannot have any dependents.
24error invalidTaxStatus(Person p) :-
25 taxStatus(p, child), children(p, _q).
26
27Family('family').
28members('family', anne).
29members('family', bob).
30members('family', ciri).
31children(anne, ciri).
32?children(bob, ciri).
33taxStatus(anne, adult).
34age(anne, 35).
35bobAge: 27.
36age(bob, bobAge).
37!age(ciri, bobAge).
38
39scope Family = 1, Person += 5..10.
40`;
41const app = <XtextCodeMirror initialValue={initialValue}/>;
42
43render(app, document.getElementById('app'));