diff --git a/package-lock.json b/package-lock.json
index 1e524b6..105fa7a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1049,7 +1049,7 @@
},
"@types/uuid": {
"version": "8.3.3",
- "resolved": "https://registry.npmmirror.com/@types/uuid/download/@types/uuid-8.3.3.tgz?cache=0&sync_timestamp=1637271089246&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fuuid%2Fdownload%2F%40types%2Fuuid-8.3.3.tgz",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.3.tgz",
"integrity": "sha512-0LbEEx1zxrYB3pgpd1M5lEhLcXjKJnYghvhTRgaBeUivLHMDM1TzF3IJ6hXU2+8uA4Xz+5BA63mtZo5DjVT8iA=="
},
"@vue/babel-helper-vue-jsx-merge-props": {
@@ -2803,6 +2803,11 @@
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
},
+ "codemirror": {
+ "version": "5.65.2",
+ "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.2.tgz",
+ "integrity": "sha512-SZM4Zq7XEC8Fhroqe3LxbEEX1zUPWH1wMr5zxiBuiUF64iYOUH/JI88v4tBag8MiBS8B8gRv8O1pPXGYXQ4ErA=="
+ },
"collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@@ -3862,6 +3867,11 @@
"integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
"dev": true
},
+ "diff-match-patch": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz",
+ "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw=="
+ },
"diffie-hellman": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
@@ -12615,6 +12625,15 @@
"resolved": "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz",
"integrity": "sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ=="
},
+ "vue-codemirror": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/vue-codemirror/-/vue-codemirror-4.0.6.tgz",
+ "integrity": "sha512-ilU7Uf0mqBNSSV3KT7FNEeRIxH4s1fmpG4TfHlzvXn0QiQAbkXS9lLfwuZpaBVEnpP5CSE62iGJjoliTuA8poQ==",
+ "requires": {
+ "codemirror": "^5.41.0",
+ "diff-match-patch": "^1.0.0"
+ }
+ },
"vue-cropperjs": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/vue-cropperjs/-/vue-cropperjs-3.0.0.tgz",
diff --git a/package.json b/package.json
index bd2454f..b1310b0 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
"px2rem-loader": "^0.1.9",
"sortablejs": "^1.14.0",
"vue": "^2.6.10",
+ "vue-codemirror": "^4.0.6",
"vue-cropperjs": "^3.0.0",
"vue-pdf": "^4.3.0",
"vue-quill-editor": "^3.0.6",
diff --git a/src/assets/img/error.png b/src/assets/img/error.png
new file mode 100644
index 0000000..0be3829
Binary files /dev/null and b/src/assets/img/error.png differ
diff --git a/src/components/codemirror.vue b/src/components/codemirror.vue
new file mode 100644
index 0000000..95790ce
--- /dev/null
+++ b/src/components/codemirror.vue
@@ -0,0 +1,402 @@
+
+ {{ runResult }}