diff --git a/package-lock.json b/package-lock.json index c513e99c..7b496373 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,22 +1,23 @@ { "name": "top-frontend", - "version": "0.8.2", + "version": "0.8.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "top-frontend", - "version": "0.8.2", + "version": "0.8.3", "dependencies": { "@dsb-norge/vue-keycloak-js": "^2.4.0", "@lhncbc/ucum-lhc": "6.0.2", - "@onto-med/top-api": "^0.10.0", + "@onto-med/top-api": "^0.10.1", "@quasar/extras": "^1.16.12", "@types/papaparse": "^5.3.14", "@zip.js/zip.js": "^2.7.34", "ag-grid-vue3": "32.0.2", "core-js": "^3.33.2", "fork-ts-checker-webpack-plugin": ">=6.5.3", + "json-editor-vue": "^0.15.1", "papaparse": "^5.4.1", "pinia": "^2.1.7", "quasar": "^2.14.0", @@ -62,7 +63,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -2333,6 +2333,99 @@ "license": "MIT", "peer": true }, + "node_modules/@codemirror/autocomplete": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.0.tgz", + "integrity": "sha512-5DbOvBbY4qW5l57cjDsmmpDh3/TeK1vXfTHa+BUMrRzdWdcxKZ4U4V7vQaTtOpApNU4kLS4FQ6cINtLg245LXA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0" + }, + "peerDependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@codemirror/commands": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.6.1.tgz", + "integrity": "sha512-iBfKbyIoXS1FGdsKcZmnrxmbc8VcbMrSgD7AVrsnX+WyAYjmUDWvE93dt5D874qS4CCVu4O1JpbagHdXbbLiOw==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.4.0", + "@codemirror/view": "^6.27.0", + "@lezer/common": "^1.1.0" + } + }, + "node_modules/@codemirror/lang-json": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.1.tgz", + "integrity": "sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/json": "^1.0.0" + } + }, + "node_modules/@codemirror/language": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.2.tgz", + "integrity": "sha512-kgbTYTo0Au6dCSc/TFy7fK3fpJmgHDv1sG1KNQKJXVi+xBTEeBPY/M30YXiU6mMXeH+YIDLsbrT4ZwNRdtF+SA==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.1.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/lint": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.1.tgz", + "integrity": "sha512-IZ0Y7S4/bpaunwggW2jYqwLuHj0QtESf5xcROewY6+lDNwZ/NzvR4t+vpYgg9m7V8UXLPYqG+lu3DF470E5Oxg==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/search": { + "version": "6.5.6", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.6.tgz", + "integrity": "sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/state": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", + "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==", + "license": "MIT" + }, + "node_modules/@codemirror/view": { + "version": "6.33.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.33.0.tgz", + "integrity": "sha512-AroaR3BvnjRW8fiZBalAaK+ZzB5usGgI014YKElYZvQdNH5ZIidHlO+cyf/2rWzyBFRkvG6VhiXeAEbC53P2YQ==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.4.0", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -2892,6 +2985,39 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.6.0.tgz", + "integrity": "sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-regular-svg-icons": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.6.0.tgz", + "integrity": "sha512-Yv9hDzL4aI73BEwSEh20clrY8q/uLxawaQ98lekBx6t9dQKDHcDzzV1p2YtBGTtolYtNqcWdniOnhzB+JPnQEQ==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.6.0.tgz", + "integrity": "sha512-IYv/2skhEDFc2WGUcqvFJkeK39Q+HyPf5GHUrT/l2pKbtgEIv1al1TKd6qStR5OIwQdN1GZP54ci3y4mroJWjA==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.6.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -3955,6 +4081,41 @@ "dev": true, "license": "MIT" }, + "node_modules/@lezer/common": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.1.tgz", + "integrity": "sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==", + "license": "MIT" + }, + "node_modules/@lezer/highlight": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", + "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.2.tgz", + "integrity": "sha512-xHT2P4S5eeCYECyKNPhr4cbEL9tc8w83SPwRC373o9uEdrvGKTZoJVAGxpOsZckMlEh9W23Pc72ew918RWQOBQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", + "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, "node_modules/@lhncbc/ucum-lhc": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@lhncbc/ucum-lhc/-/ucum-lhc-6.0.2.tgz", @@ -4030,9 +4191,9 @@ "peer": true }, "node_modules/@onto-med/top-api": { - "version": "0.10.0", - "resolved": "https://npm.pkg.github.com/download/@Onto-Med/top-api/0.10.0/c5907b0ed8aaae9e254f6346b57b71fe01d2f123", - "integrity": "sha512-PZh3q348uBDJcp+LFEvuTXnUyd4fdOoH59KBw/4C7FnbyTgMNPbEA4CV2trlCQXxY0Pw1n2De31ePuVQENASBw==", + "version": "0.10.1", + "resolved": "https://npm.pkg.github.com/download/@Onto-Med/top-api/0.10.1/39207c7a6ac1829f7f23903ed9bb175fdbfb1507", + "integrity": "sha512-t8R83Qd5sW8SWcirGUVB6k2f/szuXft5ZPe15bSgG/H/n9JjPj6DbAkdxcojBgo/pgypi2Q2CsFRWzM6t15eCw==", "license": "Unlicense", "dependencies": { "axios": "^0.21.4" @@ -4663,6 +4824,17 @@ "url": "https://donate.quasar.dev" } }, + "node_modules/@replit/codemirror-indentation-markers": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/@replit/codemirror-indentation-markers/-/codemirror-indentation-markers-6.5.3.tgz", + "integrity": "sha512-hL5Sfvw3C1vgg7GolLe/uxX5T3tmgOA3ZzqlMv47zjU1ON51pzNWiVbS22oh6crYhtVhv8b3gdXwoYp++2ilHw==", + "license": "MIT", + "peerDependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -4690,6 +4862,12 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@sphinxxxx/color-conversion": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz", + "integrity": "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==", + "license": "ISC" + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -6318,6 +6496,15 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -6502,6 +6689,15 @@ "follow-redirects": "^1.14.0" } }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/babel-core": { "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", @@ -7530,6 +7726,39 @@ "node": ">= 0.12.0" } }, + "node_modules/code-red": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1", + "acorn": "^8.10.0", + "estree-walker": "^3.0.3", + "periscopic": "^3.1.0" + } + }, + "node_modules/code-red/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/codemirror-wrapped-line-indent": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/codemirror-wrapped-line-indent/-/codemirror-wrapped-line-indent-1.0.8.tgz", + "integrity": "sha512-5UwuHCz4oAZuvot1DbfFxSxJacTESdNGa/KpJD7HfpVpDAJdgB1vV9OG4b4pkJqPWuOfIpFLTQEKS85kTpV+XA==", + "license": "MIT", + "peerDependencies": { + "@codemirror/language": "^6.9.0", + "@codemirror/state": "^6.2.1", + "@codemirror/view": "^6.17.1" + } + }, "node_modules/coffeescript": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.7.0.tgz", @@ -8113,6 +8342,12 @@ "node": ">=8" } }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -8280,7 +8515,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, "license": "MIT", "dependencies": { "mdn-data": "2.0.30", @@ -8702,6 +8936,15 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -8735,7 +8978,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10431,7 +10673,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", - "dev": true, "license": "MIT" }, "node_modules/fastq": { @@ -11855,9 +12096,14 @@ "version": "4.3.5", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", - "dev": true, "license": "MIT" }, + "node_modules/immutable-json-patch": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/immutable-json-patch/-/immutable-json-patch-6.0.1.tgz", + "integrity": "sha512-BHL/cXMjwFZlTOffiWNdY8ZTvNyYLrutCnWxrcKPHr5FqpAb6vsO6WWSPnVSys3+DruFN6lhHJJPHi8uELQL5g==", + "license": "ISC" + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -12318,6 +12564,15 @@ "dev": true, "license": "MIT" }, + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -14465,6 +14720,15 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/js-beautify": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", @@ -14891,6 +15155,52 @@ "dev": true, "license": "MIT" }, + "node_modules/json-editor-vue": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/json-editor-vue/-/json-editor-vue-0.15.2.tgz", + "integrity": "sha512-MQQPiz+tKTqIMhbYk9mS8lr3DeJaR6n5uDshuxgDnsLGJhgYooZ8bDgbCJ3SUt1M25tKSy793KqUQb7BSZkdYg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "vanilla-jsoneditor": "^0.23.8", + "vue-demi": "^0.14.10" + }, + "peerDependencies": { + "@vue/composition-api": ">=1", + "vue": "2||3" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/json-editor-vue/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -14903,6 +15213,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "license": "MIT" }, + "node_modules/json-source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz", + "integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==", + "license": "MIT" + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -14932,6 +15248,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonrepair": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/jsonrepair/-/jsonrepair-3.8.0.tgz", + "integrity": "sha512-89lrxpwp+IEcJ6kwglF0HH3Tl17J08JEpYfXnvvjdp4zV4rjSoGu2NdQHxBs7yTOk3ETjTn9du48pBy8iBqj1w==", + "license": "ISC", + "bin": { + "jsonrepair": "bin/cli.js" + } + }, "node_modules/keycloak-js": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/keycloak-js/-/keycloak-js-21.1.1.tgz", @@ -15115,6 +15440,12 @@ "node": ">=8.9.0" } }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "license": "MIT" + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -15139,7 +15470,6 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "dev": true, "license": "MIT" }, "node_modules/lodash.debounce": { @@ -15472,7 +15802,6 @@ "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true, "license": "CC0-1.0" }, "node_modules/media-typer": { @@ -15498,6 +15827,12 @@ "node": ">= 4.0.0" } }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -15761,6 +16096,12 @@ "dev": true, "license": "MIT" }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "license": "MIT" + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -16634,6 +16975,26 @@ "node": "*" } }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/periscopic/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", @@ -18042,7 +18403,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -18296,10 +18656,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.72.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.72.0.tgz", - "integrity": "sha512-Gpczt3WA56Ly0Mn8Sl21Vj94s1axi9hDIzDFn9Ph9x3C3p4nNyvsqJoQyVXKou6cBlfFWEgRW4rT8Tb4i3XnVA==", - "dev": true, + "version": "1.78.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.78.0.tgz", + "integrity": "sha512-AaIqGSrjo5lA2Yg7RvFZrlXDBCp3nV4XP73GrLGvdRWWwk+8H3l0SDvq/5bA4eF+0RFPLuWUk3E+P1U/YqnpsQ==", "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -19395,6 +19754,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-mod": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", + "license": "MIT" + }, "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", @@ -19437,6 +19802,40 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svelte": { + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", + "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", + "acorn": "^8.9.0", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "code-red": "^1.0.3", + "css-tree": "^2.3.1", + "estree-walker": "^3.0.3", + "is-reference": "^3.0.1", + "locate-character": "^3.0.0", + "magic-string": "^0.30.4", + "periscopic": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/svelte/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/svgo": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", @@ -20595,6 +20994,70 @@ "node": ">=10.12.0" } }, + "node_modules/vanilla-jsoneditor": { + "version": "0.23.8", + "resolved": "https://registry.npmjs.org/vanilla-jsoneditor/-/vanilla-jsoneditor-0.23.8.tgz", + "integrity": "sha512-ly5wmhnICxYhLunBVKbe0jEkPLjDeEGWPV1Lpt7HzzsPCFOmpIs05Go2XgXErmID2nWRp2s5DkT2hBVE4B+rmA==", + "license": "ISC", + "dependencies": { + "@codemirror/autocomplete": "^6.16.2", + "@codemirror/commands": "^6.6.0", + "@codemirror/lang-json": "^6.0.1", + "@codemirror/language": "^6.10.2", + "@codemirror/lint": "^6.8.0", + "@codemirror/search": "^6.5.6", + "@codemirror/state": "^6.4.1", + "@codemirror/view": "^6.27.0", + "@fortawesome/free-regular-svg-icons": "^6.5.2", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@lezer/highlight": "^1.2.0", + "@replit/codemirror-indentation-markers": "^6.5.2", + "ajv": "^8.16.0", + "codemirror-wrapped-line-indent": "^1.0.8", + "diff-sequences": "^29.6.3", + "immutable-json-patch": "6.0.1", + "jmespath": "^0.16.0", + "json-source-map": "^0.6.1", + "jsonrepair": "^3.8.0", + "lodash-es": "^4.17.21", + "memoize-one": "^6.0.0", + "natural-compare-lite": "^1.4.0", + "sass": "^1.77.4", + "svelte": "^4.2.17", + "vanilla-picker": "^2.12.3" + } + }, + "node_modules/vanilla-jsoneditor/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/vanilla-jsoneditor/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/vanilla-picker": { + "version": "2.12.3", + "resolved": "https://registry.npmjs.org/vanilla-picker/-/vanilla-picker-2.12.3.tgz", + "integrity": "sha512-qVkT1E7yMbUsB2mmJNFmaXMWE2hF8ffqzMMwe9zdAikd8u2VfnsVY2HQcOUi2F38bgbxzlJBEdS1UUhOXdF9GQ==", + "license": "ISC", + "dependencies": { + "@sphinxxxx/color-conversion": "^2.2.2" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -20947,6 +21410,12 @@ "he": "^1.2.0" } }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" + }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", diff --git a/package.json b/package.json index 0be32c8f..de29114a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "top-frontend", - "version": "0.8.2", + "version": "0.8.3", "description": "An app for ontological modelling and managing of phenotypes.", "productName": "TOP Framework", "repository": { @@ -24,20 +24,21 @@ "dependencies": { "@dsb-norge/vue-keycloak-js": "^2.4.0", "@lhncbc/ucum-lhc": "6.0.2", - "@onto-med/top-api": "^0.10.0", + "@onto-med/top-api": "^0.10.1", "@quasar/extras": "^1.16.12", "@types/papaparse": "^5.3.14", "@zip.js/zip.js": "^2.7.34", "ag-grid-vue3": "32.0.2", "core-js": "^3.33.2", + "fork-ts-checker-webpack-plugin": ">=6.5.3", + "json-editor-vue": "^0.15.1", "papaparse": "^5.4.1", "pinia": "^2.1.7", "quasar": "^2.14.0", "uuid": "^9.0.1", "vue": "^3.3.8", "vue-i18n": "^9.7.0", - "vue-router": "^4.2.5", - "fork-ts-checker-webpack-plugin": ">=6.5.3" + "vue-router": "^4.2.5" }, "devDependencies": { "@babel/eslint-parser": "^7.23.3", diff --git a/src/components/Documents/ConceptClusterDialog.vue b/src/components/Documents/ConceptClusterDialog.vue index 5349bcae..46cbd0ab 100644 --- a/src/components/Documents/ConceptClusterDialog.vue +++ b/src/components/Documents/ConceptClusterDialog.vue @@ -18,10 +18,17 @@

