ose-app 0.2.5__py3-none-any.whl → 0.3.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. ose_app/__init__.py +11 -0
  2. ose_app/static/js/admin.js +1 -2
  3. ose_app/static/js/assets/release.css +1 -1
  4. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-VRzWJdDL.js +1 -0
  5. ose_app/static/js/chunks/{CollapsibleCard-DgwkQKDg.js → CollapsibleCard-kE-t6wrT.js} +1 -2
  6. ose_app/static/js/chunks/{Diagnostic.vue_vue_type_script_setup_true_lang-CBzsmnqW.js → Diagnostic.vue_vue_type_script_setup_true_lang-lJxhRaQM.js} +1 -2
  7. ose_app/static/js/chunks/_plugin-vue_export-helper-DlAUqK2U.js +0 -1
  8. ose_app/static/js/chunks/bootbox-D3SJ_Fwv.js +0 -1
  9. ose_app/static/js/chunks/constants-DiFa8GuF.js +1 -0
  10. ose_app/static/js/chunks/{filter-CiYqP1_r.js → filter-Xg_JD3wD.js} +1 -2
  11. ose_app/static/js/chunks/index-DSWncqUa.js +1 -0
  12. ose_app/static/js/chunks/{index-sLCKmIWG-umQeu_-w.js → index-sLCKmIWG-C-EM12MM.js} +2 -3
  13. ose_app/static/js/editor.js +21 -22
  14. ose_app/static/js/release.js +4 -5
  15. ose_app/static/js/settings.js +1 -2
  16. ose_app/static/js/visualise.js +2 -3
  17. ose_app/static/main.css +1 -1
  18. ose_app/static/main.scss +8 -0
  19. ose_app/templates/base.html +3 -0
  20. ose_app-0.3.1.dist-info/METADATA +15 -0
  21. ose_app-0.3.1.dist-info/RECORD +88 -0
  22. {ose_app-0.2.5.dist-info → ose_app-0.3.1.dist-info}/WHEEL +1 -1
  23. ose_app/static/excel-bootstrap-table-filter-bundle.js.map +0 -1
  24. ose_app/static/excel-bootstrap-table-filter-bundle.min.js.map +0 -1
  25. ose_app/static/js/admin.js.map +0 -1
  26. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-BDr_frBe.js +0 -2
  27. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-BDr_frBe.js.map +0 -1
  28. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-MonxH8xj.js +0 -2
  29. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-MonxH8xj.js.map +0 -1
  30. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-DKAZyKKr-DTksKjtf.js +0 -2
  31. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-DKAZyKKr-DTksKjtf.js.map +0 -1
  32. ose_app/static/js/chunks/CollapsibleCard-BQR8R54V.js +0 -2
  33. ose_app/static/js/chunks/CollapsibleCard-BQR8R54V.js.map +0 -1
  34. ose_app/static/js/chunks/CollapsibleCard-DgwkQKDg.js.map +0 -1
  35. ose_app/static/js/chunks/CollapsibleCard-DoX0kPCZ.js +0 -2
  36. ose_app/static/js/chunks/CollapsibleCard-DoX0kPCZ.js.map +0 -1
  37. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-CBzsmnqW.js.map +0 -1
  38. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-EcINi797.js +0 -43
  39. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-EcINi797.js.map +0 -1
  40. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-bumDOBqD.js +0 -43
  41. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-bumDOBqD.js.map +0 -1
  42. ose_app/static/js/chunks/_plugin-vue_export-helper-DlAUqK2U.js.map +0 -1
  43. ose_app/static/js/chunks/bootbox-D3SJ_Fwv.js.map +0 -1
  44. ose_app/static/js/chunks/constants-CzBHF1EN.js +0 -2
  45. ose_app/static/js/chunks/constants-CzBHF1EN.js.map +0 -1
  46. ose_app/static/js/chunks/constants-DL6Hx3V0.js +0 -2
  47. ose_app/static/js/chunks/constants-DL6Hx3V0.js.map +0 -1
  48. ose_app/static/js/chunks/constants-DPgwRV4l.js +0 -2
  49. ose_app/static/js/chunks/constants-DPgwRV4l.js.map +0 -1
  50. ose_app/static/js/chunks/filter-Bx-PU1OL.js +0 -18
  51. ose_app/static/js/chunks/filter-Bx-PU1OL.js.map +0 -1
  52. ose_app/static/js/chunks/filter-CdAXK93b.js +0 -18
  53. ose_app/static/js/chunks/filter-CdAXK93b.js.map +0 -1
  54. ose_app/static/js/chunks/filter-CiYqP1_r.js.map +0 -1
  55. ose_app/static/js/chunks/index-sLCKmIWG-B5BYNF2N.js +0 -2
  56. ose_app/static/js/chunks/index-sLCKmIWG-B5BYNF2N.js.map +0 -1
  57. ose_app/static/js/chunks/index-sLCKmIWG-Cb9lQq-c.js +0 -9
  58. ose_app/static/js/chunks/index-sLCKmIWG-Cb9lQq-c.js.map +0 -1
  59. ose_app/static/js/chunks/index-sLCKmIWG-umQeu_-w.js.map +0 -1
  60. ose_app/static/js/editor.js.map +0 -1
  61. ose_app/static/js/release.js.map +0 -1
  62. ose_app/static/js/settings.js.map +0 -1
  63. ose_app/static/js/visualise.js.map +0 -1
  64. ose_app/static/main.css.map +0 -7
  65. ose_app-0.2.5.dist-info/METADATA +0 -27
  66. ose_app-0.2.5.dist-info/RECORD +0 -127
  67. {ose_app-0.2.5.dist-info → ose_app-0.3.1.dist-info}/top_level.txt +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"release.js","sources":["../../../../../ose-js-core/src/release/ProgressIndicator.vue","../../../../../ose-js-app/src/release/ReleaseScriptViewer.vue","../../../../../ose-js-app/src/release/Setup.vue","../../../../../ose-js-app/src/release/ErrorLink.vue","../../../../../ose-js-app/src/release/autofix/guessParent.ts","../../../../../ose-js-app/src/release/steps/Validation.vue","../../../../../ose-js-app/src/release/steps/HumanVerification.vue","../../../../../ose-js-app/src/release/TechnicalError.vue","../../../../../ose-js-app/src/release/steps/GithubPublish.vue","../../../../../ose-js-app/src/release/steps/Generic.vue","../../../../../ose-js-app/src/release/Release.vue","../../../../../ose-js-app/src/release/main.ts"],"sourcesContent":["<script setup lang=\"ts\">\n\nimport type { Release } from \"../model\";\nimport {computed} from \"vue\";\n\nconst props = defineProps<{\n release?: Release\n details?: {\n [key: string]: any,\n __progress?: {\n position?: [number, number]\n progress: number\n current_item?: string\n message?: string\n }\n }\n}>()\n\nconst percent = computed(() => Math.round((props.details?.__progress?.progress ?? 0) * 100))\n\n</script>\n\n<template>\n <template v-if=\"release?.state == 'running'\">\n <p>\n <slot></slot>\n </p>\n\n <template v-if=\"details && '__progress' in details && details?.__progress\">\n <p class=\"text-secondary mb-3\">\n {{ details.__progress.message ?? \"Working on\" }} {{ details.__progress.current_item }}\n ({{ details.__progress?.position?.[0] }}/{{ details.__progress?.position?.[1] }})\n </p>\n <div class=\"progress\" role=\"progressbar\">\n <div class=\"progress-bar progress-bar-striped progress-bar-animated\"\n :style=\"{width: `${percent}%`}\">{{ percent }}%\n </div>\n </div>\n </template>\n <div v-else class=\"d-flex justify-content-center mt-5\">\n <div class=\"spinner-border text-primary\" role=\"status\" style=\"width: 5rem; height: 5rem\">\n <span class=\"visually-hidden\">Waiting...</span>\n </div>\n </div>\n </template>\n</template>\n\n<style scoped lang=\"scss\">\n\n</style>\n","<script lang=\"ts\" setup>\nimport {ReleaseScript} from \"@ose/js-core\";\nimport CollapsibleCard from \"../common/CollapsibleCard.vue\";\n\nconst props = defineProps<{\n releaseScript: ReleaseScript\n}>()\n\nfunction setAnnotations(name: string, annotations: string) {\n props.releaseScript.files[name].target.ontology_annotations =\n Object.fromEntries(annotations.split(\"\\n\").map(l => l.split(\": \")))\n}\n\nfunction setArgs(step: number, args: string) {\n props.releaseScript.steps[step].args = Object.fromEntries(args\n .split(\"\\n\")\n .map(l => l.split(\": \"))\n .map(([k, v]) => {\n if (v === \"true\") {\n return [k, true]\n } else if (v === \"false\") {\n return [k, false]\n } else if (!isNaN(Number(v))) {\n return [k, Number(v)]\n } else {\n return [k, v]\n }\n }))\n}\n\nfunction addDependency(name: string) {\n bootbox.prompt({\n title: `Add dependency for ${name}`,\n inputType: \"select\",\n inputOptions: Object.entries(props.releaseScript.files)\n .filter(([k, _]) => k != name)\n .map(([k, v]) => ({\n text: v.target.file,\n value: k\n })),\n callback(value: string) {\n if (value) {\n props.releaseScript.files[name].needs.push(value)\n }\n }\n })\n}\n\nfunction deleteDependency(name: string, dependency: string) {\n props.releaseScript.files[name].needs = props.releaseScript.files[name].needs.filter(x => x != dependency)\n}\n\nfunction addFile() {\n bootbox.prompt({\n title: `What is the name of the file?`,\n inputType: \"text\",\n callback(value: string) {\n if (value) {\n value = value.trim().replace(/[ ,./\\-!?=]/, \"_\")\n props.releaseScript.files[value] = {\n target: {\n file: \"\",\n iri: \"\",\n ontology_annotations: {}\n },\n sources: [],\n needs: []\n }\n }\n }\n })\n}\n\nfunction renameFile(event: MouseEvent, name: string) {\n event.preventDefault();\n\n bootbox.prompt({\n title: `What is the name of the file?`,\n inputType: \"text\",\n value: name,\n callback(value: string) {\n if (value) {\n value = value.trim().replace(/[ ,./\\-!?=]/, \"_\")\n props.releaseScript.files[value] = props.releaseScript.files[name]\n delete props.releaseScript.files[name]\n }\n }\n })\n}\n\nfunction addStep(event: MouseEvent, before: number) {\n event.preventDefault()\n\n props.releaseScript.steps.splice(before, 0, {args: {}, name: \"NEW_STEP\"})\n}\n\nfunction deleteStep(event: MouseEvent, index: number) {\n event.preventDefault()\n\n const step = props.releaseScript.steps[index]\n\n bootbox.confirm({\n title: `Delete step '${step.name}'`,\n message: `Do you want to remove the release step '${step.name}'?`,\n buttons: {\n confirm: {\n label: `Delete ${step.name}`,\n className: \"btn-danger\",\n },\n cancel: {\n label: \"Keep it\",\n className: \"btn-success\"\n }\n },\n callback(result: boolean) {\n if (result) {\n props.releaseScript.steps.splice(index, 1)\n }\n }\n })\n}\n\nfunction deleteFile(event: MouseEvent, name: string) {\n\n event.preventDefault();\n bootbox.confirm({\n title: `Delete '${name}'`,\n message: `Do you want to delete the file '${name}'? It will remove the file ${props.releaseScript.files[name].target.file} from the release.`,\n buttons: {\n confirm: {\n label: `Delete ${name}`,\n className: \"btn-danger\",\n },\n cancel: {\n label: \"Keep it\",\n className: \"btn-success\"\n }\n },\n callback(result: boolean) {\n if (result) {\n delete props.releaseScript.files[name]\n }\n }\n })\n}\n\n</script>\n\n<template>\n\n <div class=\"files\">\n <h3>Files</h3>\n <CollapsibleCard v-for=\"(file, name) in releaseScript.files\">\n <template #title>\n {{ name }} - {{ file.target.file }}\n <span class=\"badge text-bg-secondary\">{{ file.sources.length }} sources</span>\n <span v-if=\"file.needs.length > 0\" class=\"badge text-bg-secondary ms-1\">{{\n file.needs.length\n }} dependencies</span>\n </template>\n <template #buttons>\n <button class=\"btn btn-primary btn-sm btn-circle\" @click=\"renameFile($event, name)\"><i class=\"fa fa-edit\"></i>\n </button>\n <button class=\"btn btn-danger btn-sm btn-circle\" @click=\"deleteFile($event, name)\"><i class=\"fa fa-trash\"></i>\n </button>\n </template>\n <template #body>\n <div class=\"release-file-settings\">\n <h6>Target settings</h6>\n <p class=\"text-body-secondary\">Define the location of the target file in the repository and define the IRI of\n the resulting ontology.</p>\n <div class=\"form-check form-switch mb-3\">\n <input v-model=\"file.target.publish\" class=\"form-check-input\" role=\"switch\" type=\"checkbox\">\n <span class=\"form-check-label\">Publish the file to GitHub</span>\n </div>\n <div class=\"input-group input-group-sm mb-3\">\n <span class=\"input-group-text\">Path</span>\n <input v-model=\"file.target.file\" class=\"form-control\" type=\"text\">\n </div>\n\n <div class=\"input-group input-group-sm mb-3\">\n <span class=\"input-group-text\">IRI</span>\n <input v-model=\"file.target.iri\" class=\"form-control\" type=\"text\">\n </div>\n\n <div class=\"input-group input-group-sm mb-3\">\n <span class=\"input-group-text\">Annotations</span>\n <textarea :value=\"Object.entries(file.target.ontology_annotations).map(([k,v]) => `${k}: ${v}`).join('\\n')\"\n class=\"form-control\"\n @change=\"setAnnotations(name, $event.target?.value)\">\n </textarea>\n </div>\n\n\n <h6>Source settings</h6>\n <p class=\"text-body-secondary\">\n Add files that contain terms, individuals, and relations which should be\n included in the OWL ontology. Alternatively, add previously built owl files which should be merged to built\n the target ontology.\n </p>\n <template v-for=\"source in file.sources\">\n <div class=\"input-group input-group-sm mb-3\">\n <span class=\"input-group-text\">Source</span>\n <input v-model=\"source.file\" class=\"form-control\" type=\"text\">\n\n <span class=\"input-group-text\">Type</span>\n <select v-model=\"source.type\" class=\"form-select\" style=\"flex: unset; width: auto\">\n <option value=\"classes\">Classes</option>\n <option value=\"relations\">Relations</option>\n <option value=\"individuals\">Individuals</option>\n <option value=\"owl\">OWL</option>\n </select>\n <button class=\"btn btn-danger\" @click=\"file.sources = file.sources.filter(x => x != source)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </div>\n </template>\n <button class=\"mb-3 btn btn-sm btn-primary add-dependency\"\n @click=\"file.sources.push({file: '', type: 'classes'})\">\n <i class=\"fa fa-add\"></i>\n Add source\n </button>\n\n\n <h6>Dependency settings</h6>\n <p class=\"text-body-secondary\">\n Specify which other files have to be loaded when building this file.\n </p>\n\n <template v-for=\"need in file.needs\">\n\n <div class=\"input-group input-group-sm mb-3\">\n <span class=\"input-group-text\">Dependency</span>\n <input :value=\"releaseScript.files[need]?.target.file ?? need\" class=\"form-control\"\n disabled type=\"text\">\n <button class=\"btn btn-danger\" @click=\"deleteDependency(name, need)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </div>\n </template>\n <button class=\"mb-3 btn btn-sm btn-primary add-dependency\" @click=\"addDependency(name)\">\n <i class=\"fa fa-add\"></i>\n Add dependency\n </button>\n </div>\n </template>\n </CollapsibleCard>\n <div class=\"d-flex gap-2\">\n <button class=\"mb-3 btn btn-sm btn-primary add-file\" @click=\"addFile\">\n <i class=\"fa fa-add\"></i>\n Add file\n </button>\n </div>\n </div>\n\n\n <h3>Steps</h3>\n <button class=\"btn btn-outline-primary add-step mb-3\" @click=\"addStep($event, 0)\">\n <i class=\"fa fa-plus-square\"></i> Add step here\n </button>\n <template v-for=\"(step, index) in releaseScript.steps\">\n <div class=\"header\">\n <h6> {{ step.name }}</h6>\n <span></span>\n <button class=\"btn btn-danger btn-sm btn-circle\" style=\"margin-bottom: .5rem\" @click=\"deleteStep($event, index)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </div>\n <div class=\"input-group input-group-sm mb-1\">\n <span class=\"input-group-text\">Release step</span>\n <input v-model=\"step.name\" class=\"form-control\" type=\"text\">\n </div>\n\n <div class=\"input-group input-group-sm mb-3\">\n <span class=\"input-group-text\">Arguments</span>\n <textarea :value=\"Object.entries(step.args).map(([k,v]) => `${k}: ${v}`).join('\\n')\"\n class=\"form-control\"\n @change=\"setArgs(index, $event.target?.value)\">\n </textarea>\n </div>\n <button class=\"btn btn-outline-primary add-step mb-3\" @click=\"addStep($event, index + 1)\">\n <i class=\"fa fa-plus-square\"></i> Add step here\n </button>\n </template>\n\n\n <div class=\"d-flex gap-2\">\n <slot name=\"buttons\"></slot>\n </div>\n\n\n</template>\n\n<style lang=\"scss\" scoped>\n\n.release-file-settings {\n display: grid;\n grid-template-columns: 1fr auto;\n grid-gap: 0 16px;\n\n & > h6, & > p {\n grid-column: 1/3\n }\n\n & > .input-group {\n grid-column: 1;\n }\n\n & > label {\n grid-column: 1;\n }\n\n & > .btn {\n width: fit-content;\n justify-self: start;\n grid-column: 1;\n }\n}\n\n.files {\n display: flex;\n flex-direction: column;\n gap: 14px\n}\n\n.btn.add-file {\n width: fit-content;\n}\n\n.header {\n display: flex;\n gap: 14px;\n\n .title {\n font-size: large;\n }\n\n span {\n flex-grow: 1;\n }\n\n i {\n align-self: center;\n transition: transform 1s;\n }\n}\n\n.btn.add-step {\n width: 100%;\n border-style: dashed;\n}\n\n</style>\n","<script lang=\"ts\" setup>\nimport {computed, onMounted, Ref, ref, watch} from \"vue\";\nimport {Release, ReleaseScript} from \"@ose/js-core\"\nimport ReleaseScriptViewer from \"./ReleaseScriptViewer.vue\";\n\nconst showAdvanced = ref<boolean>()\nconst releaseScript: Ref<ReleaseScript | null> = ref(null);\ndeclare var URLS: { [key: string]: any }\nconst prefix_url = URLS.prefix\n\nconst saving = ref<\"idle\" | \"saving\" | \"error\" | \"success\">(\"idle\")\n\nconst props = defineProps<{ repo?: string }>()\n\nconst lastReleases = ref<Release[] | null>(null)\n\nconst loading = computed(() => lastReleases.value === null)\nconst lastSuccessfulRelease = computed(() => lastReleases.value?.find(x => x.state === \"completed\") ?? null)\nconst lastRelease = computed(() => lastReleases.value?.[0] ?? null)\n\ndefineEmits<{\n (e: 'settingsConfirmed', script: ReleaseScript): void\n}>()\n\nwatch(props, (value, oldValue) => value.repo !== oldValue.repo && update())\n\nasync function update() {\n if (props.repo) {\n releaseScript.value = null\n releaseScript.value = await (await fetch(`${prefix_url}/api/release/${props.repo}/release_script`)).json()\n\n const releases: Release[] = await (await fetch(`${prefix_url}/api/release/${props.repo}`)).json()\n releases.sort((a, b) => new Date(a.start).getTime() - new Date(b.start).getTime())\n lastReleases.value = releases\n }\n}\n\nlet _saveFileAnimationTimeout: number | null = null;\n\nasync function saveFile($event: MouseEvent) {\n $event.preventDefault()\n\n if (_saveFileAnimationTimeout !== null) {\n clearTimeout(_saveFileAnimationTimeout)\n }\n\n saving.value = \"saving\"\n\n try {\n const response = await fetch(`${prefix_url}/api/release/${props.repo}/release_script`, {\n method: \"PUT\",\n headers: {\n 'Content-Type': \"application/json\"\n },\n body: JSON.stringify(releaseScript.value)\n })\n\n if (response.ok) {\n saving.value = \"success\";\n } else {\n saving.value = \"error\"\n }\n } catch (e) {\n saving.value = \"error\"\n }\n\n _saveFileAnimationTimeout = setTimeout(() => {\n saving.value = \"idle\";\n _saveFileAnimationTimeout = null\n }, 5000)\n}\n\nonMounted(() => update())\n\n</script>\n\n<template>\n\n <div class=\"preparation\">\n\n <h3>Release setup</h3>\n <p>\n Currently, there is no release running for {{ repo }}.\n <template v-if=\"loading\">\n <span class=\"placeholder\" style=\"width: 400px\"></span>\n </template>\n <template v-else-if=\"lastSuccessfulRelease\">\n {{ lastSuccessfulRelease.started_by }} started the last successful release on\n {{ $filters.formatDate(lastSuccessfulRelease.start) }}\n </template>\n <template v-else-if=\"lastRelease\">\n {{ lastRelease.started_by }} started the last release on {{ $filters.formatDate(lastRelease.start) }}. But it\n did not complete.\n </template>\n <template v-else>\n There have been no releases in the near past.\n </template>\n </p>\n\n <div class=\"btn-group w-100\">\n\n <button :disabled=\"!releaseScript\" class=\"btn btn-success\"\n @click=\"$emit('settingsConfirmed', releaseScript)\">\n <i class=\"fa fa-play\"></i>\n Start a release\n </button>\n <button :disabled=\"!releaseScript\" class=\"btn btn-success dropdown-toggle dropdown-toggle-split flex-grow-0\"\n data-bs-toggle=\"dropdown\"\n type=\"button\">\n </button>\n\n <ul class=\"dropdown-menu\">\n <li><a class=\"dropdown-item\" href=\"#\" @click=\"showAdvanced = !showAdvanced\">\n <i :class=\"[showAdvanced ? 'fa-check-square' : 'fa-square']\" class=\"fa-regular\"></i> Show advanced\n configuration\n </a></li>\n </ul>\n </div>\n <ul class=\"list-group mt-2\">\n <li v-for=\"release in lastReleases\" class=\"list-group-item \">\n <a class=\" d-flex justify-content-between align-items-start\" style=\"text-decoration: none; color: inherit\" :href=\"`${release.id}`\">\n <div class=\"ms-2 me-auto\">\n <div class=\"fw-bold\">{{ $filters.formatDate(release.start) }}</div>\n {{ release.started_by }}\n </div>\n <span class=\"badge rounded-pill\" :class=\"{\n 'text-bg-primary': ['running', 'waiting-for-user'].indexOf(release.state) >=0,\n 'text-bg-success': release.state === 'success',\n 'text-bg-error': release.state === 'errored',\n 'text-bg-secondary': release.state === 'canceled',\n }\">{{ release.state }}</span>\n </a>\n </li>\n </ul>\n\n\n <ReleaseScriptViewer v-if=\"!!releaseScript && showAdvanced\" :release-script=\"releaseScript\"\n class=\"mt-2\">\n <template v-slot:buttons>\n <button :class=\"({\n 'btn-primary': saving === 'idle' || saving === 'saving',\n 'btn-success': saving === 'success',\n 'btn-danger': saving === 'error'\n })\"\n class=\"mb-3 btn btn-sm btn-primary\"\n @click=\"saveFile\">\n <i v-if=\"saving === 'idle'\" class=\"fa fa-save\"></i>\n <i v-if=\"saving === 'saving'\" class=\"fa fa-spin fa-spinner\"></i>\n <i v-if=\"saving === 'success'\" class=\"fa fa-check\"></i>\n <i v-if=\"saving === 'error'\" class=\"fa fa-xmark\"></i>\n Save release script\n </button>\n </template>\n </ReleaseScriptViewer>\n </div>\n</template>\n\n<style scoped>\n\n</style>\n","<script setup lang=\"ts\">\n\nimport {computed} from \"vue\";\nimport {Diagnostic, Term} from \"@ose/js-core\";\n\nconst props = defineProps<{\n short_repository_name: string,\n error?: Diagnostic,\n term: Term\n} | {\n short_repository_name: string,\n error: Diagnostic,\n term?: Term\n}>()\ndeclare var URLS: { [key: string]: any }\nconst item = computed(() => (!!props.term ? props.term : props.error)!)\nconst prefix_url = URLS.prefix\n</script>\n\n<template>\n <template v-if=\"item.hasOwnProperty('origin') && item.origin\">\n <a target=\"_blank\"\n :href=\"`${prefix_url}/edit/${short_repository_name}/${item.origin[0]}?row=${item.origin[1]}`\">\n <slot>\n <i>\n at <b>{{ item.origin[0] }}</b>\n <template v-if=\"error && 'row' in error\"> row <b>{{ error['row'] }}</b></template>\n <template v-if=\"error && 'column' in error\"> column <b>{{ error.column }}</b></template>\n <template v-if=\"!error && item.origin[1] >= 0\"> row <b>{{ item.origin[1] }}</b></template>\n </i>\n </slot>\n </a>\n </template>\n</template>\n\n<style scoped lang=\"scss\">\n\n</style>\n","import {AutoFixState, Diagnostic, Term, TermIdentifier} from \"@ose/js-core\";\nimport {confirmDialog, promptDialog} from \"../../common/bootbox\";\n\nexport interface ParentGuess {\n ontology_id: string,\n term: TermIdentifier,\n kind: \"internal\" | \"external\"\n}\n\ndeclare var URLS: { [key: string]: any }\nconst prefix_url = URLS.prefix\n\n// async function guessInternal(_: Term, repo: string, defined_parent?: TermIdentifier): Promise<ParentGuess[] | null> {\n// if (!defined_parent || !defined_parent.label) {\n// return null\n// }\n//\n// try {\n// const response = await fetch(`${prefix_url}/api/search/${repo}?` + new URLSearchParams({\n// label: defined_parent.label\n// }))\n//\n// const data: any[] = await response.json()\n// return data.flatMap((x: any) => x[\"label\"] && x[\"class_id\"] ? [{\n// term: {\n// label: x[\"label\"],\n// id: x[\"class_id\"]\n// },\n// ontology_id: repo,\n// kind: \"internal\"\n// }] : [])\n// }catch {}\n//\n// return null\n// }\n\nexport async function guessExternal(term: Term, _: string, defined_parent?: TermIdentifier): Promise<ParentGuess[] | null> {\n try {\n const response = await fetch(`${prefix_url}/api/external/guess-parent`, {\n method: \"post\",\n body: JSON.stringify({\n term: {\n id: term.id ?? undefined,\n label: term.label ?? undefined\n },\n parent: {\n id: defined_parent?.id ?? undefined,\n label: defined_parent?.label ?? undefined\n },\n }),\n headers: {\n \"Content-Type\": \"application/json\"\n }\n })\n\n const parent: ParentGuess[] = await response.json()\n if (parent) {\n return parent.map(x => ({...x, kind: \"external\"}))\n }\n } catch {\n }\n\n return null\n}\n\n\nasync function singleExternalGuess(error: Diagnostic, repo: string, guess: ParentGuess): Promise<AutoFixState> {\n const parent = guess.term\n const result = await confirmDialog({\n title: \"Found an external parent\",\n message:\n `An external parent <code>${parent.label}</code> (<code>${parent.id}</code>) of ` +\n `<code>${error.term.label}</code> (<code>${error.term.id}</code>) was found. Import the term?`,\n buttons: {\n confirm: {\n label: `Import ${parent.id}`,\n className: \"btn-success\",\n },\n cancel: {\n label: \"Cancel\",\n className: \"btn-warning\"\n }\n }\n })\n\n if (result) {\n try {\n const response = await fetch(`${prefix_url}/api/external/${repo}/import`, {\n method: \"post\",\n body: JSON.stringify({\n terms: [{id: parent.id, label: parent.label}],\n ontologyId: guess.ontology_id\n }),\n headers: {\"Content-Type\": \"application/json\"}\n })\n\n if (response.ok) {\n return \"fixed\"\n }\n } catch {\n return \"impossible\"\n }\n }\n\n return \"loaded\"\n}\n\nasync function multipleExternalGuesses(guesses: ParentGuess[], error: Diagnostic, repo: string): Promise<AutoFixState> {\n const index = await promptDialog({\n title: \"Found possible external parents\",\n message:\n `Found ${guesses.length} possible external terms for <code>${error.parent.label}</code>. ` +\n `Select the correct parent term of <code>${error.term.label}</code> (<code>${error.term.id}</code>) ` +\n `if it is in the list.`,\n inputType: \"select\",\n inputOptions: guesses.map((g, i) => ({value: i.toString(), text: `${g.term.label} (${g.term.id})`})),\n buttons: {\n confirm: {\n label: `Import the selected term`,\n className: \"btn-success\",\n },\n cancel: {\n label: \"Cancel\",\n className: \"btn-warning\"\n }\n }\n })\n\n if (index !== null) {\n const guess = guesses[+index]\n const parent = guess.term;\n try {\n const response = await fetch(`${prefix_url}/api/external/${repo}/import`, {\n method: \"post\",\n body: JSON.stringify({\n terms: [{\n id: parent.id,\n label: parent.label\n }],\n ontologyId: guess.ontology_id\n }),\n headers: {\"Content-Type\": \"application/json\"}\n })\n\n if (response.ok) {\n return \"fixed\"\n } else {\n return \"impossible\"\n }\n } catch {\n return \"impossible\"\n }\n }\n\n return \"loaded\"\n}\n\n\n// async function multipleInternalGuesses(guesses: ParentGuess[], error: Diagnostic, repo: string): Promise<AutoFixState> {\n// const index = await promptDialog({\n// title: `Found possible parent in ${repo}`,\n// message:\n// `Found ${guesses.length} possible terms for <code>${error.parent.label}</code> in ${repo}. ` +\n// `Select the correct parent term of <code>${error.term.label}</code> (<code>${error.term.id}</code>) ` +\n// `if it is in the list or search for external terms.`,\n// inputType: \"select\",\n// inputOptions: guesses.map((g, i) => ({value: i.toString(), text: `${g.term.label} (${g.term.id})`})),\n// buttons: {\n// confirm: {\n// label: `Set as parent`,\n// className: \"btn-success\",\n// },\n// cancel: {\n// label: \"Search for external term\",\n// className: \"btn-primary\"\n// }\n// }\n// })\n//\n// if (index !== null) {\n// const guess = guesses[+index]\n// const parent = guess.term;\n// try {\n// const response = await fetch(`${prefix_url}/api/edit/${repo}/${error.term.origin[0]}`, {\n// method: \"PATCH\",\n// body: JSON.stringify({\n// id: error.term.id,\n// term: {\n// id: error.term.id,\n// parent: parent.label\n// }\n// }),\n// headers: {\"Content-Type\": \"application/json\"}\n// })\n//\n// if (response.ok) {\n// return \"fixed\"\n// } else {\n// return \"impossible\"\n// }\n// } catch {\n// return \"impossible\"\n// }\n// }\n//\n// return \"loaded\"\n// }\n\nexport async function guessParent(error: Diagnostic, repo: string): Promise<AutoFixState> {\n // let guesses = await guessInternal(error.term, repo, error.parent)\n // if (guesses !== null && guesses.length > 0) {\n // const response = await multipleInternalGuesses(guesses, error, repo)\n // if (response !== \"loaded\") {\n // return response\n // }\n // }\n\n const guesses = await guessExternal(error.term, repo, error.parent)\n if (guesses !== null && guesses.length > 0) {\n if (guesses.length === 1) {\n return await singleExternalGuess(error, repo, guesses[0])\n } else {\n return await multipleExternalGuesses(guesses, error, repo);\n }\n }\n\n return \"impossible\"\n}\n","<script setup lang=\"ts\">\nimport {computed, ref} from \"vue\";\nimport {AutoFixState, Diagnostic as DiagnosticM, Release, Term, ProgressIndicator} from \"@ose/js-core\";\nimport ErrorLink from \"../ErrorLink.vue\";\nimport {guessParent} from \"../autofix/guessParent\"\nimport Diagnostic from \"../../common/Diagnostic.vue\";\n\ndeclare var URLS: { [key: string]: any }\nconst prefix_url = URLS.prefix\n\nconst props = defineProps<{\n data: {\n [K: string]: {\n errors: DiagnosticM[],\n warnings: DiagnosticM[],\n info: DiagnosticM[]\n }\n } | null,\n release: Release,\n selectedSubStep: string | null\n}>()\n\ndefineEmits<{\n (e: 'release-control', type: string, ...args: any[]): void\n}>()\n\nconst autoFixStates = ref<{ [k: string]: AutoFixState }>({})\n\nfunction autoFixState(diag: DiagnosticM): AutoFixState | null {\n const id = JSON.stringify(diag)\n return autoFixStates.value[id] ?? null\n}\n\nconst errors = computed<DiagnosticM[] | null>(() => {\n if (!props.data) {\n return null\n }\n\n return Object.values(props.data).flatMap((v) => v.errors)\n})\nconst warnings = computed<any[] | null>(() => {\n if (!props.data) {\n return null\n }\n\n return Object.values(props.data).flatMap((v) => v.warnings)\n})\n\nconst shortRepoName = computed(() => props.release.release_script.short_repository_name)\n\nasync function updateTerm(path: string, id: Term, term: Term): Promise<AutoFixState> {\n const repo = props.release.release_script.short_repository_name\n\n try {\n const response = await fetch(`${prefix_url}/api/edit/${repo}/${path}`, {\n method: \"PATCH\",\n body: JSON.stringify({\n id: id,\n term: {\n id: term.id,\n parent: term.sub_class_of[0]?.label,\n label: term.label\n }\n }),\n headers: {\"Content-Type\": \"application/json\"}\n })\n\n if (response.ok) {\n return \"fixed\"\n } else {\n return \"impossible\"\n }\n } catch {\n return \"impossible\"\n }\n}\n\nasync function autofixUpdateTerm(error: DiagnosticM, id: string, term: Term, path?: string) {\n const wid = JSON.stringify(error)\n if (wid in autoFixStates.value && autoFixStates.value[wid] !== \"loaded\") {\n return\n }\n\n autoFixStates.value[wid] = await updateTerm(path ?? error?.term?.origin?.[0] ?? term?.origin?.[0], id, term)\n}\n\nasync function autofix(error: DiagnosticM) {\n let id = JSON.stringify(error)\n if (id in autoFixStates.value && autoFixStates.value[id] !== \"loaded\") {\n return\n }\n\n const repo = props.release.release_script.short_repository_name;\n autoFixStates.value[id] = \"loading\"\n if (error.type === \"unknown-parent\") {\n autoFixStates.value[id] = await guessParent(error, repo)\n } else if (error.type === \"missing-import\") {\n try {\n const response = await fetch(`${prefix_url}/api/external/${repo}/import`, {\n method: \"post\",\n body: JSON.stringify({\n terms: [{id: error.term.id, label: error.term.label}],\n ontologyId: error.term.id.split(\":\")[0]\n }),\n headers: {\"Content-Type\": \"application/json\"}\n })\n\n if (response.ok) {\n autoFixStates.value[id] = \"fixed\"\n }\n } catch (e) {\n autoFixStates.value[id] = \"impossible\"\n console.error(e)\n }\n } else {\n autoFixStates.value[id] = \"impossible\"\n }\n\n if (autoFixStates.value[id] == \"loading\") {\n autoFixStates.value[id] = \"loaded\"\n }\n}\n\n</script>\n\n<template>\n <h3>Validation</h3>\n\n <template v-if=\"!data || Object.keys(data).length === 1 && '__progress' in data\">\n <ProgressIndicator :release=\"release\" :details=\"data || {}\">\n All excel files are now being validated. The results will be presented here soon.\n </ProgressIndicator>\n </template>\n <template v-else>\n <div class=\"alert alert-success\" v-if=\"errors?.length == 0 && warnings?.length == 0\">\n <h5>Everything ok</h5>\n Good work! All files are valid. The release process will continue.\n </div>\n <p v-else>\n <span class=\"text-danger bg-danger-subtle rounded ps-1 pe-1\">{{\n errors?.length ?? 0\n }} {{ $filters.pluralise(\"error\", errors) }}</span> and\n <span class=\"text-warning bg-warning-subtle rounded ps-1 pe-1\">{{\n warnings?.length ?? 0\n }} {{ $filters.pluralise(\"warning\", warnings) }}</span>\n were found during the validation. Please fix the errors and save the spreadsheets. Errors are problems which\n prevent\n the release from continuing. Warnings hint at possible problems, but the release might continue without solving\n them.\n When you fixed all errors, restart the release. If you just want to rerun the\n validation, restart the release as well.\n </p>\n\n <template v-for=\"source in data ? Object.keys(data) : []\">\n <template v-if=\"selectedSubStep === null || selectedSubStep === source\">\n <div v-for=\"error in data?.[source].errors\"\n :class=\"[`val-error-type-${error.type}`, `val-error-source-${source}`]\"\n class=\"alert alert-danger val val-error\"\n role=\"alert\">\n\n <template v-if=\"error.type === 'unknown-parent'\">\n <Diagnostic :diagnostic=\"error\">\n <ErrorLink :error=\"error\" :short_repository_name=\"shortRepoName\"\n :term=\"error.term ?? error.relation\"></ErrorLink>\n </Diagnostic>\n\n <button v-if=\"release.release_script.short_repository_name.toLowerCase() !== 'addicto'\"\n :class=\"{'btn-success': autoFixState(error) === 'fixed', 'btn-danger': autoFixState(error) === 'impossible'}\"\n class=\"btn btn-primary\"\n @click=\"autofix(error)\">\n <i v-if=\"autoFixState(error) === 'loading'\" class=\"fa fa-spin fa-spinner\"></i>\n <i v-if=\"autoFixState(error) === 'fixed'\" class=\"fa fa-check\"></i>\n <i v-if=\"autoFixState(error) === 'impossible'\" class=\"fa fa-close\"></i>\n Try auto fix\n </button>\n\n\n </template>\n <template v-else-if=\"error.type === 'missing-parent'\">\n <Diagnostic :diagnostic=\"error\">\n <ErrorLink :error=\"error\" :short_repository_name=\"shortRepoName\"\n :term=\"error.term ?? error.relation\"></ErrorLink>\n </Diagnostic>\n </template>\n <template v-else-if=\"error.type === 'no-parent'\">\n <Diagnostic :diagnostic=\"error\">\n <ErrorLink :error=\"error\" :short_repository_name=\"shortRepoName\"\n :term=\"error.term ?? error.relation\"></ErrorLink>\n </Diagnostic>\n </template>\n <template v-else-if=\"error.type === 'ignored-parent'\">\n <Diagnostic :diagnostic=\"error\">\n <ErrorLink :error=\"error\" :short_repository_name=\"shortRepoName\"\n :term=\"error.term ?? error.relation\"></ErrorLink>\n </Diagnostic>\n </template>\n <template v-else-if=\"error.type === 'missing-label'\">\n\n <Diagnostic :diagnostic=\"error\">\n <ErrorLink :error=\"error\" :short_repository_name=\"shortRepoName\"\n :term=\"error.term ?? error.relation\"></ErrorLink>\n </Diagnostic>\n </template>\n <template v-else-if=\"error.type === 'missing-id'\">\n\n <Diagnostic :diagnostic=\"error\">\n <ErrorLink :error=\"error\" :short_repository_name=\"shortRepoName\"\n :term=\"error.term ?? error.relation\"></ErrorLink>\n </Diagnostic>\n </template>\n <template v-else-if=\"error.type === 'unknown-disjoint'\">\n\n <Diagnostic :diagnostic=\"error\">\n <ErrorLink :error=\"error\" :short_repository_name=\"shortRepoName\"\n :term=\"error.term ?? error.relation\"></ErrorLink>\n </Diagnostic>\n </template>\n <template v-else-if=\"error.type === 'unknown-relation-value'\">\n\n <Diagnostic :diagnostic=\"error\">\n <ErrorLink :error=\"error\" :short_repository_name=\"shortRepoName\"\n :term=\"error.term ?? error.relation\"></ErrorLink>\n </Diagnostic>\n </template>\n <template v-else-if=\"error.type === 'ignored-relation-value'\">\n\n <Diagnostic :diagnostic=\"error\">\n <ErrorLink :error=\"error\" :short_repository_name=\"shortRepoName\"\n :term=\"error.term ?? error.relation\"></ErrorLink>\n </Diagnostic>\n </template>\n <template v-else-if=\"error.type === 'unknown-range'\">\n <Diagnostic :diagnostic=\"error\">\n <ErrorLink :error=\"error\" :short_repository_name=\"shortRepoName\"\n :term=\"error.relation\"></ErrorLink>\n </Diagnostic>\n </template>\n <template v-else-if=\"error.type === 'unknown-domain'\">\n <Diagnostic :diagnostic=\"error\">\n <ErrorLink :error=\"error\" :short_repository_name=\"shortRepoName\"\n :term=\"error.relation\"></ErrorLink>\n </Diagnostic>\n </template>\n <template v-else-if=\"error.type === 'unknown-relation'\">\n\n <Diagnostic :diagnostic=\"error\">\n <ErrorLink :error=\"error\" :short_repository_name=\"shortRepoName\"\n :term=\"error.relation\"></ErrorLink>\n </Diagnostic>\n </template>\n <template v-else-if=\"error.type === 'duplicate'\">\n <h5>Conflicting entries (duplicates)</h5>\n <p>\n There are multiple terms for the {{ error.duplicate_field }} <code>{{ error.duplicate_value }}</code>:\n </p>\n <ul>\n <li v-for=\"mismatch in error.mismatches\">\n <p>\n <span style=\"text-transform: capitalize\">{{ mismatch.field }}</span> is\n <code v-if=\"['definition', 'curation status'].indexOf(mismatch.field) >= 0\">\n {{\n mismatch.a.relations.find(x => x[0]?.label?.endsWith(mismatch.field))?.[1]\n }}\n </code>\n <code v-else>{{ mismatch.a[mismatch.field] }}</code>\n <br>\n <ErrorLink :short_repository_name=\"shortRepoName\" :term=\"mismatch.a\"></ErrorLink>\n <br>\n and\n <code v-if=\"['definition', 'curation status'].indexOf(mismatch.field) >= 0\">\n {{\n mismatch.b.relations.find(x => x[0]?.label?.endsWith(mismatch.field))?.[1]\n }}\n </code>\n <code v-else>{{ mismatch.b[mismatch.field] }}</code>\n <br>\n <ErrorLink :short_repository_name=\"shortRepoName\" :term=\"mismatch.b\"></ErrorLink>\n </p>\n </li>\n </ul>\n </template>\n <template v-else>\n <h5>{{ error.type.replace(\"-\", \" \") }}</h5>\n <p>\n {{ error.msg }}<br>\n\n <ErrorLink :error=\"error\" :short_repository_name=\"shortRepoName\"></ErrorLink>\n </p>\n <pre>{{ JSON.stringify(error, undefined, 2) }}</pre>\n </template>\n </div>\n\n\n <div v-for=\"warning in data?.[source].warnings\"\n class=\"alert alert-warning val val-warning val-warning-type-{{ warning.type }} val-warning-source-{{ source }}\"\n role=\"alert\">\n <template v-if=\"warning.type == 'incomplete-term'\">\n <Diagnostic :diagnostic=\"warning\">\n <ErrorLink :error=\"warning\" :short_repository_name=\"shortRepoName\"></ErrorLink>\n </Diagnostic>\n </template>\n <template v-else-if=\"warning.type === 'unknown-column'\">\n <Diagnostic :diagnostic=\"warning\" />\n </template>\n <template v-else-if=\"warning.type === 'missing-import'\">\n <Diagnostic :diagnostic=\"warning\">\n <ErrorLink :error=\"warning\" :short_repository_name=\"shortRepoName\" :term=\"warning.term\"></ErrorLink>\n </Diagnostic>\n\n <button\n :class=\"{'btn-success': autoFixState(warning) === 'fixed', 'btn-danger': autoFixState(warning) === 'impossible'}\"\n class=\"btn btn-primary\"\n @click=\"autofix(warning)\">\n <i v-if=\"autoFixState(warning) === 'loading'\" class=\"fa fa-spin fa-spinner\"></i>\n <i v-if=\"autoFixState(warning) === 'fixed'\" class=\"fa fa-check\"></i>\n <i v-if=\"autoFixState(warning) === 'impossible'\" class=\"fa fa-close\"></i>\n Import\n </button>\n </template>\n <template v-else-if=\"warning.type === 'inconsistent-import'\">\n\n <Diagnostic :diagnostic=\"warning\">\n <ErrorLink :error=\"warning\" :short_repository_name=\"shortRepoName\" :term=\"warning.term\"></ErrorLink>\n </Diagnostic>\n\n <button\n :class=\"{'btn-success': autoFixState(warning) === 'fixed', 'btn-danger': autoFixState(warning) === 'impossible'}\"\n class=\"btn btn-primary\"\n @click=\"autofixUpdateTerm(warning, warning.term.id, {\n ...warning.term.id,\n label: warning.term.label,\n id: warning.term.id\n })\">\n <i v-if=\"autoFixState(warning) === 'loading'\" class=\"fa fa-spin fa-spinner\"></i>\n <i v-if=\"autoFixState(warning) === 'fixed'\" class=\"fa fa-check\"></i>\n <i v-if=\"autoFixState(warning) === 'impossible'\" class=\"fa fa-close\"></i>\n Change\n <template v-if=\"warning.term.id !== warning.imported_term.id\">\n ID to\n <code>{{ warning.imported_term.id }}</code>\n </template>\n <template v-else>label to <code>{{ warning.imported_term.label }}</code></template>\n </button>\n </template>\n <template v-else>\n <h5>{{ warning.type.replace(\"-\", \" \") }}</h5>\n <p>\n {{ warning.msg }}<br>\n\n <ErrorLink :error=\"warning\" :short_repository_name=\"shortRepoName\"></ErrorLink>\n </p>\n <pre>{{ JSON.stringify(warning, undefined, 2) }}</pre>\n </template>\n </div>\n </template>\n </template>\n </template>\n</template>\n\n<style scoped lang=\"scss\">\n\n</style>\n","<script setup lang=\"ts\">\nimport {Release} from \"@ose/js-core\";\nimport {computed, ref} from \"vue\";\n\nconst props = defineProps<{\n data?: {\n files: {\n link: string,\n name: string\n }[]\n },\n release: Release,\n selectedSubStep: string | null\n}>()\n\ndefineEmits<{\n (e: 'release-control', type: string, ...args: any[]): void\n}>()\n\nconst checkHierarchy = ref<boolean>(props.release.state === \"completed\")\nconst checkLabels = ref<boolean>(props.release.state === \"completed\")\nconst checkHierarchicalSpreadsheets = ref<boolean>(props.release.state === \"completed\")\n\nconst hasHierarchicalSpreadsheets = computed(() => !!props.data?.files?.find(x => x.name.endsWith(\".xlsx\")))\n\nconst allChecked = computed(() => [\n checkLabels.value,\n checkHierarchy.value,\n !hasHierarchicalSpreadsheets.value || checkHierarchicalSpreadsheets.value\n].reduce((p, v) => p && v, true))\n\n</script>\n\n<template>\n <h3>Verify the built ontologies</h3>\n\n <p>\n Please download the built files and ontologies and open them in Protégé (download\n <a href=\"https://protege.stanford.edu/software.php#desktop-protege\">here</a> or use\n <a href=\"https://webprotege.stanford.edu/\">Web protege</a>).\n </p>\n <ul>\n <li v-for=\"file in data?.files\"><a :href=\"file.link\" :download=\"file.name\">{{ file.name }}</a></li>\n\n </ul>\n <p>\n Check the following things:\n </p>\n\n <ul class=\"list-unstyled\">\n <li class=\"ms-4\">\n <div class=\"form-check\">\n <input v-model=\"checkHierarchy\" :disabled=\"release.state !== 'waiting-for-user'\"\n class=\"form-check-input checklist\" type=\"checkbox\" value=\"\" id=\"chk-inferred\">\n <label class=\"form-check-label\" for=\"chk-inferred\">\n Start the reasoner. Does the inferred hierarchy look alright?\n </label>\n </div>\n </li>\n <li class=\"ms-4\">\n <div class=\"form-check\">\n <input v-model=\"checkLabels\" :disabled=\"release.state !== 'waiting-for-user'\"\n class=\"form-check-input checklist\" type=\"checkbox\" value=\"\" id=\"chk-labels\">\n <label class=\"form-check-label\" for=\"chk-labels\">\n Do the labels look alright?\n </label>\n </div>\n </li>\n <li class=\"ms-4\" v-if=\"hasHierarchicalSpreadsheets\">\n <div class=\"form-check\">\n <input v-model=\"checkHierarchicalSpreadsheets\" :disabled=\"release.state !== 'waiting-for-user'\"\n class=\"form-check-input checklist\" type=\"checkbox\" value=\"\" id=\"chk-hierarchical-spreadsheets\">\n <label class=\"form-check-label\" for=\"chk-hierarchical-spreadsheets\">\n Do the hierarchy, labels, and other fields in the hierarchical spreadsheets look alright?\n </label>\n </div>\n </li>\n </ul>\n\n <button class=\"btn btn-success w-100\" id=\"btn-publish-release\"\n :disabled=\"!allChecked || release.state !== 'waiting-for-user'\" @click=\"$emit('release-control', 'continue')\">\n Everything looks alright. Publish the release!\n </button>\n\n\n</template>\n\n<style scoped lang=\"scss\">\n\n</style>\n","<script setup lang=\"ts\">\nimport {Release} from \"@ose/js-core\";\n\nconst props = defineProps<{\n release: Release,\n details: {\n [key: string]: any,\n errors: {\n command: string,\n code: number,\n out: string,\n err: string\n\n }[]\n }\n}>()\n\n</script>\n\n<template>\n <div class=\"alert alert-danger\">\n <h4>An error occurred while building the file</h4>\n <p>\n A technical error occurred. Please contact an administrator.\n </p>\n </div>\n <div class=\"alert alert-danger\" v-for=\"error in details.errors\">\n <template v-if=\"'code' in error\">\n <h6>Command</h6>\n <pre>{{ error.command }}</pre>\n <h6>Return code</h6>\n <p>{{ error.code }}</p>\n <h6>Standard out</h6>\n <pre>{{ error.out }}</pre>\n <h6>Standard error</h6>\n <pre>{{ error.err }}</pre>\n </template>\n <template v-else>\n <pre>{{ JSON.stringify(error, undefined, 2) }}</pre>\n </template>\n </div>\n</template>\n\n<style scoped lang=\"scss\">\n\n</style>\n","<script setup lang=\"ts\">\nimport {Release, ProgressIndicator} from \"@ose/js-core\";\nimport TechnicalError from \"../TechnicalError.vue\";\n\ndefineProps<{\n data: any,\n release: Release,\n selectedSubStep: string | null\n}>()\n\ndefineEmits<{\n (e: 'release-control', type: string, ...args: any[]): void\n}>()\n\n</script>\n\n<template>\n <h3>Publishing the release</h3>\n\n <TechnicalError v-if=\"release.state == 'waiting-for-user' && data && (data.errors?.length ?? 0) > 0\"\n :release=\"release\"\n :details=\"data\"></TechnicalError>\n <template v-else-if=\"release.state === 'completed'\">\n\n <p>\n The ontologies are now published to github and the release is completed.\n </p>\n <div class=\"text-center w-100 text-success\" style=\"font-size: 100px\">\n <i class=\"fa fa-check-double\"></i>\n </div>\n </template>\n <ProgressIndicator v-else :details=\"data\" :release=\"release\">\n The ontologies are being published to github.\n </ProgressIndicator>\n</template>\n\n<style scoped lang=\"scss\">\n\n</style>\n","<script setup lang=\"ts\">\nimport {Release, ProgressIndicator} from \"@ose/js-core\";\nimport TechnicalError from \"../TechnicalError.vue\";\nimport {computed} from \"vue\";\n\nconst STEPS = {\n PREPARATION: {\n title: \"Preparation\",\n running_text: \"Excel files are downloaded to the server and prepared.\",\n finished_text: \"Excel files were downloaded to the server.\"\n },\n IMPORT_EXTERNAL: {\n title: \"Building external dependencies\",\n running_text: \"External ontologies are now downloaded and converted. This might take a few minutes.\",\n finished_text: \"External ontologies were successfully downloaded and converted.\"\n },\n BUILD: {\n title: \"Building OWL files\",\n running_text: \"OWL files are now build.\",\n finished_text: \"OWL files were successfully built.\"\n },\n MERGE: {\n title: \"Merging files\",\n running_text: \"Multiple OWL files are being combined into one.\",\n finished_text: \"Multiple OWL files were combined into one.\"\n }\n}\n\nconst props = defineProps<{\n data: any,\n release: Release\n step: {\n args: any,\n name: string\n }\n}>()\n\ndefineEmits<{\n (e: 'release-control', type: string, ...args: any[]): void\n}>()\n\nfunction titleCase(str: string): string {\n return str.replace(\"_\", \" \").replace(\n /\\w\\S*/g,\n text => text.charAt(0).toUpperCase() + text.substring(1).toLowerCase()\n );\n}\n\nconst title = computed(() => STEPS[props.step.name]?.title ?? titleCase(props.step.name ?? \"<MISSING>\"))\nconst running_text = computed(() => STEPS[props.step.name]?.running_text ?? \"\")\nconst finished_text = computed(() => STEPS[props.step.name]?.finished_text ?? \"\")\n</script>\n\n<template>\n <h3>{{ title }}</h3>\n\n <TechnicalError v-if=\"release.state == 'waiting-for-user' && data && (data.errors?.length ?? 0) > 0\"\n :release=\"release\"\n :details=\"data\"></TechnicalError>\n\n <ProgressIndicator v-else :details=\"data\" :release=\"release\">\n {{ running_text }}\n </ProgressIndicator>\n <template v-if=\"release.state === 'completed'\">\n <p>\n {{ finished_text }}\n </p>\n </template>\n</template>\n\n<style scoped lang=\"scss\">\n\n</style>\n","<script setup lang=\"ts\">\nimport {computed, defineAsyncComponent, onMounted, ref, watch, shallowRef, markRaw, type Component} from \"vue\";\nimport {Diagnostic, Release, ReleaseScript} from \"@ose/js-core\";\nimport Setup from \"./Setup.vue\";\nimport Validation from \"./steps/Validation.vue\";\nimport HumanVerification from \"./steps/HumanVerification.vue\";\nimport GithubPublish from \"./steps/GithubPublish.vue\";\nimport Generic from \"./steps/Generic.vue\";\n\ndeclare var SERVER_DATA: { [key: string]: any }\ndeclare var URLS: { [key: string]: any }\n\ninterface PluginInfo {\n id: string;\n name: string;\n version: string;\n description: string;\n components: { step_name: string; component_name: string }[];\n has_static: boolean;\n js_module: string | null;\n}\n\nconst repo = SERVER_DATA.repo\nconst prefix_url = URLS.prefix\nconst release = ref<Release | null>(null);\n\nconst loading = ref<boolean>(false)\nconst error = ref<string | null>(null)\n\nconst selected_step = ref<number | null>(null)\nconst selected_sub_step = ref<string | null>(null)\n\n// Built-in step components\nconst builtInSteps: { [k: string]: Component } = {\n \"VALIDATION\": Validation,\n \"HUMAN_VERIFICATION\": HumanVerification,\n \"GITHUB_PUBLISH\": GithubPublish,\n}\n\n// Dynamic plugin components - will be populated from API\nconst pluginSteps = shallowRef<{ [k: string]: Component }>({})\n\n// Combined steps registry\nconst _steps = computed(() => ({\n ...builtInSteps,\n ...pluginSteps.value\n}))\n\n// Load plugins from API\nasync function loadPlugins() {\n try {\n const response = await fetch(`${prefix_url}/api/plugins/`);\n if (!response.ok) return;\n \n const plugins: PluginInfo[] = await response.json();\n const newPluginSteps: { [k: string]: Component } = {};\n \n for (const plugin of plugins) {\n if (!plugin.has_static || !plugin.js_module || plugin.components.length === 0) continue;\n \n for (const comp of plugin.components) {\n // Create async component that loads from plugin's static folder\n const pluginId = plugin.id;\n const jsModule = plugin.js_module;\n const componentName = comp.component_name;\n \n newPluginSteps[comp.step_name] = markRaw(defineAsyncComponent(async () => {\n const moduleUrl = `${prefix_url}/api/plugins/${pluginId}/static/${jsModule}`;\n const module = await import(/* @vite-ignore */ moduleUrl);\n return module[componentName] || module.default;\n }));\n }\n }\n \n pluginSteps.value = newPluginSteps;\n } catch (e) {\n console.error(\"Failed to load plugins:\", e);\n }\n}\n\nconst currentStep = computed<{\n args: any,\n name: string\n} | null>(() => release.value?.release_script.steps[selected_step.value ?? release.value.step] ?? null)\nconst stepComponent = computed(() => _steps.value[currentStep.value?.name] ?? Generic)\n\nconst stepProps = computed(() => {\n const possibleProps = {\n data: details.value,\n release: release.value,\n selectedSubStep: selected_sub_step.value,\n step: currentStep.value\n }\n\n const component = stepComponent.value;\n\n if (component) {\n const required = Object.keys(component.props)\n return Object.fromEntries(Object.entries(possibleProps).filter(([k, _]) => required.indexOf(k) >= 0))\n }\n\n return null;\n})\n\nconst details = computed(() => release.value?.details[(selected_step.value ?? release.value.step).toString()])\n\ntype SubStepContent = { errors: Diagnostic[], warnings: Diagnostic[] };\n\nfunction subSteps(data?: any): null | { [k: string]: SubStepContent } {\n if (data instanceof Object) {\n const val = data as { [key: string]: Partial<SubStepContent> }\n const steps = Object.entries(val)\n .filter(([k, v]) =>\n !k.startsWith(\"_\") &&\n [\"warnings\", \"errors\", \"infos\"].indexOf(k) < 0 &&\n Array.isArray(v?.warnings) && Array.isArray(v?.errors)\n ) as unknown as [string, SubStepContent][]\n return steps.length > 0 ? Object.fromEntries(steps) : null;\n }\n\n return null\n}\n\nasync function poll(withLoading: boolean = false) {\n const id = release.value?.id ?? `${repo}/running`\n loading.value = withLoading;\n try {\n let response = await fetch(`${prefix_url}/api/release/${id}`);\n if (response.ok) {\n release.value = await response.json()\n } else {\n release.value = null\n }\n } catch (e) {\n } finally {\n loading.value = false;\n }\n}\n\nonMounted(async () => {\n // Load plugins first\n await loadPlugins();\n \n const lastPathSegment = window.location.pathname.split(\"/\").slice(-1)[0]\n const releaseId = parseInt(lastPathSegment)\n\n if (!isNaN(releaseId)) {\n release.value = await _request<Release>(() => fetch(`${prefix_url}/api/release/${releaseId}`)) ?? null\n } else {\n await poll(true)\n }\n})\n\nlet pollInterval: number | null = null\n\nfunction startPolling() {\n if (pollInterval === null) {\n pollInterval = setInterval(poll, 2000)\n }\n}\n\nconst stopWaitingForReleaseStart = watch(release, (value, oldValue) => {\n if (oldValue === null && value !== null && pollInterval === null && value.state === \"running\") {\n stopWaitingForReleaseStart()\n startPolling()\n }\n})\n\nconst icon_classes = computed(() => {\n switch (release.value?.state) {\n case undefined:\n case null:\n return [\"fa-regular\", \"fa-file\", \"text-black-50\"]\n case \"canceled\":\n return [\"fa-regular\", \"fa-circle-xmark\", \"text-danger\"]\n case \"waiting-for-user\":\n return [\"fa-solid\", \"fa-user-clock\", \"text-warning\"]\n case \"errored\":\n return [\"fa-solid\", \"fa-triangle-exclamation\", \"text-danger\"]\n case \"completed\":\n return [\"fa-regular\", \"fa-circle-check\", \"text-success\"]\n default:\n return [\"fa-spinner\", \"fa-spin\", \"text-black-50\"]\n }\n})\n\nasync function _request<T = any, S = T>(request: () => Promise<Response>): Promise<T | undefined>\n\nasync function _request<T = any, S = T>(request: () => Promise<Response>, post: ((json: T) => Promise<S>)): Promise<S | undefined>\nasync function _request<T = any, S = T>(request: () => Promise<Response>, post: ((json: T) => Promise<S>) | null = null): Promise<S | T | undefined> {\n try {\n loading.value = true;\n const response = await request()\n\n if (response.ok) {\n const value = await response.json() as T\n if (post !== null) {\n return await post(value)\n } else {\n return value\n }\n } else {\n const e = await response.json()\n error.value = e.error\n }\n\n loading.value = false;\n } catch (e) {\n if (e instanceof Error) {\n error.value = e.message\n } else {\n error.value = `An unknown error occurred: ${e}`\n }\n } finally {\n loading.value = false;\n }\n}\n\nasync function startRelease(releaseScript: ReleaseScript) {\n const r = await _request<Release>(() =>\n fetch(prefix_url + \"/api/release/start\", {\n method: \"post\",\n body: JSON.stringify(releaseScript),\n headers: {\n \"Content-Type\": \"application/json\"\n }\n }))\n\n if (r) {\n release.value = r\n window.location.pathname = `${prefix_url}/admin/release/${r.id}`\n }\n}\n\nasync function cancelRelease() {\n release.value = await _request<Release>(() => fetch(`${prefix_url}/api/release/${repo}/cancel`, {\n method: \"post\"\n })) ?? null\n}\n\nasync function restartRelease() {\n const script = release.value?.release_script\n if (script) {\n await cancelRelease()\n await startRelease(script)\n }\n}\n\nfunction errorsOfStep(step: number) {\n const details = release.value?.details[step.toString()]\n if (details?.hasOwnProperty(\"errors\") && Array.isArray(details[\"errors\"])) {\n return details[\"errors\"].length\n } else if (Array.isArray(details)) {\n return details.map(x => x[\"errors\"]?.length).reduce((p, c) => c + p, 0)\n }\n}\n\nfunction warningsOfStep(step: number) {\n const details = release.value?.details[step.toString()]\n if (details?.hasOwnProperty(\"warnings\") && Array.isArray(details[\"warnings\"])) {\n return details[\"warnings\"].length\n } else if (details) {\n return Object.values(details).map((x: any) => x[\"warnings\"]?.length).reduce((p, c) => c + p, 0)\n }\n}\n\nfunction stepIconClasses(step: number): string[] {\n if ((release.value?.step ?? 0) >= step) {\n if (errorsOfStep(step) > 0) {\n return \"fa fa-triangle-exclamation text-danger\".split(\" \")\n } else if (warningsOfStep(step) > 0) {\n return \"fa fa-triangle-exclamation text-warning\".split(\" \")\n } else if (release.value?.step === step && release.value.state !== 'completed') {\n return \"fa-regular fa-circle text-primary\".split(\" \")\n } else {\n return \"fa-regular fa-check-circle text-success\".split(\" \")\n }\n } else {\n return \"fa-regular fa-clock text-warning\".split(\" \")\n }\n}\n\nasync function doReleaseControl(type: string) {\n switch (type) {\n case \"continue\":\n await fetch(`${prefix_url}/api/release/${repo}/continue`)\n startPolling()\n break;\n default:\n console.warn(`No such release control type: '${type}'`)\n }\n}\n</script>\n\n<template>\n <div class=\"release\">\n <div class=\"d-flex gap-2 align-items-center\">\n <h1 id=\"lbl-release-title\">\n <i id=\"icon-release\" class=\"fa\" :class=\"icon_classes\"></i>\n Release {{ repo }}\n </h1>\n <span id=\"release-info\" class=\"align-self-end mb-2 text-muted\" v-if=\"release\">\n started by {{ release.started_by }} on {{ $filters.formatDate(release.start) }}\n </span>\n <span class=\"flex-fill\"></span>\n\n <template v-if=\"release && (['running', 'waiting-for-user', 'errored'].indexOf(release.state) >= 0)\">\n <button class=\"btn btn-warning\" id=\"btn-release-restart\" @click=\"restartRelease\">\n <i class=\"fa fa-rotate-left\"></i> Restart\n </button>\n <button class=\"btn btn-danger\" id=\"btn-release-cancel\" @click=\"cancelRelease\">\n <i class=\"fa fa-cancel\"></i>\n Cancel\n </button>\n </template>\n </div>\n\n <template v-if=\"!release && !loading\">\n <div class=\"alert alert-danger\" v-if=\"error !== null\">\n <h4>An error occurred</h4>\n {{ error }}\n </div>\n <Setup v-if=\"!release\" style=\"max-width: 1080px; margin: 0 auto\"\n :repo=\"repo\"\n @settingsConfirmed=\"startRelease($event)\"></Setup>\n </template>\n\n\n <template v-if=\"release !== null\">\n <div style=\"display: grid;grid-template-columns: 240px 1fr;grid-gap: 50px\" class=\"text-start w-100\"\n id=\"release-core\">\n <div class=\"sidebar border\" style=\"grid-column: 1\">\n <ul class=\"list-unstyled ps-2\">\n <li class=\"mb-1\" v-for=\"(step, i) in release.release_script.steps\">\n <div class=\"d-flex align-items-center\">\n <i :class=\"stepIconClasses(i)\"></i>\n <a class=\"btn border-0\" @click=\"selected_step = i; selected_sub_step = null\">\n <strong v-if=\"selected_step !== null ? selected_step == i : release.step == i\">\n {{ $filters.formatText(step.name) }}\n </strong>\n <template v-else>{{ $filters.formatText(step.name) }}</template>\n </a>\n </div>\n <ul class=\"list-unstyled ms-4\" v-if=\"subSteps\">\n <li v-for=\"(val, key) in subSteps(release.details[i])\" style=\"display: flex; align-items: center\">\n <i v-if=\"(val.errors?.length ?? 0) > 0\" class=\"fa fa-circle-exclamation text-danger\"></i>\n <i v-else-if=\"(val.warnings?.length ?? 0) > 0\" class=\"fa fa-triangle-exclamation text-warning\"></i>\n <i v-else class=\"fa fa-check-circle text-success\"></i>\n <a class=\"btn border-0 text-truncate\"\n @click=\"selected_sub_step = selected_sub_step === key ? null : key\">\n <strong v-if=\"selected_sub_step === key\">{{ key }}</strong>\n <template v-else>{{ key }}</template>\n </a>\n </li>\n </ul>\n </li>\n </ul>\n </div>\n <div class=\"main\" style=\"grid-column: 2\">\n <div class=\"alert alert-danger\" v-if=\"error !== null\">\n <h4>An error occurred</h4>\n {{ error }}\n </div>\n\n <div class=\"alert alert-danger\" v-if=\"details?.error\">\n <h4>An error occurred: {{ details.error.short }}</h4>\n <pre>{{ details.error.long }}</pre>\n </div>\n\n <component :is=\"stepComponent\" v-bind=\"stepProps\"\n @release-control=\"doReleaseControl\"></component>\n </div>\n </div>\n </template>\n </div>\n\n <div class=\"loading\" v-if=\"loading\">\n <div class=\"inner text-light\">\n <div class=\"spinner-border\" style=\"width: 5rem; height: 5rem;\" role=\"status\">\n </div>\n <h5>Loading...</h5>\n </div>\n </div>\n</template>\n\n\n<style scoped lang=\"scss\">\n.loading {\n z-index: 1;\n background: rgba(0, 0, 0, .4);\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n display: grid;\n\n .inner {\n margin: auto;\n justify-self: center;\n align-self: center;\n display: flex;\n flex-direction: column;\n text-align: center;\n gap: 14px;\n\n .spinner-border {\n border-width: 10px;\n }\n }\n}\n\n#release-core .sidebar .btn {\n text-align: start !important;\n}\n</style>\n","import {createApp} from \"vue\";\nimport Release from \"./Release.vue\";\nimport {$filters} from \"@ose/js-core\";\n\n\nconst app = createApp(Release)\n\n\napp.config.globalProperties.$filters = $filters\n\napp.mount(\"#vue-app-release\")\n"],"names":["props","__props","percent","computed","_createElementBlock","_Fragment","_createElementVNode","_renderSlot","_ctx","_hoisted_1","_toDisplayString","_hoisted_2","_openBlock","_hoisted_3","_cache","setAnnotations","name","annotations","l","setArgs","step","args","k","v","addDependency","_","value","deleteDependency","dependency","x","addFile","renameFile","event","addStep","before","deleteStep","index","result","deleteFile","file","_createBlock","CollapsibleCard","$event","_hoisted_6","_hoisted_7","_hoisted_9","_hoisted_11","_hoisted_13","_hoisted_14","_renderList","source","_hoisted_15","_vModelText","_vModelSelect","need","_hoisted_20","_hoisted_24","_hoisted_26","_hoisted_28","_hoisted_29","_hoisted_31","showAdvanced","ref","releaseScript","prefix_url","saving","lastReleases","loading","lastSuccessfulRelease","lastRelease","watch","oldValue","update","releases","a","b","_saveFileAnimationTimeout","saveFile","onMounted","$filters","_createTextVNode","$emit","_normalizeClass","release","_hoisted_8","_hoisted_10","ReleaseScriptViewer","_hoisted_12","item","_unref","guessExternal","term","defined_parent","parent","singleExternalGuess","error","repo","guess","confirmDialog","multipleExternalGuesses","guesses","promptDialog","g","i","guessParent","autoFixStates","autoFixState","diag","id","errors","warnings","shortRepoName","updateTerm","path","autofixUpdateTerm","wid","autofix","e","ProgressIndicator","_hoisted_4","_createVNode","Diagnostic","ErrorLink","mismatch","warning","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_21","_hoisted_22","checkHierarchy","checkLabels","checkHierarchicalSpreadsheets","hasHierarchicalSpreadsheets","allChecked","p","TechnicalError","STEPS","titleCase","str","text","title","running_text","finished_text","selected_step","selected_sub_step","builtInSteps","Validation","HumanVerification","GithubPublish","pluginSteps","shallowRef","_steps","loadPlugins","response","plugins","newPluginSteps","plugin","comp","pluginId","jsModule","componentName","markRaw","defineAsyncComponent","module","currentStep","stepComponent","Generic","stepProps","possibleProps","details","component","required","subSteps","data","steps","poll","withLoading","lastPathSegment","releaseId","_request","pollInterval","startPolling","stopWaitingForReleaseStart","icon_classes","request","post","startRelease","r","cancelRelease","restartRelease","script","errorsOfStep","c","warningsOfStep","stepIconClasses","doReleaseControl","type","_hoisted_5","Setup","val","key","_resolveDynamicComponent","_mergeProps","_hoisted_23","app","createApp","Release"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.js","sources":["../../../../../ose-js-app/src/settings/Settings.vue","../../../../../ose-js-app/src/settings/main.ts"],"sourcesContent":["<script lang=\"ts\" setup>\n\nimport CollapsibleCard from \"../common/CollapsibleCard.vue\";\nimport {computed, ref} from \"vue\";\nimport {alertDialog, promptDialog} from \"../common/bootbox\";\nimport {RepositoryConfig} from \"@ose/js-core\";\n\ndeclare var SETTINGS: {\n repositories: RepositoryConfig[],\n startup_repositories: string[],\n changing_startup_allowed: boolean,\n loading_new_allowed: boolean\n}\ndeclare var URLS: { [key: string]: any }\n\nconst prefix_url = URLS.prefix\nconst settings = ref<typeof SETTINGS>(SETTINGS)\n\nlet loading = ref<boolean>(false);\nlet deleting = ref<string | null>(null);\nlet startupChanging = ref<string | null>(null);\nlet installingWorkflow = ref<null | \"busy\" | \"error\" | \"success\">(null);\nlet blocked = computed(() => loading.value || deleting.value !== null || startupChanging.value !== null || installingWorkflow.value === \"busy\")\n\nlet buttonStates = ref<{ reload: string | null }>({\n reload: null,\n})\n\nlet runningTimeouts: { [key: string]: number } = {};\n\nasync function toggleStartup(repo: RepositoryConfig) {\n startupChanging.value = repo.full_name;\n\n const currentlySet = settings.value.startup_repositories.indexOf(repo.full_name) >= 0;\n const route = currentlySet ? 'remove' : 'add';\n\n const resp = await (await fetch(`${prefix_url}/api/settings/repositories/${route}_startup`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\"full_name\": repo.full_name})\n })).json()\n\n if (resp.success) {\n settings.value.startup_repositories = currentlySet ?\n settings.value.startup_repositories.filter(x => x !== repo.full_name) :\n [...settings.value.startup_repositories, repo.full_name];\n } else {\n\n await alertDialog({\n title: currentlySet ? \"Unsetting as startup failed\" : \"Unsetting as startup failed\",\n message: \"The current configuration probably does not allow setting startup repositories.\"\n })\n }\n\n startupChanging.value = null;\n}\n\nasync function unloadRepository(repo: RepositoryConfig) {\n deleting.value = repo.full_name;\n\n const resp = await (await fetch(`${prefix_url}/api/settings/repositories/unload`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\"full_name\": repo.full_name})\n })).json()\n\n if (resp.success) {\n settings.value.repositories = settings.value.repositories.filter(x => x !== repo)\n } else {\n await alertDialog({\n title: \"Unloading failed\",\n message: \"The repository was probably already unloaded. Try refreshing the page.\"\n })\n }\n\n deleting.value = null;\n}\n\nasync function loadRepository() {\n loading.value = true;\n let resp = await (await fetch(`${prefix_url}/api/settings/repositories/possibilities`)).json()\n\n if (resp.success) {\n const suggestions = resp.repositories;\n const index = await promptDialog({\n title: \"Found possible external parents\",\n message:\n `Chose one of your repositories to load.`,\n inputType: \"select\",\n inputOptions: suggestions.map(({short_name, full_name}, i) => ({\n value: i,\n text: `${short_name} (${full_name})`\n })),\n buttons: {\n confirm: {\n label: `Load repository`,\n className: \"btn-success\",\n },\n cancel: {\n label: \"Cancel\",\n className: \"btn-warning\"\n }\n }\n })\n\n if (index !== null) {\n const result = await (await fetch(`${prefix_url}/api/settings/repositories/load`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(suggestions[index])\n })).json()\n\n if (result.success) {\n settings.value.repositories = [...settings.value.repositories, result.repo]\n } else {\n await alertDialog({\n title: \"Loading failed\",\n message: result.error\n })\n }\n }\n } else {\n await alertDialog({\n title: \"Unloading failed\",\n message: \"The repository was probably already unloaded. Try refreshing the page.\"\n })\n }\n loading.value = false;\n}\n\n\nasync function installWorkflow(name: string, repo: RepositoryConfig) {\n installingWorkflow.value = \"busy\";\n try {\n const resp = await (await fetch(`${prefix_url}/api/repo/${repo.short_name}/install_workflow/${name}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n }\n })).json();\n\n if (!resp.success) {\n await alertDialog({\n title: \"Workflow installation failed\",\n message: resp.msg\n });\n }\n\n installingWorkflow.value = \"success\"\n } catch (error) {\n await alertDialog({\n title: \"Workflow installation failed\",\n message: \"An error occurred while installing the workflow.\"\n });\n\n installingWorkflow.value = \"error\"\n }\n}\n\nasync function reload() {\n buttonStates.value.reload = \"loading\"\n try {\n const resp = await (await fetch(`${prefix_url}/api/settings/repositories/reload`, {method: \"post\"})).json();\n if (resp.success) {\n settings.value.repositories = resp.repositories;\n buttonStates.value.reload = \"success\";\n } else {\n await alertDialog({\n title: \"Reloading settings failed\",\n message: resp.error\n });\n buttonStates.value.reload = \"error\";\n }\n } catch (error) {\n await alertDialog({\n title: \"Reloading settings failed\",\n message: \"An error occurred while reloading the settings.\"\n });\n buttonStates.value.reload = \"error\";\n }\n\n if (runningTimeouts[\"reload\"]) {\n clearTimeout(runningTimeouts[\"reload\"]);\n }\n runningTimeouts[\"reload\"] = setTimeout(() => buttonStates.value.reload = null, 2000);\n}\n</script>\n\n<template>\n\n <div class=\"settings\">\n\n <h1>Settings</h1>\n <h3>Repositories</h3>\n <CollapsibleCard v-for=\"repo in settings.repositories\">\n <template #title>\n {{ repo.short_name }} ({{ repo.full_name }})\n </template>\n <template #buttons>\n <button :disabled=\"blocked || !settings.changing_startup_allowed\" class=\"btn btn-primary btn-sm\"\n @click=\"toggleStartup(repo)\">\n <template v-if=\"settings.startup_repositories.indexOf(repo.full_name) >= 0\">\n <i class=\"fa fa-square-check\"></i> Loaded on startup\n </template>\n <template v-else>\n <i class=\"fa fa-square\"></i> Not loaded on startup\n </template>\n </button>\n\n <button v-if=\"settings.loading_new_allowed\" :disabled=\"blocked\"\n class=\"btn btn-danger btn-sm btn-circle\" @click=\"$event.stopPropagation(); unloadRepository(repo)\">\n <i :class=\"deleting === repo.full_name ? ['fa-spinner', 'fa-spin'] : ['fa-trash']\" class=\"fa\"></i>\n </button>\n </template>\n <template #body>\n <h6>Core settings</h6>\n <div class=\"input-group input-group-sm mb-3\">\n <span class=\"input-group-text\">ID Length</span>\n <input v-model=\"repo.id_digits\" class=\"form-control\" type=\"number\">\n </div>\n\n <div class=\"input-group input-group-sm mb-3\">\n <span class=\"input-group-text\">Main branch</span>\n <input v-model=\"repo.main_branch\" class=\"form-control\" type=\"text\">\n </div>\n\n <h6>Release</h6>\n\n <div class=\"input-group input-group-sm mb-3\">\n <span class=\"input-group-text\">Released OWL file</span>\n <input v-model=\"repo.release_file\" class=\"form-control\" type=\"text\">\n </div>\n\n <div class=\"input-group input-group-sm mb-3\">\n <span class=\"input-group-text\">Released script</span>\n <input v-model=\"repo.release_script_path\" class=\"form-control\" type=\"text\">\n </div>\n\n <h6>Subontologies</h6>\n <p class=\"text-body-secondary\">\n To generate hierarchical spreadsheets\n </p>\n\n <template v-for=\"subontology in repo.subontologies\">\n <div class=\"input-group input-group-sm mb-3\">\n <span class=\"input-group-text\">Excel</span>\n <input v-model=\"subontology.excel_file\" class=\"form-control\" type=\"text\">\n <span class=\"input-group-text\">Released</span>\n <input v-model=\"subontology.release_file\" class=\"form-control\" type=\"text\">\n\n <button :disabled=\"blocked\" class=\"btn btn-danger\"\n @click=\"repo.subontology = repo.subontologies.filter(x => x != subontology)\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </div>\n </template>\n\n <h6>Workflows</h6>\n <p class=\"text-body-secondary\">\n Install github workflows in this repository\n </p>\n\n\n <button :class=\"{'btn-success': installingWorkflow === 'success', 'btn-danger': installingWorkflow === 'error'}\"\n :disabled=\"blocked\" class=\"btn btn-primary btn-sm\"\n @click=\"installWorkflow('externals', repo)\">\n <i v-if=\"installingWorkflow === 'busy'\" class=\"fa fa-spin fa-spinner\"></i>\n <i v-if=\"installingWorkflow === 'success'\" class=\"fa fa-check\"></i>\n <i v-if=\"installingWorkflow === 'error'\" class=\"fa fa-close\"></i>\n <i v-else class=\"fa fa-file-import\"></i>\n Automatically build externals owl file\n </button>\n </template>\n </CollapsibleCard>\n\n <div class=\"d-flex gap-2\">\n <button v-if=\"settings.loading_new_allowed\" :disabled=\"blocked\" class=\"mb-3 btn btn-sm btn-primary add-file\"\n @click=\"loadRepository\">\n <i :class=\"loading ? ['fa-spinner', 'fa-spin'] : ['fa-add']\" class=\"fa\"></i>\n Load repository\n </button>\n <button :class=\"[{'success': 'btn-success', null: 'btn-primary', 'error': 'btn-danger'}[buttonStates.reload]]\" :disabled=\"blocked || buttonStates.reload === 'loading'\"\n class=\"mb-3 btn btn-sm btn-primary add-file\"\n @click=\"reload()\">\n <i :class=\"{'success': ['fa-check'], 'error': ['fa-cross'], 'loading': ['fa-spinner', 'fa-spin']}[buttonStates.reload] ?? ['fa-refresh']\"\n class=\"fa\"></i>\n Reload settings\n </button>\n <slot name=\"buttons\"></slot>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.settings {\n display: flex;\n flex-direction: column;\n gap: 14px\n}\n</style>\n","import {createApp} from \"vue\";\nimport Settings from \"./Settings.vue\";\nimport {$filters} from \"@ose/js-core\";\n\n\nconst app = createApp(Settings)\n// import {createBootstrap} from 'bootstrap-vue-next'\n\napp.config.globalProperties.$filters = $filters\n\n// app.use(createBootstrap())\napp.mount(\"#vue-app-settings\")\n"],"names":["prefix_url","settings","ref","loading","deleting","startupChanging","installingWorkflow","blocked","computed","buttonStates","runningTimeouts","toggleStartup","repo","currentlySet","x","alertDialog","unloadRepository","loadRepository","resp","suggestions","index","promptDialog","short_name","full_name","i","result","installWorkflow","name","reload","_openBlock","_createElementBlock","_hoisted_1","_cache","_createElementVNode","_Fragment","_renderList","_createBlock","CollapsibleCard","_unref","$event","_hoisted_4","_vModelText","_hoisted_6","_hoisted_8","_hoisted_10","subontology","_hoisted_12","_normalizeClass","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_renderSlot","_ctx","app","createApp","Settings","$filters"],"mappings":"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"}