splits
This commit is contained in:
@@ -1 +0,0 @@
|
|||||||
53855
|
|
||||||
111
visualisers/gmvis/package-lock.json
generated
111
visualisers/gmvis/package-lock.json
generated
@@ -9,14 +9,61 @@
|
|||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ace-builds": "^1.32.7",
|
"ace-builds": "^1.32.7",
|
||||||
"react": "16.13.0",
|
"react": "^18.3.0",
|
||||||
"react-ace": "^10.1.0",
|
"react-ace": "11.0.1",
|
||||||
"react-dom": "16.13.0"
|
"react-dom": "18.3.0",
|
||||||
|
"react-resplit": "^1.3.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"shadow-cljs": "2.28.3"
|
"shadow-cljs": "2.28.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@babel/runtime": {
|
||||||
|
"version": "7.24.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz",
|
||||||
|
"integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==",
|
||||||
|
"dependencies": {
|
||||||
|
"regenerator-runtime": "^0.14.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@radix-ui/react-compose-refs": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/runtime": "^7.13.10"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@types/react": "*",
|
||||||
|
"react": "^16.8 || ^17.0 || ^18.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@types/react": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@radix-ui/react-slot": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/runtime": "^7.13.10",
|
||||||
|
"@radix-ui/react-compose-refs": "1.0.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@types/react": "*",
|
||||||
|
"react": "^16.8 || ^17.0 || ^18.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@types/react": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/ace-builds": {
|
"node_modules/ace-builds": {
|
||||||
"version": "1.33.1",
|
"version": "1.33.1",
|
||||||
"resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.33.1.tgz",
|
"resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.33.1.tgz",
|
||||||
@@ -900,28 +947,26 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react": {
|
"node_modules/react": {
|
||||||
"version": "16.13.0",
|
"version": "18.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/react/-/react-16.13.0.tgz",
|
"resolved": "https://registry.npmjs.org/react/-/react-18.3.0.tgz",
|
||||||
"integrity": "sha512-TSavZz2iSLkq5/oiE7gnFzmURKZMltmi193rm5HEoUDAXpzT9Kzw6oNZnGoai/4+fUnm7FqS5dwgUL34TujcWQ==",
|
"integrity": "sha512-RPutkJftSAldDibyrjuku7q11d3oy6wKOyPe5K1HA/HwwrXcEqBdHsLypkC2FFYjP7bPUa6gbzSBhw4sY2JcDg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"loose-envify": "^1.1.0",
|
"loose-envify": "^1.1.0"
|
||||||
"object-assign": "^4.1.1",
|
|
||||||
"prop-types": "^15.6.2"
|
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-ace": {
|
"node_modules/react-ace": {
|
||||||
"version": "10.1.0",
|
"version": "11.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/react-ace/-/react-ace-10.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-ace/-/react-ace-11.0.1.tgz",
|
||||||
"integrity": "sha512-VkvUjZNhdYTuKOKQpMIZi7uzZZVgzCjM7cLYu6F64V0mejY8a2XTyPUIMszC6A4trbeMIHbK5fYFcT/wkP/8VA==",
|
"integrity": "sha512-ulk2851Fx2j59AAahZHTe7rmQ5bITW1xytskAt11F8dv3rPLtdwBXCyT2qSbRnJvOq8UpuAhWO4/JhKGqQBEDA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ace-builds": "^1.4.14",
|
"ace-builds": "^1.32.8",
|
||||||
"diff-match-patch": "^1.0.5",
|
"diff-match-patch": "^1.0.5",
|
||||||
"lodash.get": "^4.4.2",
|
"lodash.get": "^4.4.2",
|
||||||
"lodash.isequal": "^4.5.0",
|
"lodash.isequal": "^4.5.0",
|
||||||
"prop-types": "^15.7.2"
|
"prop-types": "^15.8.1"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"react": "^0.13.0 || ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0",
|
"react": "^0.13.0 || ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0",
|
||||||
@@ -929,17 +974,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-dom": {
|
"node_modules/react-dom": {
|
||||||
"version": "16.13.0",
|
"version": "18.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.0.tgz",
|
||||||
"integrity": "sha512-y09d2c4cG220DzdlFkPTnVvGTszVvNpC73v+AaLGLHbkpy3SSgvYq8x0rNwPJ/Rk/CicTNgk0hbHNw1gMEZAXg==",
|
"integrity": "sha512-zaKdLBftQJnvb7FtDIpZtsAIb2MZU087RM8bRDZU8LVCCFYjPTsDZJNFUWPcVz3HFSN1n/caxi0ca4B/aaVQGQ==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"loose-envify": "^1.1.0",
|
"loose-envify": "^1.1.0",
|
||||||
"object-assign": "^4.1.1",
|
"scheduler": "^0.23.1"
|
||||||
"prop-types": "^15.6.2",
|
|
||||||
"scheduler": "^0.19.0"
|
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"react": "^16.0.0"
|
"react": "^18.3.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-is": {
|
"node_modules/react-is": {
|
||||||
@@ -947,6 +990,18 @@
|
|||||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
||||||
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
|
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
|
||||||
},
|
},
|
||||||
|
"node_modules/react-resplit": {
|
||||||
|
"version": "1.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-resplit/-/react-resplit-1.3.1.tgz",
|
||||||
|
"integrity": "sha512-i1sYitKd3spooCOpDw5IH7STsE6g8jC/UgEWrSGjTG+GISr5PmLpGkWws2ean7ESTS5bXfScCHCs8QusivwZrw==",
|
||||||
|
"dependencies": {
|
||||||
|
"@radix-ui/react-slot": "^1.0.2"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16",
|
||||||
|
"react-dom": ">=16"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/readable-stream": {
|
"node_modules/readable-stream": {
|
||||||
"version": "2.3.8",
|
"version": "2.3.8",
|
||||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
||||||
@@ -986,6 +1041,11 @@
|
|||||||
"node": ">= 0.8.0"
|
"node": ">= 0.8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/regenerator-runtime": {
|
||||||
|
"version": "0.14.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
|
||||||
|
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
|
||||||
|
},
|
||||||
"node_modules/ripemd160": {
|
"node_modules/ripemd160": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
|
||||||
@@ -1017,12 +1077,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/scheduler": {
|
"node_modules/scheduler": {
|
||||||
"version": "0.19.1",
|
"version": "0.23.1",
|
||||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
|
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.1.tgz",
|
||||||
"integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
|
"integrity": "sha512-5GKS5JGfiah1O38Vfa9srZE4s3wdHbwjlCrvIookrg2FO9aIwKLOJXuJQFlEfNcVSOXuaL2hzDeY20uVXcUtrw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"loose-envify": "^1.1.0",
|
"loose-envify": "^1.1.0"
|
||||||
"object-assign": "^4.1.1"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/set-function-length": {
|
"node_modules/set-function-length": {
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"name":"gmvis","version":"0.0.1","private":true,"devDependencies":{"shadow-cljs":"2.28.3"},"dependencies":{"ace-builds":"^1.32.7","react":"16.13.0","react-ace":"^10.1.0","react-dom":"16.13.0"}}
|
{"name":"gmvis","version":"0.0.1","private":true,"devDependencies":{"shadow-cljs":"2.28.3"},"dependencies":{"ace-builds":"^1.32.7","react":"^18.3.0","react-ace":"11.0.1","react-dom":"18.3.0","react-resplit":"^1.3.1"}}
|
||||||
32
visualisers/gmvis/public/css/main.css
Normal file
32
visualisers/gmvis/public/css/main.css
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
@import "solarized-light.css";
|
||||||
|
|
||||||
|
html, body, #mount
|
||||||
|
{ height: 100%
|
||||||
|
; width: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
body
|
||||||
|
{ max-width: 90%
|
||||||
|
; margin: 0 auto
|
||||||
|
; padding: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
.split-root
|
||||||
|
{ height: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
.split-splitter
|
||||||
|
{ width: 100%
|
||||||
|
; height: 100%
|
||||||
|
; background: #ccc
|
||||||
|
}
|
||||||
|
|
||||||
|
.split-pane
|
||||||
|
{ margin: 0
|
||||||
|
; padding: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
.pane-content
|
||||||
|
{ margin: 0.5em
|
||||||
|
}
|
||||||
|
|
||||||
304
visualisers/gmvis/public/css/solarized-light.css
Normal file
304
visualisers/gmvis/public/css/solarized-light.css
Normal file
@@ -0,0 +1,304 @@
|
|||||||
|
@import url(http://fonts.googleapis.com/css?family=Inconsolata);
|
||||||
|
@import url(http://fonts.googleapis.com/css?family=PT+Sans);
|
||||||
|
@import url(http://fonts.googleapis.com/css?family=PT+Sans+Narrow:400,700);
|
||||||
|
article,
|
||||||
|
aside,
|
||||||
|
details,
|
||||||
|
figcaption,
|
||||||
|
figure,
|
||||||
|
footer,
|
||||||
|
header,
|
||||||
|
hgroup,
|
||||||
|
nav,
|
||||||
|
section,
|
||||||
|
summary {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
audio,
|
||||||
|
canvas,
|
||||||
|
video {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
audio:not([controls]) {
|
||||||
|
display: none;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
[hidden] {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
html {
|
||||||
|
font-family: sans-serif;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
a:focus {
|
||||||
|
outline: thin dotted;
|
||||||
|
}
|
||||||
|
a:active,
|
||||||
|
a:hover {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
abbr[title] {
|
||||||
|
border-bottom: 1px dotted;
|
||||||
|
}
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
dfn {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
mark {
|
||||||
|
background: #ff0;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
pre,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, serif;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
pre {
|
||||||
|
white-space: pre-wrap;
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
q {
|
||||||
|
quotes: "\201C" "\201D" "\2018" "\2019";
|
||||||
|
}
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
sup {
|
||||||
|
top: -0.5em;
|
||||||
|
}
|
||||||
|
sub {
|
||||||
|
bottom: -0.25em;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
border: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
figure {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
fieldset {
|
||||||
|
border: 1px solid #c0c0c0;
|
||||||
|
margin: 0 2px;
|
||||||
|
padding: 0.35em 0.625em 0.75em;
|
||||||
|
}
|
||||||
|
legend {
|
||||||
|
border: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: 100%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
button,
|
||||||
|
input {
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
button,
|
||||||
|
html input[type="button"],
|
||||||
|
input[type="reset"],
|
||||||
|
input[type="submit"] {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
button[disabled],
|
||||||
|
input[disabled] {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
input[type="checkbox"],
|
||||||
|
input[type="radio"] {
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
input[type="search"] {
|
||||||
|
-webkit-appearance: textfield;
|
||||||
|
-moz-box-sizing: content-box;
|
||||||
|
-webkit-box-sizing: content-box;
|
||||||
|
box-sizing: content-box;
|
||||||
|
}
|
||||||
|
input[type="search"]::-webkit-search-cancel-button,
|
||||||
|
input[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
input::-moz-focus-inner {
|
||||||
|
border: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0;
|
||||||
|
}
|
||||||
|
html {
|
||||||
|
font-family: 'PT Sans', sans-serif;
|
||||||
|
}
|
||||||
|
pre,
|
||||||
|
code {
|
||||||
|
font-family: 'Inconsolata', sans-serif;
|
||||||
|
}
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
font-family: 'PT Sans Narrow', sans-serif;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
html {
|
||||||
|
background-color: #eee8d5;
|
||||||
|
color: #657b83;
|
||||||
|
margin: 1em;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
background-color: #fdf6e3;
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: 23cm;
|
||||||
|
border: 1pt solid #93a1a1;
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
code {
|
||||||
|
background-color: #eee8d5;
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
color: #b58900;
|
||||||
|
}
|
||||||
|
a:visited {
|
||||||
|
color: #cb4b16;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
color: #cb4b16;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
color: #d33682;
|
||||||
|
}
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
color: #859900;
|
||||||
|
}
|
||||||
|
pre {
|
||||||
|
background-color: #fdf6e3;
|
||||||
|
color: #657b83;
|
||||||
|
border: 1pt solid #93a1a1;
|
||||||
|
padding: 1em;
|
||||||
|
box-shadow: 5pt 5pt 8pt #eee8d5;
|
||||||
|
}
|
||||||
|
pre code {
|
||||||
|
background-color: #fdf6e3;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 2.8em;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-size: 2.4em;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 1.8em;
|
||||||
|
}
|
||||||
|
h4 {
|
||||||
|
font-size: 1.4em;
|
||||||
|
}
|
||||||
|
h5 {
|
||||||
|
font-size: 1.3em;
|
||||||
|
}
|
||||||
|
h6 {
|
||||||
|
font-size: 1.15em;
|
||||||
|
}
|
||||||
|
.tag {
|
||||||
|
background-color: #eee8d5;
|
||||||
|
color: #d33682;
|
||||||
|
padding: 0 0.2em;
|
||||||
|
}
|
||||||
|
.todo,
|
||||||
|
.next,
|
||||||
|
.done {
|
||||||
|
color: #fdf6e3;
|
||||||
|
background-color: #dc322f;
|
||||||
|
padding: 0 0.2em;
|
||||||
|
}
|
||||||
|
.tag {
|
||||||
|
-webkit-border-radius: 0.35em;
|
||||||
|
-moz-border-radius: 0.35em;
|
||||||
|
border-radius: 0.35em;
|
||||||
|
}
|
||||||
|
.TODO {
|
||||||
|
-webkit-border-radius: 0.2em;
|
||||||
|
-moz-border-radius: 0.2em;
|
||||||
|
border-radius: 0.2em;
|
||||||
|
background-color: #2aa198;
|
||||||
|
}
|
||||||
|
.NEXT {
|
||||||
|
-webkit-border-radius: 0.2em;
|
||||||
|
-moz-border-radius: 0.2em;
|
||||||
|
border-radius: 0.2em;
|
||||||
|
background-color: #268bd2;
|
||||||
|
}
|
||||||
|
.ACTIVE {
|
||||||
|
-webkit-border-radius: 0.2em;
|
||||||
|
-moz-border-radius: 0.2em;
|
||||||
|
border-radius: 0.2em;
|
||||||
|
background-color: #268bd2;
|
||||||
|
}
|
||||||
|
.DONE {
|
||||||
|
-webkit-border-radius: 0.2em;
|
||||||
|
-moz-border-radius: 0.2em;
|
||||||
|
border-radius: 0.2em;
|
||||||
|
background-color: #859900;
|
||||||
|
}
|
||||||
|
.WAITING {
|
||||||
|
-webkit-border-radius: 0.2em;
|
||||||
|
-moz-border-radius: 0.2em;
|
||||||
|
border-radius: 0.2em;
|
||||||
|
background-color: #cb4b16;
|
||||||
|
}
|
||||||
|
.HOLD {
|
||||||
|
-webkit-border-radius: 0.2em;
|
||||||
|
-moz-border-radius: 0.2em;
|
||||||
|
border-radius: 0.2em;
|
||||||
|
background-color: #d33682;
|
||||||
|
}
|
||||||
|
.NOTE {
|
||||||
|
-webkit-border-radius: 0.2em;
|
||||||
|
-moz-border-radius: 0.2em;
|
||||||
|
border-radius: 0.2em;
|
||||||
|
background-color: #d33682;
|
||||||
|
}
|
||||||
|
.CANCELLED {
|
||||||
|
-webkit-border-radius: 0.2em;
|
||||||
|
-moz-border-radius: 0.2em;
|
||||||
|
border-radius: 0.2em;
|
||||||
|
background-color: #859900;
|
||||||
|
}
|
||||||
@@ -11,6 +11,8 @@
|
|||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<div id="mount">
|
||||||
|
</div>
|
||||||
<script src="/js/main.js"></script>
|
<script src="/js/main.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,31 +1,28 @@
|
|||||||
(ns main
|
(ns main
|
||||||
(:require
|
(:require
|
||||||
["react-ace$default" :as AceEditor]
|
[ui :as ui]
|
||||||
["ace-builds/src-noconflict/mode-haskell"]
|
|
||||||
["ace-builds/src-noconflict/theme-solarized_light"]
|
|
||||||
["ace-builds/src-noconflict/keybinding-vim"]
|
|
||||||
[wscljs.client :as ws]
|
[wscljs.client :as ws]
|
||||||
[wscljs.format :as fmt]
|
[wscljs.format :as fmt]
|
||||||
[clojure.string :as str]
|
[clojure.string :as str]
|
||||||
[cljs.core.match :refer-macros [match]]))
|
[cljs.core.match :refer-macros [match]]
|
||||||
|
[reagent.dom :as rdom]))
|
||||||
|
|
||||||
(defn display-errors [es]
|
;------------------------------------------------------------------------------;
|
||||||
(doseq [{{e :contents} :diagnostic} es]
|
|
||||||
(let [fmte (map #(str " • " % "\n") e)]
|
(def *rlp-socket nil)
|
||||||
(js/console.warn (apply str "message from rlpc:\n" fmte)))))
|
|
||||||
|
;------------------------------------------------------------------------------;
|
||||||
|
|
||||||
(defn on-message [e]
|
(defn on-message [e]
|
||||||
(let [r (js->clj (js/JSON.parse (.-data e)) :keywordize-keys true)]
|
(let [r (js->clj (js/JSON.parse (.-data e)) :keywordize-keys true)]
|
||||||
(match r
|
(match r
|
||||||
{:tag "Evaluated" :contents c}
|
{:tag "Evaluated" :contents c}
|
||||||
(prn c)
|
(reset! ui/current-evaluation c)
|
||||||
:else
|
:else
|
||||||
(js/console.warn "unrecognised response from rlp"))))
|
(js/console.warn "unrecognised response from rlp"))))
|
||||||
|
|
||||||
(def +rlp-socket+ nil)
|
|
||||||
|
|
||||||
(defn send [msg]
|
(defn send [msg]
|
||||||
(ws/send +rlp-socket+ msg fmt/json))
|
(ws/send *rlp-socket msg fmt/json))
|
||||||
|
|
||||||
(defn on-open []
|
(defn on-open []
|
||||||
(println "socket opened")
|
(println "socket opened")
|
||||||
@@ -39,7 +36,7 @@
|
|||||||
"main = fac 3;"])}))
|
"main = fac 3;"])}))
|
||||||
|
|
||||||
(defn init-rlp-socket []
|
(defn init-rlp-socket []
|
||||||
(set! +rlp-socket+ (ws/create "ws://127.0.0.1:9002"
|
(set! *rlp-socket (ws/create "ws://127.0.0.1:9002"
|
||||||
{:on-message on-message
|
{:on-message on-message
|
||||||
:on-open on-open
|
:on-open on-open
|
||||||
:on-close #(println "socket closed")
|
:on-close #(println "socket closed")
|
||||||
@@ -47,12 +44,14 @@
|
|||||||
|
|
||||||
;; this is called before any code is reloaded
|
;; this is called before any code is reloaded
|
||||||
(defn ^:dev/before-load stop []
|
(defn ^:dev/before-load stop []
|
||||||
(ws/close +rlp-socket+)
|
(ws/close *rlp-socket)
|
||||||
(js/console.log "stop"))
|
(js/console.log "stop"))
|
||||||
|
|
||||||
;; start is called by init and after code reloading finishes
|
;; start is called by init and after code reloading finishes
|
||||||
(defn ^:dev/after-load start []
|
(defn ^:dev/after-load start []
|
||||||
(js/console.log "start")
|
(js/console.log "start")
|
||||||
|
(rdom/render [ui/Main]
|
||||||
|
(js/document.getElementById "mount"))
|
||||||
(init-rlp-socket))
|
(init-rlp-socket))
|
||||||
|
|
||||||
;; init is called ONCE when the page loads
|
;; init is called ONCE when the page loads
|
||||||
|
|||||||
80
visualisers/gmvis/src/ui.cljs
Normal file
80
visualisers/gmvis/src/ui.cljs
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
(ns ui
|
||||||
|
(:require
|
||||||
|
[wscljs.client :as ws]
|
||||||
|
[wscljs.format :as fmt]
|
||||||
|
[clojure.string :as str]
|
||||||
|
[cljs.core.match :refer-macros [match]]
|
||||||
|
["react-ace$default" :as AceEditor]
|
||||||
|
["react-resplit" :refer (Resplit)]
|
||||||
|
["ace-builds/src-noconflict/mode-haskell"]
|
||||||
|
["ace-builds/src-noconflict/theme-solarized_light"]
|
||||||
|
["ace-builds/src-noconflict/keybinding-vim"]
|
||||||
|
[reagent.core :as r]
|
||||||
|
[reagent.dom :as rdom]))
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------;
|
||||||
|
|
||||||
|
(def current-evaluation (r/atom []))
|
||||||
|
(def current-index (r/atom 0))
|
||||||
|
|
||||||
|
(def +split-width+ "4px")
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------;
|
||||||
|
|
||||||
|
(defn Root [props & children]
|
||||||
|
[:> Resplit.Root (assoc props :class "split-root")
|
||||||
|
[:<> children]])
|
||||||
|
|
||||||
|
(defn Pane [props & children]
|
||||||
|
[:> Resplit.Pane (assoc props :class "split-pane")
|
||||||
|
[:<> children]])
|
||||||
|
|
||||||
|
(defn Splitter [props & children]
|
||||||
|
[:> Resplit.Splitter (assoc props :class "split-splitter")
|
||||||
|
[:<> children]])
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------;
|
||||||
|
|
||||||
|
(defn Stack []
|
||||||
|
[:div {:class "pane-content"}
|
||||||
|
[:h1 "Stack"]])
|
||||||
|
|
||||||
|
(defn Dump []
|
||||||
|
[:div {:class "pane-content"}
|
||||||
|
[:h1 "Dump"]])
|
||||||
|
|
||||||
|
(defn Heap []
|
||||||
|
[:div {:class "pane-content"}
|
||||||
|
[:h1 "Heap"]])
|
||||||
|
|
||||||
|
(defn Code []
|
||||||
|
[:div {:class "pane-content"}
|
||||||
|
[:h1 "Code"]])
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------;
|
||||||
|
|
||||||
|
(defn GM [{st :st}]
|
||||||
|
[Root {:direction "horizontal"}
|
||||||
|
[Pane {:order 0 :initialSize "0.333fr"}
|
||||||
|
[Heap]]
|
||||||
|
[Splitter {:order 1 :size +split-width+}]
|
||||||
|
[Pane {:order 2 :initialSize "0.333fr"}
|
||||||
|
[Root {:direction "vertical"}
|
||||||
|
[Pane {:order 0 :initialSize "0.8fr"}
|
||||||
|
[Stack]]
|
||||||
|
[Splitter {:order 1 :size +split-width+}]
|
||||||
|
[Pane {:order 2 :initialSize "0.2fr"}
|
||||||
|
[Code]]]]
|
||||||
|
[Splitter {:order 3 :size +split-width+}]
|
||||||
|
[Pane {:order 5 :initialSize "0.333fr"}
|
||||||
|
[Dump]]])
|
||||||
|
|
||||||
|
(defn Main []
|
||||||
|
(prn @current-evaluation)
|
||||||
|
(prn @current-index)
|
||||||
|
(if-let [st (nth @current-evaluation
|
||||||
|
@current-index
|
||||||
|
nil)]
|
||||||
|
[GM {:st st}]
|
||||||
|
[:h1 "no evaluation"]))
|
||||||
|
|
||||||
Reference in New Issue
Block a user