{{ t('status') }}: {{ graphPipelineStatus }} - - - + + +

+ + + @@ -59,6 +85,7 @@

() @@ -143,14 +177,19 @@ const conceptGraphs = ref([]) const selectedGraphs = ref([]) const graphPipelineInterval = ref() const clusterPipelineInterval = ref() +const skipPresent = ref(true) const isGraphPipelineFinished = computed(() => graphPipeline.value?.status === PipelineResponseStatus.Successful) const isGraphPipelineFailed = computed(() => graphPipeline.value?.status === PipelineResponseStatus.Failed) +const isGraphPipelineRunning = computed(() => graphPipeline.value?.status === PipelineResponseStatus.Running) +const isGraphPipelineStopping = computed(() => graphPipeline.value?.status === PipelineResponseStatus.Stopped) const isClusterPipelineFinished = computed(() => clusterPipeline.value?.status === PipelineResponseStatus.Successful) const isClusterPipelineFailed = computed(() => clusterPipeline.value?.status === PipelineResponseStatus.Failed) +const isClusterPipelineRunning = computed(() => clusterPipeline.value?.status === PipelineResponseStatus.Running) const graphPipelineStatus = computed(() => statusToString(graphPipeline.value?.status)) const clusterPipelineStatus = computed(() => statusToString(clusterPipeline.value?.status)) +const graphPipelineStatusDetails = computed(() => statusDetailsToString(graphPipeline.value?.steps)) const graphColumns = computed( () => @@ -162,6 +201,26 @@ const graphColumns = computed( ] as QTableProps['columns'] ) +const configPipelineButtonTitle = computed( + () => { + if (!language.value) return t('conceptCluster.tooltips.noLanguage') + ' ' + t('conceptCluster.tooltips.editing') + else if (!isAdmin.value) return t('conceptCluster.tooltips.onlyAdmins') + ' ' + t('conceptCluster.tooltips.editing') + else if (isGraphPipelineRunning.value) return t('conceptCluster.tooltips.running', {'optional': t('pipeline') + ' '}) + '. ' + t('conceptCluster.tooltips.cantEdit') + else return '' + } +) + +const startPipelineButtonTitle = computed( + () => { + if (!language.value) return t('conceptCluster.tooltips.noLanguage') + ' ' + t('conceptCluster.tooltips.starting') + else if (!isAdmin.value) return t('conceptCluster.tooltips.onlyAdmins') + ' ' + t('conceptCluster.tooltips.starting') + else if (isGraphPipelineRunning.value || isGraphPipelineStopping.value) return t('conceptCluster.tooltips.running', {'optional': t('pipeline') + ' '}) + '/' + t('conceptCluster.tooltips.stopped', {'optional': ''}) + '. ' + t('conceptCluster.tooltips.cantStart') + else return '' + } +) + +const pipelineJsonConfig = ref('') + onMounted(() => { loadGraphPipeline() }) @@ -171,10 +230,23 @@ onUnmounted(() => { window.clearInterval(clusterPipelineInterval.value) }) +//ToDo: maybe don't erase config on language switch when a manual save was already commited? +watch(language, () => {pipelineJsonConfig.value = ''}) + function statusToString(status?: PipelineResponseStatus) { return !status ? t('unavailable') : te(status) ? t(status) : status } +function statusDetailsToString(steps?: ConceptGraphPipelineStatus[]) { + let returnString = 'Unfinished steps: ' + steps + ?.filter((step: ConceptGraphPipelineStatus) => {return step.status != ConceptGraphPipelineStatusEnum.Finished}) + .forEach((step: ConceptGraphPipelineStatus) => { + returnString += '\"' + step.name + '\", ' + }) + return returnString.slice(0, returnString.length - 2) +} + function loadGraphPipeline() { conceptPipelineApi ?.getConceptGraphPipelineById(props.dataSource.id) @@ -191,7 +263,7 @@ function loadGraphPipeline() { graphPipeline.value = r.data }) .then(() => { - if (graphPipeline.value?.status === PipelineResponseStatus.Running) + if (graphPipeline.value?.status === PipelineResponseStatus.Running || graphPipeline.value?.status === PipelineResponseStatus.Stopped) graphPipelineInterval.value = window.setTimeout(loadGraphPipeline, 5000) }) .catch((e: Error) => { @@ -246,6 +318,17 @@ function confirmStartPipeline() { }) } +function confirmStopPipeline() { + $q.dialog({ + component: Dialog, + componentProps: { + message: t('conceptCluster.confirmStop') + } + }).onOk(() => { + stopPipeline().catch((e: Error) => renderError(e)) + }) +} + function confirmDeletePipeline() { $q.dialog({ component: Dialog, @@ -280,12 +363,21 @@ function confirmPublishClusters() { } async function startPipeline() { - return conceptPipelineApi - ?.startConceptGraphPipeline(props.dataSource.id, props.dataSource.id, undefined, undefined, language.value) - .then(loadGraphPipeline) + if (pipelineJsonConfig.value != '') { + let jsonBody = (`{"name": "${props.dataSource?.id}", "language": "${language.value}", "return_statistics": "false", + "skip_present": "${skipPresent.value}", "config": ${JSON.stringify(pipelineJsonConfig.value)}}`) + return conceptPipelineApi + ?.startConceptGraphPipelineWithJson(jsonBody) + .then(loadGraphPipeline) + } else { + return conceptPipelineApi + ?.startConceptGraphPipeline(props.dataSource.id, props.dataSource.id, undefined, undefined, language.value) + .then(loadGraphPipeline) + } } async function deletePipeline() { + //ToDo: reload concept clusters in DocumentSearchForm when pipeline is deleted window.clearInterval(graphPipelineInterval.value) graphPipelineInterval.value = undefined return conceptPipelineApi @@ -293,6 +385,12 @@ async function deletePipeline() { .then(() => (graphPipeline.value = undefined)) } +async function stopPipeline() { + return conceptPipelineApi + ?.stopConceptGraphPipeline(props.dataSource.id) + .then(() => Notify.create({ 'message': 'Stopping Pipeline', 'type': 'warning' })) +} + function getSelectedRowsString() { return t('recordSelected', selectedGraphs.value.length) } @@ -346,6 +444,27 @@ function loadConceptGraphs() { .catch((e: Error) => renderError(e)) } +function configurePipeline() { + // pipelineId only gets submitted to 'configure dialog' (and therefore a configuration for it is loaded) + // when the relevant 'graphPipeline' is finished, else a language default configuration is loaded + let pipelineIdSubmit = undefined + //ToDo: config of an unfinished pipeline is not loaded with this setup + if (isGraphPipelineFinished.value) pipelineIdSubmit = graphPipeline.value?.pipelineId + //ToDo: pipelineJsonConfig is not persisted between closing/opening ConceptClusterDialog + $q.dialog({ + component: PipelineConfigForm, + componentProps: { + pipelineId: pipelineIdSubmit, + savedConfig: pipelineJsonConfig.value, + language: language.value + }, + }).onOk((jsonConfig: string) => { + pipelineJsonConfig.value = jsonConfig + }).onCancel(() => { + //ToDo: need something here to be done on Cancel? + }) +} + interface ConceptGraphObject { id: string nodes: number diff --git a/src/components/Documents/PipelineConfigForm.vue b/src/components/Documents/PipelineConfigForm.vue new file mode 100644 index 00000000..538eb9a6 --- /dev/null +++ b/src/components/Documents/PipelineConfigForm.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/src/i18n/de.json b/src/i18n/de.json index 3c7f7b87..e9ed4806 100644 --- a/src/i18n/de.json +++ b/src/i18n/de.json @@ -189,6 +189,8 @@ "thingSaved": "{thing} wurde gespeichert", "deleteThing": "{thing} löschen", "thingDeleted": "{thing} wurde gelöscht", + "stopThing": "Stoppe {thing}", + "thingStopped": "{thing} wurde gestoppt", "editThing": "{thing} bearbeiten", "help": "Hilfe", "version": "Version|Versionen", @@ -391,6 +393,7 @@ "updatedAt": "Aktualisiert am {date}", "goToThing": "Gehe zu {thing}", "downloadDataSet": "Gesamten Datensatz herunterladen", + "downloadConfig": "Konfiguration herunterladen", "includePrimaryRepositories": "Öffentliche Repositorien einschließen", "includePrimaryRepositoriesDescription": "Aktivieren Sie diese Option, um die Entitätssuche auf alle Entitäten in öffentlichen Repositorien zu erweitern.", "forkCouldNotBeCreated": "Es konnte kein Fork erstellt werden, da möglicherweise bereits ein aktueller Fork in diesem Repositorium vorhanden ist.", @@ -536,12 +539,29 @@ "pipelineStarted": "Die Generierungspipeline wurde gestartet. In wenigen Minuten sollten neue Cluster verfügbar sein.", "pipelineFailed": "Die Generierungspipeline ist fehlgeschlagen. Bitte versuche es erneut.", "reviewDescription": "Bitte wählen Sie relevante Cluster aus der Vorverarbeitung unten aus. Sie können diese dann veröffentlichen, damit sie für Dokumentenabfragen zur Verfügung stehen.", - "preProcessingDescription": "Um Konzeptcluster für eine Datenquelle zu generieren, müssen die in dieser Datenquelle enthaltenen Dokumente mithilfe einer Conceptgraph Pipeline vorverarbeitet werden. Abhängig von der Anzahl der Dokumente kann diese Pipeline mehrere Minuten dauern. Der Status wird unten aufgeführt. Es kann nur eine Pipeline für eine Datenquelle geben, was bedeutet, dass durch einen Neustart der Pipeline alle vorhandenen Konzeptcluster gelöscht werden!\nSobald die Vorverarbeitung abgeschlossen ist, können Sie zum nächsten Schritt navigieren und relevante Cluster auswählen, um sie den Benutzern zum Abrufen von Dokumenten zur Verfügung zu stellen.", + "preProcessingDescription": "Um Konzeptcluster für eine Datenquelle zu generieren, müssen die in dieser Datenquelle enthaltenen Dokumente mithilfe einer Conceptgraph Pipeline vorverarbeitet werden. Abhängig von der Anzahl der Dokumente kann diese Pipeline mehrere Minuten oder bis zu ein paar Stunden dauern. Der Status wird unten aufgeführt. Es kann nur eine Pipeline für eine Datenquelle geben, was bedeutet, dass durch einen Neustart der Pipeline alle vorhandenen Konzeptcluster gelöscht werden!\nSobald die Vorverarbeitung abgeschlossen ist, können Sie zum nächsten Schritt navigieren und relevante Cluster auswählen, um sie den Benutzern zum Abrufen von Dokumenten zur Verfügung zu stellen.", "confirmStart": "Durch das Starten der Vorverarbeitungspipeline werden alle vorhandenen Konzeptcluster für diese Datenquelle gelöscht. Möchten Sie fortfahren?", "confirmDelete": "Möchten Sie diese Pipeline und alle aus dieser Datenquelle abgeleiteten Konzeptcluster wirklich löschen?", - "confirmPublish": "Durch die Veröffentlichung der ausgewählten Konzept-Cluster werden alle zuvor veröffentlichten Cluster entfernt. Möchten Sie fortfahren?" + "confirmPublish": "Durch die Veröffentlichung der ausgewählten Konzept-Cluster werden alle zuvor veröffentlichten Cluster entfernt. Möchten Sie fortfahren?", + "configurationGetError": "Konnte keine entsprechende Kopnfiguration finden: Für eine Dokumentation, wie eine eigene geschrieben werden kann, bitte bei `concept-graphs-api` (https://github.com/Onto-Med/concept-graphs/blob/67a8f9b44029a5dfa7d5a5b4fa4f19263336a426/README.md) nachschauen.\nAndernfalls werden Standard-Werte verwendet.", + "configurationGetSavedWarning": "Lade die Konfiguration der letzten Bearbeitung.", + "configurationGetDefaultWarning": "Benutze Standard-Konfiguration ({lang}).", + "configurationGetCurrentPipelineWarning": "Lade Konfiguration mit der die aktuelle Pipeline gestartet wurde.", + "confirmStop": "Wollen Sie die Prozessierung wirklich stoppen? Wenn ja, können Sie die erfolgreich durchgeführten Schritte später überspringen.", + "skipPresent": "Überspringen von vorhandenden erfolgreichen Prozessierungs-Schritten?", + "tooltips": { + "noLanguage": "Sie müssen zuerste eine Sprache auswählen, um dann", + "onlyAdmins": "Nur Administratoren sind berechtigt,", + "running": "{optional}scheint im Moment zu laufen", + "stopped": "{optional}wird gerade gestoppt", + "editing": "eine Pipeline zu konfigurieren.", + "starting": "eine Pipeline zu starten.", + "cantStart": "Sie können keine neue für diese Datenquelle starten.", + "cantEdit": "Sie können derzeit die Konfiguration nicht ändern." + } }, "pipelineManagementOfDataSource": "Pipeline-Verwaltung der Datenquelle \"{dataSource}\"", + "configurationOfPipeline": "Pipeline Konfiguration", "clusterReview": "Cluster-Review|Cluster-Reviews", "preProcessing": "Vorverarbeitung", "status": "Status", @@ -550,6 +570,7 @@ "finish": "Beenden", "continue": "Fortfahren", "successful": "Erfolgreich", + "stopped": "Stoppend", "label": "Label|Labels", "publishThing": "{thing} veröffentlichen", "node": "Knoten|Knoten", diff --git a/src/i18n/en.json b/src/i18n/en.json index 505b8841..10ac16db 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -189,6 +189,8 @@ "thingSaved": "{thing} has been saved", "deleteThing": "Delete {thing}", "thingDeleted": "{thing} has been deleted", + "stopThing": "Stop {thing}", + "thingStopped": "{thing} has been stopped", "editThing": "Edit {thing}", "help": "Help", "version": "Version|Versions", @@ -391,6 +393,7 @@ "updatedAt": "Updated at {date}", "goToThing": "Go to {thing}", "downloadDataSet": "Download whole data set", + "downloadConfig": "Download configuration", "includePrimaryRepositories": "Include public repositories", "includePrimaryRepositoriesDescription": "Check this option to expand the entity search to all entities in public repositories.", "forkCouldNotBeCreated": "A fork could not be created because there may already be an up-to-date fork in this repository.", @@ -536,12 +539,29 @@ "pipelineStarted": "The generation pipeline has been started. In a few minutes, new clusters should be available.", "pipelineFailed": "The generation pipeline has failed. Please try again.", "reviewDescription": "Please select relevant clusters from the pre-processing below, and you can then choose to publish them so that they are available for document queries.", - "preProcessingDescription": "In order to generate concept clusters for a data source, the documents contained in that data source must be pre-processed using a concept graph pipeline. Depending on the number of documents, this pipeline can take several minutes and it's status is listed below. There can only be one pipeline for a data source, which means that restarting the pipeline will delete all existing concept clusters!\nOnce the pre-processing is complete, you can navigate to the next step and select relevant clusters to make available to users for document retrieval.", + "preProcessingDescription": "In order to generate concept clusters for a data source, the documents contained in that data source must be pre-processed using a concept graph pipeline. Depending on the number of documents, this pipeline can take several minutes or up to a couple of hours and it's status is listed below. There can only be one pipeline for a data source, which means that restarting the pipeline will delete all existing concept clusters!\nOnce the pre-processing is complete, you can navigate to the next step and select relevant clusters to make available to users for document retrieval.", "confirmStart": "Starting the pre-processing pipeline will delete any existing concept clusters for this data source. Do you want to continue?", "confirmDelete": "Do you really want to delete this pipeline and all the concept clusters derived from this data source?", - "confirmPublish": "Publishing the selected concept clusters will remove all previously published clusters. Do you want to continue?" + "confirmPublish": "Publishing the selected concept clusters will remove all previously published clusters. Do you want to continue?", + "configurationGetError": "Couldn't find configuration: Please refer to the `concept-graphs-api` documentation (https://github.com/Onto-Med/concept-graphs/blob/67a8f9b44029a5dfa7d5a5b4fa4f19263336a426/README.md) on how to write your own.\nElse default values will be used.", + "configurationGetSavedWarning": "Using saved configuration from last edit.", + "configurationGetDefaultWarning": "Showing default configuration file ({lang}).", + "configurationGetCurrentPipelineWarning": "Showing configuration the pipeline was run with.", + "confirmStop": "Do you really want to stop the pipeline? If so, you can skip the steps that were already successfully done later.", + "skipPresent": "Skip already successfully run steps?", + "tooltips": { + "noLanguage": "You have to choose a language first before you are allowed", + "onlyAdmins": "Only administrators are allowed", + "running": "{optional}seems to be running", + "stopped": "{optional}is in the process of being stopped", + "editing": "to edit a pipeline's configuration.", + "starting": "to start a pipeline.", + "cantStart": "You can't start a new one for this data source at the moment.", + "cantEdit": "You can't edit its configuration now." + } }, "pipelineManagementOfDataSource": "Pipeline management of data source '{dataSource}'", + "configurationOfPipeline": "Pipeline configuration", "clusterReview": "Cluster review|Cluster reviews", "preProcessing": "Pre-processing", "status": "Status", @@ -550,6 +570,7 @@ "finish": "Finish", "continue": "Continue", "successful": "Successful", + "stopped": "Stopping", "label": "Label|Labels", "publishThing": "Publish {thing}", "node": "Node|Nodes",