diff --git a/editor/package-lock.json b/editor/package-lock.json index cc38d9c..ca4e256 100644 --- a/editor/package-lock.json +++ b/editor/package-lock.json @@ -1248,6 +1248,11 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, + "complex.js": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.11.tgz", + "integrity": "sha512-6IArJLApNtdg1P1dFtn3dnyzoZBEF0MwMnrfF1exSBRpZYoy4yieMkpZhQDC0uwctw48vii0CFVyHfpgZ/DfGw==" + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -1866,6 +1871,11 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, + "decimal.js": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", + "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==" + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -2274,6 +2284,11 @@ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, + "escape-latex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2898,6 +2913,11 @@ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", "dev": true }, + "fraction.js": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.12.tgz", + "integrity": "sha512-8Z1K0VTG4hzYY7kA/1sj4/r1/RWLBD3xwReT/RCrUCbzPszjNQCCsy3ktkU/eaEqX3MYa4pY37a52eiBlPMlhA==" + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -4523,6 +4543,11 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, + "javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=" + }, "jquery": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", @@ -4831,6 +4856,21 @@ "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", "dev": true }, + "mathjs": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-7.2.0.tgz", + "integrity": "sha512-9UBMWBB94eyrxX8gskBzkVJZBEig2BUL8CBglQoRW4X/ljdW6hBVm8sT6Jp1MhyEp+2flKJo81qwml6twScxFw==", + "requires": { + "complex.js": "^2.0.11", + "decimal.js": "^10.2.0", + "escape-latex": "^1.2.0", + "fraction.js": "^4.0.12", + "javascript-natural-sort": "^0.7.1", + "seed-random": "^2.2.0", + "tiny-emitter": "^2.1.0", + "typed-function": "^2.0.0" + } + }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -7360,6 +7400,11 @@ } } }, + "seed-random": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", + "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=" + }, "select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -8581,6 +8626,11 @@ "mime-types": "~2.1.24" } }, + "typed-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.0.0.tgz", + "integrity": "sha512-Hhy1Iwo/e4AtLZNK10ewVVcP2UEs408DS35ubP825w/YgSBK1KVLwALvvIG4yX75QJrxjCpcWkzkVRB0BwwYlA==" + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", diff --git a/editor/package.json b/editor/package.json index efa055d..5f1b0ef 100644 --- a/editor/package.json +++ b/editor/package.json @@ -29,6 +29,7 @@ "markdown-it-katex": "^2.0.3", "markdown-it-mark": "^3.0.0", "markdown-it-wikilinks": "^1.0.1", + "mathjs": "^7.2.0", "mermaid": "^8.5.2", "moment": "^2.26.0", "mustache": "^4.0.1", diff --git a/editor/src/index.js b/editor/src/index.js index f48b58a..4803594 100644 --- a/editor/src/index.js +++ b/editor/src/index.js @@ -25,6 +25,10 @@ import 'prismjs/components/prism-jq' import menu from './menu.js' import './styles.scss' import wikiGraph from './graph' +import { create, all } from 'mathjs' + +const math = create(all) + moment.locale('nl') mermaid.initialize({startOnLoad: true}) @@ -218,11 +222,19 @@ _.forEach(holders, (item, i) => { }) function Editor(holder) { + let scope = {} + const options = { transform(text, element) { let converted = text if (converted.startsWith("```", 0) || converted.startsWith("$$", 0)) { converted = MD.render(converted) + } else if (converted.startsWith("=", 0)) { + try { + converted = math.evaluate(converted.substring(1), scope).toString() + } catch (e) { + converted = converted + ' ' + e.message + ''; + } } else { if (text.match(/^(\w+):: (.+)$/)) { converted = converted.replace(/^(\w+):: (.*)$/, '**[[$1]]**: $2') @@ -391,7 +403,8 @@ function Editor(holder) { let mirror = { '[': ']', - '=': '=', + '(': ')', + '{': '}', } if (!isMultiline(input) && mirror.hasOwnProperty(event.key)) {