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,6 +1,5 @@
1
- import{d as E,c as n,f as _,a as l,F as g,e,v as q,t as d,J as me,l as N,g as D,q as O,s as C,D as V,Z as B,L as J,_ as ge,h as b,w as te,r as R,o as se,x as L,u as F,b as S,C as be,y as ye,a0 as he,a1 as ve,O as ke,j as _e,$ as $e}from"./chunks/filter-CiYqP1_r.js";import{C as xe}from"./chunks/CollapsibleCard-DoX0kPCZ.js";import{_ as le}from"./chunks/_plugin-vue_export-helper-DlAUqK2U.js";import{c as we,p as Se}from"./chunks/bootbox-D3SJ_Fwv.js";import{_ as I}from"./chunks/Diagnostic.vue_vue_type_script_setup_true_lang-CBzsmnqW.js";const Ce={class:"text-secondary mb-3"},Oe={class:"progress",role:"progressbar"},Ae={key:1,class:"d-flex justify-content-center mt-5"},z=E({__name:"ProgressIndicator",props:{release:{},details:{}},setup(a){const p=a,o=N(()=>Math.round((p.details?.__progress?.progress??0)*100));return(r,c)=>a.release?.state=="running"?(l(),n(g,{key:0},[e("p",null,[q(r.$slots,"default")]),a.details&&"__progress"in a.details&&a.details?.__progress?(l(),n(g,{key:0},[e("p",Ce,d(a.details.__progress.message??"Working on")+" "+d(a.details.__progress.current_item)+" ("+d(a.details.__progress?.position?.[0])+"/"+d(a.details.__progress?.position?.[1])+") ",1),e("div",Oe,[e("div",{class:"progress-bar progress-bar-striped progress-bar-animated",style:me({width:`${o.value}%`})},d(o.value)+"% ",5)])],64)):(l(),n("div",Ae,[...c[0]||(c[0]=[e("div",{class:"spinner-border text-primary",role:"status",style:{width:"5rem",height:"5rem"}},[e("span",{class:"visually-hidden"},"Waiting...")],-1)])]))],64)):_("",!0)}}),Te={class:"files"},Ne={class:"badge text-bg-secondary"},je={key:0,class:"badge text-bg-secondary ms-1"},Ie=["onClick"],Re=["onClick"],De={class:"release-file-settings"},Pe={class:"form-check form-switch mb-3"},Ee=["onUpdate:modelValue"],Ue={class:"input-group input-group-sm mb-3"},Ve=["onUpdate:modelValue"],Le={class:"input-group input-group-sm mb-3"},We=["onUpdate:modelValue"],Fe={class:"input-group input-group-sm mb-3"},Me=["value","onChange"],Je={class:"input-group input-group-sm mb-3"},Be=["onUpdate:modelValue"],Ge=["onUpdate:modelValue"],He=["onClick"],qe=["onClick"],ze={class:"input-group input-group-sm mb-3"},Ke=["value"],Xe=["onClick"],Ze=["onClick"],Qe={class:"header"},Ye=["onClick"],et={class:"input-group input-group-sm mb-1"},tt=["onUpdate:modelValue"],st={class:"input-group input-group-sm mb-3"},lt=["value","onChange"],nt=["onClick"],at={class:"d-flex gap-2"},ot=E({__name:"ReleaseScriptViewer",props:{releaseScript:{}},setup(a){const p=a;function o(f,s){p.releaseScript.files[f].target.ontology_annotations=Object.fromEntries(s.split(`
1
+ import{d as U,c as n,f as _,a as l,F as g,e,v as Q,t as d,J as ye,l as N,g as D,q as O,s as C,D as V,O as H,L as J,P as he,h as b,w as ae,r as I,o as oe,x as L,u as F,b as w,C as ve,y as ke,E as _e,Q as $e,R as xe,S as we,i as G,j as Se,$ as Ce}from"./chunks/filter-Xg_JD3wD.js";import{u as Oe,_ as Te,B as Ae}from"./chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-VRzWJdDL.js";import{C as Ne}from"./chunks/CollapsibleCard-kE-t6wrT.js";import{_ as ie}from"./chunks/_plugin-vue_export-helper-DlAUqK2U.js";import{c as je,p as Re}from"./chunks/bootbox-D3SJ_Fwv.js";import{_ as R}from"./chunks/Diagnostic.vue_vue_type_script_setup_true_lang-lJxhRaQM.js";import"./chunks/index-sLCKmIWG-C-EM12MM.js";import{c as Ie}from"./chunks/index-DSWncqUa.js";const De={class:"text-secondary mb-3"},Pe={class:"progress",role:"progressbar"},Ee={key:1,class:"d-flex justify-content-center mt-5"},X=U({__name:"ProgressIndicator",props:{release:{},details:{}},setup(a){const p=a,o=N(()=>Math.round((p.details?.__progress?.progress??0)*100));return(r,c)=>a.release?.state=="running"?(l(),n(g,{key:0},[e("p",null,[Q(r.$slots,"default")]),a.details&&"__progress"in a.details&&a.details?.__progress?(l(),n(g,{key:0},[e("p",De,d(a.details.__progress.message??"Working on")+" "+d(a.details.__progress.current_item)+" ("+d(a.details.__progress?.position?.[0])+"/"+d(a.details.__progress?.position?.[1])+") ",1),e("div",Pe,[e("div",{class:"progress-bar progress-bar-striped progress-bar-animated",style:ye({width:`${o.value}%`})},d(o.value)+"% ",5)])],64)):(l(),n("div",Ee,[...c[0]||(c[0]=[e("div",{class:"spinner-border text-primary",role:"status",style:{width:"5rem",height:"5rem"}},[e("span",{class:"visually-hidden"},"Waiting...")],-1)])]))],64)):_("",!0)}}),Ue={class:"files"},Ve={class:"badge text-bg-secondary"},Le={key:0,class:"badge text-bg-secondary ms-1"},We=["onClick"],Fe=["onClick"],Me={class:"release-file-settings"},Be={class:"form-check form-switch mb-3"},Je=["onUpdate:modelValue"],Ge={class:"input-group input-group-sm mb-3"},He=["onUpdate:modelValue"],qe={class:"input-group input-group-sm mb-3"},ze=["onUpdate:modelValue"],Ke={class:"input-group input-group-sm mb-3"},Qe=["value","onChange"],Xe={class:"input-group input-group-sm mb-3"},Ye=["onUpdate:modelValue"],Ze=["onUpdate:modelValue"],et=["onClick"],tt=["onClick"],st={class:"input-group input-group-sm mb-3"},lt=["value"],nt=["onClick"],at=["onClick"],ot={class:"header"},it=["onClick"],rt={class:"input-group input-group-sm mb-1"},ut=["onUpdate:modelValue"],dt={class:"input-group input-group-sm mb-3"},ct=["value","onChange"],pt=["onClick"],ft={class:"d-flex gap-2"},mt=U({__name:"ReleaseScriptViewer",props:{releaseScript:{}},setup(a){const p=a;function o(f,s){p.releaseScript.files[f].target.ontology_annotations=Object.fromEntries(s.split(`
2
2
  `).map(i=>i.split(": ")))}function r(f,s){p.releaseScript.steps[f].args=Object.fromEntries(s.split(`
3
- `).map(i=>i.split(": ")).map(([i,t])=>t==="true"?[i,!0]:t==="false"?[i,!1]:isNaN(Number(t))?[i,t]:[i,Number(t)]))}function c(f){bootbox.prompt({title:`Add dependency for ${f}`,inputType:"select",inputOptions:Object.entries(p.releaseScript.files).filter(([s,i])=>s!=f).map(([s,i])=>({text:i.target.file,value:s})),callback(s){s&&p.releaseScript.files[f].needs.push(s)}})}function y(f,s){p.releaseScript.files[f].needs=p.releaseScript.files[f].needs.filter(i=>i!=s)}function w(){bootbox.prompt({title:"What is the name of the file?",inputType:"text",callback(f){f&&(f=f.trim().replace(/[ ,./\-!?=]/,"_"),p.releaseScript.files[f]={target:{file:"",iri:"",ontology_annotations:{}},sources:[],needs:[]})}})}function v(f,s){f.preventDefault(),bootbox.prompt({title:"What is the name of the file?",inputType:"text",value:s,callback(i){i&&(i=i.trim().replace(/[ ,./\-!?=]/,"_"),p.releaseScript.files[i]=p.releaseScript.files[s],delete p.releaseScript.files[s])}})}function k(f,s){f.preventDefault(),p.releaseScript.steps.splice(s,0,{args:{},name:"NEW_STEP"})}function A(f,s){f.preventDefault();const i=p.releaseScript.steps[s];bootbox.confirm({title:`Delete step '${i.name}'`,message:`Do you want to remove the release step '${i.name}'?`,buttons:{confirm:{label:`Delete ${i.name}`,className:"btn-danger"},cancel:{label:"Keep it",className:"btn-success"}},callback(t){t&&p.releaseScript.steps.splice(s,1)}})}function U(f,s){f.preventDefault(),bootbox.confirm({title:`Delete '${s}'`,message:`Do you want to delete the file '${s}'? It will remove the file ${p.releaseScript.files[s].target.file} from the release.`,buttons:{confirm:{label:`Delete ${s}`,className:"btn-danger"},cancel:{label:"Keep it",className:"btn-success"}},callback(i){i&&delete p.releaseScript.files[s]}})}return(f,s)=>(l(),n(g,null,[e("div",Te,[s[22]||(s[22]=e("h3",null,"Files",-1)),(l(!0),n(g,null,D(a.releaseScript.files,(i,t)=>(l(),O(xe,null,{title:C(()=>[b(d(t)+" - "+d(i.target.file)+" ",1),e("span",Ne,d(i.sources.length)+" sources",1),i.needs.length>0?(l(),n("span",je,d(i.needs.length)+" dependencies",1)):_("",!0)]),buttons:C(()=>[e("button",{class:"btn btn-primary btn-sm btn-circle",onClick:u=>v(u,t)},[...s[1]||(s[1]=[e("i",{class:"fa fa-edit"},null,-1)])],8,Ie),e("button",{class:"btn btn-danger btn-sm btn-circle",onClick:u=>U(u,t)},[...s[2]||(s[2]=[e("i",{class:"fa fa-trash"},null,-1)])],8,Re)]),body:C(()=>[e("div",De,[s[15]||(s[15]=e("h6",null,"Target settings",-1)),s[16]||(s[16]=e("p",{class:"text-body-secondary"},"Define the location of the target file in the repository and define the IRI of the resulting ontology.",-1)),e("div",Pe,[V(e("input",{"onUpdate:modelValue":u=>i.target.publish=u,class:"form-check-input",role:"switch",type:"checkbox"},null,8,Ee),[[B,i.target.publish]]),s[3]||(s[3]=e("span",{class:"form-check-label"},"Publish the file to GitHub",-1))]),e("div",Ue,[s[4]||(s[4]=e("span",{class:"input-group-text"},"Path",-1)),V(e("input",{"onUpdate:modelValue":u=>i.target.file=u,class:"form-control",type:"text"},null,8,Ve),[[J,i.target.file]])]),e("div",Le,[s[5]||(s[5]=e("span",{class:"input-group-text"},"IRI",-1)),V(e("input",{"onUpdate:modelValue":u=>i.target.iri=u,class:"form-control",type:"text"},null,8,We),[[J,i.target.iri]])]),e("div",Fe,[s[6]||(s[6]=e("span",{class:"input-group-text"},"Annotations",-1)),e("textarea",{value:Object.entries(i.target.ontology_annotations).map(([u,j])=>`${u}: ${j}`).join(`
4
- `),class:"form-control",onChange:u=>o(t,u.target?.value)}," ",40,Me)]),s[17]||(s[17]=e("h6",null,"Source settings",-1)),s[18]||(s[18]=e("p",{class:"text-body-secondary"}," Add files that contain terms, individuals, and relations which should be included in the OWL ontology. Alternatively, add previously built owl files which should be merged to built the target ontology. ",-1)),(l(!0),n(g,null,D(i.sources,u=>(l(),n("div",Je,[s[9]||(s[9]=e("span",{class:"input-group-text"},"Source",-1)),V(e("input",{"onUpdate:modelValue":j=>u.file=j,class:"form-control",type:"text"},null,8,Be),[[J,u.file]]),s[10]||(s[10]=e("span",{class:"input-group-text"},"Type",-1)),V(e("select",{"onUpdate:modelValue":j=>u.type=j,class:"form-select",style:{flex:"unset",width:"auto"}},[...s[7]||(s[7]=[e("option",{value:"classes"},"Classes",-1),e("option",{value:"relations"},"Relations",-1),e("option",{value:"individuals"},"Individuals",-1),e("option",{value:"owl"},"OWL",-1)])],8,Ge),[[ge,u.type]]),e("button",{class:"btn btn-danger",onClick:j=>i.sources=i.sources.filter(M=>M!=u)},[...s[8]||(s[8]=[e("i",{class:"fa fa-trash"},null,-1)])],8,He)]))),256)),e("button",{class:"mb-3 btn btn-sm btn-primary add-dependency",onClick:u=>i.sources.push({file:"",type:"classes"})},[...s[11]||(s[11]=[e("i",{class:"fa fa-add"},null,-1),b(" Add source ",-1)])],8,qe),s[19]||(s[19]=e("h6",null,"Dependency settings",-1)),s[20]||(s[20]=e("p",{class:"text-body-secondary"}," Specify which other files have to be loaded when building this file. ",-1)),(l(!0),n(g,null,D(i.needs,u=>(l(),n("div",ze,[s[13]||(s[13]=e("span",{class:"input-group-text"},"Dependency",-1)),e("input",{value:a.releaseScript.files[u]?.target.file??u,class:"form-control",disabled:"",type:"text"},null,8,Ke),e("button",{class:"btn btn-danger",onClick:j=>y(t,u)},[...s[12]||(s[12]=[e("i",{class:"fa fa-trash"},null,-1)])],8,Xe)]))),256)),e("button",{class:"mb-3 btn btn-sm btn-primary add-dependency",onClick:u=>c(t)},[...s[14]||(s[14]=[e("i",{class:"fa fa-add"},null,-1),b(" Add dependency ",-1)])],8,Ze)])]),_:2},1024))),256)),e("div",{class:"d-flex gap-2"},[e("button",{class:"mb-3 btn btn-sm btn-primary add-file",onClick:w},[...s[21]||(s[21]=[e("i",{class:"fa fa-add"},null,-1),b(" Add file ",-1)])])])]),s[29]||(s[29]=e("h3",null,"Steps",-1)),e("button",{class:"btn btn-outline-primary add-step mb-3",onClick:s[0]||(s[0]=i=>k(i,0))},[...s[23]||(s[23]=[e("i",{class:"fa fa-plus-square"},null,-1),b(" Add step here ",-1)])]),(l(!0),n(g,null,D(a.releaseScript.steps,(i,t)=>(l(),n(g,null,[e("div",Qe,[e("h6",null,d(i.name),1),s[25]||(s[25]=e("span",null,null,-1)),e("button",{class:"btn btn-danger btn-sm btn-circle",style:{"margin-bottom":".5rem"},onClick:u=>A(u,t)},[...s[24]||(s[24]=[e("i",{class:"fa fa-trash"},null,-1)])],8,Ye)]),e("div",et,[s[26]||(s[26]=e("span",{class:"input-group-text"},"Release step",-1)),V(e("input",{"onUpdate:modelValue":u=>i.name=u,class:"form-control",type:"text"},null,8,tt),[[J,i.name]])]),e("div",st,[s[27]||(s[27]=e("span",{class:"input-group-text"},"Arguments",-1)),e("textarea",{value:Object.entries(i.args).map(([u,j])=>`${u}: ${j}`).join(`
5
- `),class:"form-control",onChange:u=>r(t,u.target?.value)}," ",40,lt)]),e("button",{class:"btn btn-outline-primary add-step mb-3",onClick:u=>k(u,t+1)},[...s[28]||(s[28]=[e("i",{class:"fa fa-plus-square"},null,-1),b(" Add step here ",-1)])],8,nt)],64))),256)),e("div",at,[q(f.$slots,"buttons",{},void 0,!0)])],64))}}),it=le(ot,[["__scopeId","data-v-7cac764c"]]),rt={class:"preparation"},ut={key:0,class:"placeholder",style:{width:"400px"}},dt={class:"btn-group w-100"},ct=["disabled"],pt=["disabled"],ft={class:"dropdown-menu"},mt={class:"list-group mt-2"},gt={class:"list-group-item"},bt=["href"],yt={class:"ms-2 me-auto"},ht={class:"fw-bold"},vt={key:0,class:"fa fa-save"},kt={key:1,class:"fa fa-spin fa-spinner"},_t={key:2,class:"fa fa-check"},$t={key:3,class:"fa fa-xmark"},xt=E({__name:"Setup",props:{repo:{}},emits:["settingsConfirmed"],setup(a){const p=R(),o=R(null),r=URLS.prefix,c=R("idle"),y=a,w=R(null),v=N(()=>w.value===null),k=N(()=>w.value?.find(i=>i.state==="completed")??null),A=N(()=>w.value?.[0]??null);te(y,(i,t)=>i.repo!==t.repo&&U());async function U(){if(y.repo){o.value=null,o.value=await(await fetch(`${r}/api/release/${y.repo}/release_script`)).json();const i=await(await fetch(`${r}/api/release/${y.repo}`)).json();i.sort((t,u)=>new Date(t.start).getTime()-new Date(u.start).getTime()),w.value=i}}let f=null;async function s(i){i.preventDefault(),f!==null&&clearTimeout(f),c.value="saving";try{(await fetch(`${r}/api/release/${y.repo}/release_script`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)})).ok?c.value="success":c.value="error"}catch{c.value="error"}f=setTimeout(()=>{c.value="idle",f=null},5e3)}return se(()=>U()),(i,t)=>(l(),n("div",rt,[t[5]||(t[5]=e("h3",null,"Release setup",-1)),e("p",null,[b(" Currently, there is no release running for "+d(a.repo)+". ",1),v.value?(l(),n("span",ut)):k.value?(l(),n(g,{key:1},[b(d(k.value.started_by)+" started the last successful release on "+d(i.$filters.formatDate(k.value.start)),1)],64)):A.value?(l(),n(g,{key:2},[b(d(A.value.started_by)+" started the last release on "+d(i.$filters.formatDate(A.value.start))+". But it did not complete. ",1)],64)):(l(),n(g,{key:3},[b(" There have been no releases in the near past. ")],64))]),e("div",dt,[e("button",{disabled:!o.value,class:"btn btn-success",onClick:t[0]||(t[0]=u=>i.$emit("settingsConfirmed",o.value))},[...t[2]||(t[2]=[e("i",{class:"fa fa-play"},null,-1),b(" Start a release ",-1)])],8,ct),e("button",{disabled:!o.value,class:"btn btn-success dropdown-toggle dropdown-toggle-split flex-grow-0","data-bs-toggle":"dropdown",type:"button"},null,8,pt),e("ul",ft,[e("li",null,[e("a",{class:"dropdown-item",href:"#",onClick:t[1]||(t[1]=u=>p.value=!p.value)},[e("i",{class:L([[p.value?"fa-check-square":"fa-square"],"fa-regular"])},null,2),t[3]||(t[3]=b(" Show advanced configuration ",-1))])])])]),e("ul",mt,[(l(!0),n(g,null,D(w.value,u=>(l(),n("li",gt,[e("a",{class:"d-flex justify-content-between align-items-start",style:{"text-decoration":"none",color:"inherit"},href:`${u.id}`},[e("div",yt,[e("div",ht,d(i.$filters.formatDate(u.start)),1),b(" "+d(u.started_by),1)]),e("span",{class:L(["badge rounded-pill",{"text-bg-primary":["running","waiting-for-user"].indexOf(u.state)>=0,"text-bg-success":u.state==="success","text-bg-error":u.state==="errored","text-bg-secondary":u.state==="canceled"}])},d(u.state),3)],8,bt)]))),256))]),o.value&&p.value?(l(),O(it,{key:0,"release-script":o.value,class:"mt-2"},{buttons:C(()=>[e("button",{class:L([{"btn-primary":c.value==="idle"||c.value==="saving","btn-success":c.value==="success","btn-danger":c.value==="error"},"mb-3 btn btn-sm btn-primary"]),onClick:s},[c.value==="idle"?(l(),n("i",vt)):_("",!0),c.value==="saving"?(l(),n("i",kt)):_("",!0),c.value==="success"?(l(),n("i",_t)):_("",!0),c.value==="error"?(l(),n("i",$t)):_("",!0),t[4]||(t[4]=b(" Save release script ",-1))],2)]),_:1},8,["release-script"])):_("",!0)]))}}),wt=["href"],T=E({__name:"ErrorLink",props:{short_repository_name:{},error:{},term:{}},setup(a){const p=a,o=N(()=>p.term?p.term:p.error),r=URLS.prefix;return(c,y)=>o.value.hasOwnProperty("origin")&&o.value.origin?(l(),n("a",{key:0,target:"_blank",href:`${F(r)}/edit/${a.short_repository_name}/${o.value.origin[0]}?row=${o.value.origin[1]}`},[q(c.$slots,"default",{},()=>[e("i",null,[y[3]||(y[3]=b(" at ",-1)),e("b",null,d(o.value.origin[0]),1),a.error&&"row"in a.error?(l(),n(g,{key:0},[y[0]||(y[0]=b(" row ",-1)),e("b",null,d(a.error.row),1)],64)):_("",!0),a.error&&"column"in a.error?(l(),n(g,{key:1},[y[1]||(y[1]=b(" column ",-1)),e("b",null,d(a.error.column),1)],64)):_("",!0),!a.error&&o.value.origin[1]>=0?(l(),n(g,{key:2},[y[2]||(y[2]=b(" row ",-1)),e("b",null,d(o.value.origin[1]),1)],64)):_("",!0)])])],8,wt)):_("",!0)}}),K=URLS.prefix;async function St(a,p,o){try{const c=await(await fetch(`${K}/api/external/guess-parent`,{method:"post",body:JSON.stringify({term:{id:a.id??void 0,label:a.label??void 0},parent:{id:o?.id??void 0,label:o?.label??void 0}}),headers:{"Content-Type":"application/json"}})).json();if(c)return c.map(y=>({...y,kind:"external"}))}catch{}return null}async function Ct(a,p,o){const r=o.term;if(await we({title:"Found an external parent",message:`An external parent <code>${r.label}</code> (<code>${r.id}</code>) of <code>${a.term.label}</code> (<code>${a.term.id}</code>) was found. Import the term?`,buttons:{confirm:{label:`Import ${r.id}`,className:"btn-success"},cancel:{label:"Cancel",className:"btn-warning"}}}))try{if((await fetch(`${K}/api/external/${p}/import`,{method:"post",body:JSON.stringify({terms:[{id:r.id,label:r.label}],ontologyId:o.ontology_id}),headers:{"Content-Type":"application/json"}})).ok)return"fixed"}catch{return"impossible"}return"loaded"}async function Ot(a,p,o){const r=await Se({title:"Found possible external parents",message:`Found ${a.length} possible external terms for <code>${p.parent.label}</code>. Select the correct parent term of <code>${p.term.label}</code> (<code>${p.term.id}</code>) if it is in the list.`,inputType:"select",inputOptions:a.map((c,y)=>({value:y.toString(),text:`${c.term.label} (${c.term.id})`})),buttons:{confirm:{label:"Import the selected term",className:"btn-success"},cancel:{label:"Cancel",className:"btn-warning"}}});if(r!==null){const c=a[+r],y=c.term;try{return(await fetch(`${K}/api/external/${o}/import`,{method:"post",body:JSON.stringify({terms:[{id:y.id,label:y.label}],ontologyId:c.ontology_id}),headers:{"Content-Type":"application/json"}})).ok?"fixed":"impossible"}catch{return"impossible"}}return"loaded"}async function At(a,p){const o=await St(a.term,p,a.parent);return o!==null&&o.length>0?o.length===1?await Ct(a,p,o[0]):await Ot(o,a,p):"impossible"}const Tt={key:0,class:"alert alert-success"},Nt={key:1},jt={class:"text-danger bg-danger-subtle rounded ps-1 pe-1"},It={class:"text-warning bg-warning-subtle rounded ps-1 pe-1"},Rt=["onClick"],Dt={key:0,class:"fa fa-spin fa-spinner"},Pt={key:1,class:"fa fa-check"},Et={key:2,class:"fa fa-close"},Ut={style:{"text-transform":"capitalize"}},Vt={key:0},Lt={key:1},Wt={key:2},Ft={key:3},Mt={class:"alert alert-warning val val-warning val-warning-type-{{ warning.type }} val-warning-source-{{ source }}",role:"alert"},Jt=["onClick"],Bt={key:0,class:"fa fa-spin fa-spinner"},Gt={key:1,class:"fa fa-check"},Ht={key:2,class:"fa fa-close"},qt=["onClick"],zt={key:0,class:"fa fa-spin fa-spinner"},Kt={key:1,class:"fa fa-check"},Xt={key:2,class:"fa fa-close"},Zt=E({__name:"Validation",props:{data:{},release:{},selectedSubStep:{}},emits:["release-control"],setup(a){const p=URLS.prefix,o=a,r=R({});function c(f){const s=JSON.stringify(f);return r.value[s]??null}const y=N(()=>o.data?Object.values(o.data).flatMap(f=>f.errors):null),w=N(()=>o.data?Object.values(o.data).flatMap(f=>f.warnings):null),v=N(()=>o.release.release_script.short_repository_name);async function k(f,s,i){const t=o.release.release_script.short_repository_name;try{return(await fetch(`${p}/api/edit/${t}/${f}`,{method:"PATCH",body:JSON.stringify({id:s,term:{id:i.id,parent:i.sub_class_of[0]?.label,label:i.label}}),headers:{"Content-Type":"application/json"}})).ok?"fixed":"impossible"}catch{return"impossible"}}async function A(f,s,i,t){const u=JSON.stringify(f);u in r.value&&r.value[u]!=="loaded"||(r.value[u]=await k(f?.term?.origin?.[0]??i?.origin?.[0],s,i))}async function U(f){let s=JSON.stringify(f);if(s in r.value&&r.value[s]!=="loaded")return;const i=o.release.release_script.short_repository_name;if(r.value[s]="loading",f.type==="unknown-parent")r.value[s]=await At(f,i);else if(f.type==="missing-import")try{(await fetch(`${p}/api/external/${i}/import`,{method:"post",body:JSON.stringify({terms:[{id:f.term.id,label:f.term.label}],ontologyId:f.term.id.split(":")[0]}),headers:{"Content-Type":"application/json"}})).ok&&(r.value[s]="fixed")}catch(t){r.value[s]="impossible",console.error(t)}else r.value[s]="impossible";r.value[s]=="loading"&&(r.value[s]="loaded")}return(f,s)=>(l(),n(g,null,[s[18]||(s[18]=e("h3",null,"Validation",-1)),!a.data||Object.keys(a.data).length===1&&"__progress"in a.data?(l(),O(F(z),{key:0,release:a.release,details:a.data||{}},{default:C(()=>[...s[0]||(s[0]=[b(" All excel files are now being validated. The results will be presented here soon. ",-1)])]),_:1},8,["release","details"])):(l(),n(g,{key:1},[y.value?.length==0&&w.value?.length==0?(l(),n("div",Tt,[...s[1]||(s[1]=[e("h5",null,"Everything ok",-1),b(" Good work! All files are valid. The release process will continue. ",-1)])])):(l(),n("p",Nt,[e("span",jt,d(y.value?.length??0)+" "+d(f.$filters.pluralise("error",y.value)),1),s[2]||(s[2]=b(" and ",-1)),e("span",It,d(w.value?.length??0)+" "+d(f.$filters.pluralise("warning",w.value)),1),s[3]||(s[3]=b(" were found during the validation. Please fix the errors and save the spreadsheets. Errors are problems which prevent the release from continuing. Warnings hint at possible problems, but the release might continue without solving them. When you fixed all errors, restart the release. If you just want to rerun the validation, restart the release as well. ",-1))])),(l(!0),n(g,null,D(a.data?Object.keys(a.data):[],i=>(l(),n(g,null,[a.selectedSubStep===null||a.selectedSubStep===i?(l(),n(g,{key:0},[(l(!0),n(g,null,D(a.data?.[i].errors,t=>(l(),n("div",{class:L([[`val-error-type-${t.type}`,`val-error-source-${i}`],"alert alert-danger val val-error"]),role:"alert"},[t.type==="unknown-parent"?(l(),n(g,{key:0},[S(I,{diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"]),a.release.release_script.short_repository_name.toLowerCase()!=="addicto"?(l(),n("button",{key:0,class:L([{"btn-success":c(t)==="fixed","btn-danger":c(t)==="impossible"},"btn btn-primary"]),onClick:u=>U(t)},[c(t)==="loading"?(l(),n("i",Dt)):_("",!0),c(t)==="fixed"?(l(),n("i",Pt)):_("",!0),c(t)==="impossible"?(l(),n("i",Et)):_("",!0),s[4]||(s[4]=b(" Try auto fix ",-1))],10,Rt)):_("",!0)],64)):t.type==="missing-parent"?(l(),O(I,{key:1,diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="no-parent"?(l(),O(I,{key:2,diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="ignored-parent"?(l(),O(I,{key:3,diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="missing-label"?(l(),O(I,{key:4,diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="missing-id"?(l(),O(I,{key:5,diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="unknown-disjoint"?(l(),O(I,{key:6,diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="unknown-relation-value"?(l(),O(I,{key:7,diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="ignored-relation-value"?(l(),O(I,{key:8,diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="unknown-range"?(l(),O(I,{key:9,diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="unknown-domain"?(l(),O(I,{key:10,diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="unknown-relation"?(l(),O(I,{key:11,diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="duplicate"?(l(),n(g,{key:12},[s[11]||(s[11]=e("h5",null,"Conflicting entries (duplicates)",-1)),e("p",null,[b(" There are multiple terms for the "+d(t.duplicate_field)+" ",1),e("code",null,d(t.duplicate_value),1),s[5]||(s[5]=b(": ",-1))]),e("ul",null,[(l(!0),n(g,null,D(t.mismatches,u=>(l(),n("li",null,[e("p",null,[e("span",Ut,d(u.field),1),s[6]||(s[6]=b(" is ",-1)),["definition","curation status"].indexOf(u.field)>=0?(l(),n("code",Vt,d(u.a.relations.find(j=>j[0]?.label?.endsWith(u.field))?.[1]),1)):(l(),n("code",Lt,d(u.a[u.field]),1)),s[7]||(s[7]=e("br",null,null,-1)),S(T,{short_repository_name:v.value,term:u.a},null,8,["short_repository_name","term"]),s[8]||(s[8]=e("br",null,null,-1)),s[9]||(s[9]=b(" and ",-1)),["definition","curation status"].indexOf(u.field)>=0?(l(),n("code",Wt,d(u.b.relations.find(j=>j[0]?.label?.endsWith(u.field))?.[1]),1)):(l(),n("code",Ft,d(u.b[u.field]),1)),s[10]||(s[10]=e("br",null,null,-1)),S(T,{short_repository_name:v.value,term:u.b},null,8,["short_repository_name","term"])])]))),256))])],64)):(l(),n(g,{key:13},[e("h5",null,d(t.type.replace("-"," ")),1),e("p",null,[b(d(t.msg),1),s[12]||(s[12]=e("br",null,null,-1)),S(T,{error:t,short_repository_name:v.value},null,8,["error","short_repository_name"])]),e("pre",null,d(JSON.stringify(t,void 0,2)),1)],64))],2))),256)),(l(!0),n(g,null,D(a.data?.[i].warnings,t=>(l(),n("div",Mt,[t.type=="incomplete-term"?(l(),O(I,{key:0,diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value},null,8,["error","short_repository_name"])]),_:2},1032,["diagnostic"])):t.type==="unknown-column"?(l(),O(I,{key:1,diagnostic:t},null,8,["diagnostic"])):t.type==="missing-import"?(l(),n(g,{key:2},[S(I,{diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.term},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"]),e("button",{class:L([{"btn-success":c(t)==="fixed","btn-danger":c(t)==="impossible"},"btn btn-primary"]),onClick:u=>U(t)},[c(t)==="loading"?(l(),n("i",Bt)):_("",!0),c(t)==="fixed"?(l(),n("i",Gt)):_("",!0),c(t)==="impossible"?(l(),n("i",Ht)):_("",!0),s[13]||(s[13]=b(" Import ",-1))],10,Jt)],64)):t.type==="inconsistent-import"?(l(),n(g,{key:3},[S(I,{diagnostic:t},{default:C(()=>[S(T,{error:t,short_repository_name:v.value,term:t.term},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"]),e("button",{class:L([{"btn-success":c(t)==="fixed","btn-danger":c(t)==="impossible"},"btn btn-primary"]),onClick:u=>A(t,t.term.id,{...t.term.id,label:t.term.label,id:t.term.id})},[c(t)==="loading"?(l(),n("i",zt)):_("",!0),c(t)==="fixed"?(l(),n("i",Kt)):_("",!0),c(t)==="impossible"?(l(),n("i",Xt)):_("",!0),s[16]||(s[16]=b(" Change ",-1)),t.term.id!==t.imported_term.id?(l(),n(g,{key:3},[s[14]||(s[14]=b(" ID to ",-1)),e("code",null,d(t.imported_term.id),1)],64)):(l(),n(g,{key:4},[s[15]||(s[15]=b("label to ",-1)),e("code",null,d(t.imported_term.label),1)],64))],10,qt)],64)):(l(),n(g,{key:4},[e("h5",null,d(t.type.replace("-"," ")),1),e("p",null,[b(d(t.msg),1),s[17]||(s[17]=e("br",null,null,-1)),S(T,{error:t,short_repository_name:v.value},null,8,["error","short_repository_name"])]),e("pre",null,d(JSON.stringify(t,void 0,2)),1)],64))]))),256))],64)):_("",!0)],64))),256))],64))],64))}}),Qt=["href","download"],Yt={class:"list-unstyled"},es={class:"ms-4"},ts={class:"form-check"},ss=["disabled"],ls={class:"ms-4"},ns={class:"form-check"},as=["disabled"],os={key:0,class:"ms-4"},is={class:"form-check"},rs=["disabled"],us=["disabled"],ds=E({__name:"HumanVerification",props:{data:{},release:{},selectedSubStep:{}},emits:["release-control"],setup(a){const p=a,o=R(p.release.state==="completed"),r=R(p.release.state==="completed"),c=R(p.release.state==="completed"),y=N(()=>!!p.data?.files?.find(v=>v.name.endsWith(".xlsx"))),w=N(()=>[r.value,o.value,!y.value||c.value].reduce((v,k)=>v&&k,!0));return(v,k)=>(l(),n(g,null,[k[7]||(k[7]=e("h3",null,"Verify the built ontologies",-1)),k[8]||(k[8]=e("p",null,[b(" Please download the built files and ontologies and open them in Protégé (download "),e("a",{href:"https://protege.stanford.edu/software.php#desktop-protege"},"here"),b(" or use "),e("a",{href:"https://webprotege.stanford.edu/"},"Web protege"),b("). ")],-1)),e("ul",null,[(l(!0),n(g,null,D(a.data?.files,A=>(l(),n("li",null,[e("a",{href:A.link,download:A.name},d(A.name),9,Qt)]))),256))]),k[9]||(k[9]=e("p",null," Check the following things: ",-1)),e("ul",Yt,[e("li",es,[e("div",ts,[V(e("input",{"onUpdate:modelValue":k[0]||(k[0]=A=>o.value=A),disabled:a.release.state!=="waiting-for-user",class:"form-check-input checklist",type:"checkbox",value:"",id:"chk-inferred"},null,8,ss),[[B,o.value]]),k[4]||(k[4]=e("label",{class:"form-check-label",for:"chk-inferred"}," Start the reasoner. Does the inferred hierarchy look alright? ",-1))])]),e("li",ls,[e("div",ns,[V(e("input",{"onUpdate:modelValue":k[1]||(k[1]=A=>r.value=A),disabled:a.release.state!=="waiting-for-user",class:"form-check-input checklist",type:"checkbox",value:"",id:"chk-labels"},null,8,as),[[B,r.value]]),k[5]||(k[5]=e("label",{class:"form-check-label",for:"chk-labels"}," Do the labels look alright? ",-1))])]),y.value?(l(),n("li",os,[e("div",is,[V(e("input",{"onUpdate:modelValue":k[2]||(k[2]=A=>c.value=A),disabled:a.release.state!=="waiting-for-user",class:"form-check-input checklist",type:"checkbox",value:"",id:"chk-hierarchical-spreadsheets"},null,8,rs),[[B,c.value]]),k[6]||(k[6]=e("label",{class:"form-check-label",for:"chk-hierarchical-spreadsheets"}," Do the hierarchy, labels, and other fields in the hierarchical spreadsheets look alright? ",-1))])])):_("",!0)]),e("button",{class:"btn btn-success w-100",id:"btn-publish-release",disabled:!w.value||a.release.state!=="waiting-for-user",onClick:k[3]||(k[3]=A=>v.$emit("release-control","continue"))}," Everything looks alright. Publish the release! ",8,us)],64))}}),cs={class:"alert alert-danger"},ps={key:1},ne=E({__name:"TechnicalError",props:{release:{},details:{}},setup(a){return(p,o)=>(l(),n(g,null,[o[4]||(o[4]=e("div",{class:"alert alert-danger"},[e("h4",null,"An error occurred while building the file"),e("p",null," A technical error occurred. Please contact an administrator. ")],-1)),(l(!0),n(g,null,D(a.details.errors,r=>(l(),n("div",cs,["code"in r?(l(),n(g,{key:0},[o[0]||(o[0]=e("h6",null,"Command",-1)),e("pre",null,d(r.command),1),o[1]||(o[1]=e("h6",null,"Return code",-1)),e("p",null,d(r.code),1),o[2]||(o[2]=e("h6",null,"Standard out",-1)),e("pre",null,d(r.out),1),o[3]||(o[3]=e("h6",null,"Standard error",-1)),e("pre",null,d(r.err),1)],64)):(l(),n("pre",ps,d(JSON.stringify(r,void 0,2)),1))]))),256))],64))}}),fs=E({__name:"GithubPublish",props:{data:{},release:{},selectedSubStep:{}},emits:["release-control"],setup(a){return(p,o)=>(l(),n(g,null,[o[3]||(o[3]=e("h3",null,"Publishing the release",-1)),a.release.state=="waiting-for-user"&&a.data&&(a.data.errors?.length??0)>0?(l(),O(ne,{key:0,release:a.release,details:a.data},null,8,["release","details"])):a.release.state==="completed"?(l(),n(g,{key:1},[o[0]||(o[0]=e("p",null," The ontologies are now published to github and the release is completed. ",-1)),o[1]||(o[1]=e("div",{class:"text-center w-100 text-success",style:{"font-size":"100px"}},[e("i",{class:"fa fa-check-double"})],-1))],64)):(l(),O(F(z),{key:2,details:a.data,release:a.release},{default:C(()=>[...o[2]||(o[2]=[b(" The ontologies are being published to github. ",-1)])]),_:1},8,["details","release"]))],64))}}),ms={key:2},gs=E({__name:"Generic",props:{data:{},release:{},step:{}},emits:["release-control"],setup(a){const p={PREPARATION:{title:"Preparation",running_text:"Excel files are downloaded to the server and prepared.",finished_text:"Excel files were downloaded to the server."},IMPORT_EXTERNAL:{title:"Building external dependencies",running_text:"External ontologies are now downloaded and converted. This might take a few minutes.",finished_text:"External ontologies were successfully downloaded and converted."},BUILD:{title:"Building OWL files",running_text:"OWL files are now build.",finished_text:"OWL files were successfully built."},MERGE:{title:"Merging files",running_text:"Multiple OWL files are being combined into one.",finished_text:"Multiple OWL files were combined into one."}},o=a;function r(v){return v.replace("_"," ").replace(/\w\S*/g,k=>k.charAt(0).toUpperCase()+k.substring(1).toLowerCase())}const c=N(()=>p[o.step.name]?.title??r(o.step.name??"<MISSING>")),y=N(()=>p[o.step.name]?.running_text??""),w=N(()=>p[o.step.name]?.finished_text??"");return(v,k)=>(l(),n(g,null,[e("h3",null,d(c.value),1),a.release.state=="waiting-for-user"&&a.data&&(a.data.errors?.length??0)>0?(l(),O(ne,{key:0,release:a.release,details:a.data},null,8,["release","details"])):(l(),O(F(z),{key:1,details:a.data,release:a.release},{default:C(()=>[b(d(y.value),1)]),_:1},8,["details","release"])),a.release.state==="completed"?(l(),n("p",ms,d(w.value),1)):_("",!0)],64))}}),bs={class:"release"},ys={class:"d-flex gap-2 align-items-center"},hs={id:"lbl-release-title"},vs={key:0,id:"release-info",class:"align-self-end mb-2 text-muted"},ks={key:0,class:"alert alert-danger"},_s={key:1,style:{display:"grid","grid-template-columns":"240px 1fr","grid-gap":"50px"},class:"text-start w-100",id:"release-core"},$s={class:"sidebar border",style:{"grid-column":"1"}},xs={class:"list-unstyled ps-2"},ws={class:"mb-1"},Ss={class:"d-flex align-items-center"},Cs=["onClick"],Os={key:0},As={key:0,class:"list-unstyled ms-4"},Ts={style:{display:"flex","align-items":"center"}},Ns={key:0,class:"fa fa-circle-exclamation text-danger"},js={key:1,class:"fa fa-triangle-exclamation text-warning"},Is={key:2,class:"fa fa-check-circle text-success"},Rs=["onClick"],Ds={key:0},Ps={class:"main",style:{"grid-column":"2"}},Es={key:0,class:"alert alert-danger"},Us={key:1,class:"alert alert-danger"},Vs={key:0,class:"loading"},Ls=E({__name:"Release",setup(a){const p=SERVER_DATA.repo,o=URLS.prefix,r=R(null),c=R(!1),y=R(null),w=R(null),v=R(null),k={VALIDATION:Zt,HUMAN_VERIFICATION:ds,GITHUB_PUBLISH:fs},A=ke({}),U=N(()=>({...k,...A.value}));async function f(){try{const h=await fetch(`${o}/api/plugins/`);if(!h.ok)return;const m=await h.json(),$={};for(const x of m)if(!(!x.has_static||!x.js_module||x.components.length===0))for(const P of x.components){const W=x.id,Y=x.js_module,fe=P.component_name;$[P.step_name]=he(ve(async()=>{const ee=await import(`${o}/api/plugins/${W}/static/${Y}`);return ee[fe]||ee.default}))}A.value=$}catch(h){console.error("Failed to load plugins:",h)}}const s=N(()=>r.value?.release_script.steps[w.value??r.value.step]??null),i=N(()=>U.value[s.value?.name]??gs),t=N(()=>{const h={data:u.value,release:r.value,selectedSubStep:v.value,step:s.value},m=i.value;if(m){const $=Object.keys(m.props);return Object.fromEntries(Object.entries(h).filter(([x,P])=>$.indexOf(x)>=0))}return null}),u=N(()=>r.value?.details[(w.value??r.value.step).toString()]);function j(h){if(h instanceof Object){const $=Object.entries(h).filter(([x,P])=>!x.startsWith("_")&&["warnings","errors","infos"].indexOf(x)<0&&Array.isArray(P?.warnings)&&Array.isArray(P?.errors));return $.length>0?Object.fromEntries($):null}return null}async function M(h=!1){const m=r.value?.id??`${p}/running`;c.value=h;try{let $=await fetch(`${o}/api/release/${m}`);$.ok?r.value=await $.json():r.value=null}catch{}finally{c.value=!1}}se(async()=>{await f();const h=window.location.pathname.split("/").slice(-1)[0],m=parseInt(h);isNaN(m)?await M(!0):r.value=await H(()=>fetch(`${o}/api/release/${m}`))??null});let G=null;function X(){G===null&&(G=setInterval(M,2e3))}const oe=te(r,(h,m)=>{m===null&&h!==null&&G===null&&h.state==="running"&&(oe(),X())}),ie=N(()=>{switch(r.value?.state){case void 0:case null:return["fa-regular","fa-file","text-black-50"];case"canceled":return["fa-regular","fa-circle-xmark","text-danger"];case"waiting-for-user":return["fa-solid","fa-user-clock","text-warning"];case"errored":return["fa-solid","fa-triangle-exclamation","text-danger"];case"completed":return["fa-regular","fa-circle-check","text-success"];default:return["fa-spinner","fa-spin","text-black-50"]}});async function H(h,m=null){try{c.value=!0;const $=await h();if($.ok){const x=await $.json();return m!==null?await m(x):x}else{const x=await $.json();y.value=x.error}c.value=!1}catch($){$ instanceof Error?y.value=$.message:y.value=`An unknown error occurred: ${$}`}finally{c.value=!1}}async function Z(h){const m=await H(()=>fetch(o+"/api/release/start",{method:"post",body:JSON.stringify(h),headers:{"Content-Type":"application/json"}}));m&&(r.value=m,window.location.pathname=`${o}/admin/release/${m.id}`)}async function Q(){r.value=await H(()=>fetch(`${o}/api/release/${p}/cancel`,{method:"post"}))??null}async function re(){const h=r.value?.release_script;h&&(await Q(),await Z(h))}function ue(h){const m=r.value?.details[h.toString()];if(m?.hasOwnProperty("errors")&&Array.isArray(m.errors))return m.errors.length;if(Array.isArray(m))return m.map($=>$.errors?.length).reduce(($,x)=>x+$,0)}function de(h){const m=r.value?.details[h.toString()];if(m?.hasOwnProperty("warnings")&&Array.isArray(m.warnings))return m.warnings.length;if(m)return Object.values(m).map($=>$.warnings?.length).reduce(($,x)=>x+$,0)}function ce(h){return(r.value?.step??0)>=h?ue(h)>0?"fa fa-triangle-exclamation text-danger".split(" "):de(h)>0?"fa fa-triangle-exclamation text-warning".split(" "):r.value?.step===h&&r.value.state!=="completed"?"fa-regular fa-circle text-primary".split(" "):"fa-regular fa-check-circle text-success".split(" "):"fa-regular fa-clock text-warning".split(" ")}async function pe(h){h==="continue"?(await fetch(`${o}/api/release/${p}/continue`),X()):console.warn(`No such release control type: '${h}'`)}return(h,m)=>(l(),n(g,null,[e("div",bs,[e("div",ys,[e("h1",hs,[e("i",{id:"icon-release",class:L(["fa",ie.value])},null,2),b(" Release "+d(F(p)),1)]),r.value?(l(),n("span",vs," started by "+d(r.value.started_by)+" on "+d(h.$filters.formatDate(r.value.start)),1)):_("",!0),m[3]||(m[3]=e("span",{class:"flex-fill"},null,-1)),r.value&&["running","waiting-for-user","errored"].indexOf(r.value.state)>=0?(l(),n(g,{key:1},[e("button",{class:"btn btn-warning",id:"btn-release-restart",onClick:re},[...m[1]||(m[1]=[e("i",{class:"fa fa-rotate-left"},null,-1),b(" Restart ",-1)])]),e("button",{class:"btn btn-danger",id:"btn-release-cancel",onClick:Q},[...m[2]||(m[2]=[e("i",{class:"fa fa-cancel"},null,-1),b(" Cancel ",-1)])])],64)):_("",!0)]),!r.value&&!c.value?(l(),n(g,{key:0},[y.value!==null?(l(),n("div",ks,[m[4]||(m[4]=e("h4",null,"An error occurred",-1)),b(" "+d(y.value),1)])):_("",!0),r.value?_("",!0):(l(),O(xt,{key:1,style:{"max-width":"1080px",margin:"0 auto"},repo:F(p),onSettingsConfirmed:m[0]||(m[0]=$=>Z($))},null,8,["repo"]))],64)):_("",!0),r.value!==null?(l(),n("div",_s,[e("div",$s,[e("ul",xs,[(l(!0),n(g,null,D(r.value.release_script.steps,($,x)=>(l(),n("li",ws,[e("div",Ss,[e("i",{class:L(ce(x))},null,2),e("a",{class:"btn border-0",onClick:P=>{w.value=x,v.value=null}},[(w.value!==null?w.value==x:r.value.step==x)?(l(),n("strong",Os,d(h.$filters.formatText($.name)),1)):(l(),n(g,{key:1},[b(d(h.$filters.formatText($.name)),1)],64))],8,Cs)]),j?(l(),n("ul",As,[(l(!0),n(g,null,D(j(r.value.details[x]),(P,W)=>(l(),n("li",Ts,[(P.errors?.length??0)>0?(l(),n("i",Ns)):(P.warnings?.length??0)>0?(l(),n("i",js)):(l(),n("i",Is)),e("a",{class:"btn border-0 text-truncate",onClick:Y=>v.value=v.value===W?null:W},[v.value===W?(l(),n("strong",Ds,d(W),1)):(l(),n(g,{key:1},[b(d(W),1)],64))],8,Rs)]))),256))])):_("",!0)]))),256))])]),e("div",Ps,[y.value!==null?(l(),n("div",Es,[m[5]||(m[5]=e("h4",null,"An error occurred",-1)),b(" "+d(y.value),1)])):_("",!0),u.value?.error?(l(),n("div",Us,[e("h4",null,"An error occurred: "+d(u.value.error.short),1),e("pre",null,d(u.value.error.long),1)])):_("",!0),(l(),O(ye(i.value),be(t.value,{onReleaseControl:pe}),null,16))])])):_("",!0)]),c.value?(l(),n("div",Vs,[...m[6]||(m[6]=[e("div",{class:"inner text-light"},[e("div",{class:"spinner-border",style:{width:"5rem",height:"5rem"},role:"status"}),e("h5",null,"Loading...")],-1)])])):_("",!0)],64))}}),Ws=le(Ls,[["__scopeId","data-v-41cdb91b"]]),ae=_e(Ws);ae.config.globalProperties.$filters=$e;ae.mount("#vue-app-release");
6
- //# sourceMappingURL=release.js.map
3
+ `).map(i=>i.split(": ")).map(([i,t])=>t==="true"?[i,!0]:t==="false"?[i,!1]:isNaN(Number(t))?[i,t]:[i,Number(t)]))}function c(f){bootbox.prompt({title:`Add dependency for ${f}`,inputType:"select",inputOptions:Object.entries(p.releaseScript.files).filter(([s,i])=>s!=f).map(([s,i])=>({text:i.target.file,value:s})),callback(s){s&&p.releaseScript.files[f].needs.push(s)}})}function y(f,s){p.releaseScript.files[f].needs=p.releaseScript.files[f].needs.filter(i=>i!=s)}function S(){bootbox.prompt({title:"What is the name of the file?",inputType:"text",callback(f){f&&(f=f.trim().replace(/[ ,./\-!?=]/,"_"),p.releaseScript.files[f]={target:{file:"",iri:"",ontology_annotations:{}},sources:[],needs:[]})}})}function v(f,s){f.preventDefault(),bootbox.prompt({title:"What is the name of the file?",inputType:"text",value:s,callback(i){i&&(i=i.trim().replace(/[ ,./\-!?=]/,"_"),p.releaseScript.files[i]=p.releaseScript.files[s],delete p.releaseScript.files[s])}})}function k(f,s){f.preventDefault(),p.releaseScript.steps.splice(s,0,{args:{},name:"NEW_STEP"})}function T(f,s){f.preventDefault();const i=p.releaseScript.steps[s];bootbox.confirm({title:`Delete step '${i.name}'`,message:`Do you want to remove the release step '${i.name}'?`,buttons:{confirm:{label:`Delete ${i.name}`,className:"btn-danger"},cancel:{label:"Keep it",className:"btn-success"}},callback(t){t&&p.releaseScript.steps.splice(s,1)}})}function E(f,s){f.preventDefault(),bootbox.confirm({title:`Delete '${s}'`,message:`Do you want to delete the file '${s}'? It will remove the file ${p.releaseScript.files[s].target.file} from the release.`,buttons:{confirm:{label:`Delete ${s}`,className:"btn-danger"},cancel:{label:"Keep it",className:"btn-success"}},callback(i){i&&delete p.releaseScript.files[s]}})}return(f,s)=>(l(),n(g,null,[e("div",Ue,[s[22]||(s[22]=e("h3",null,"Files",-1)),(l(!0),n(g,null,D(a.releaseScript.files,(i,t)=>(l(),O(Ne,null,{title:C(()=>[b(d(t)+" - "+d(i.target.file)+" ",1),e("span",Ve,d(i.sources.length)+" sources",1),i.needs.length>0?(l(),n("span",Le,d(i.needs.length)+" dependencies",1)):_("",!0)]),buttons:C(()=>[e("button",{class:"btn btn-primary btn-sm btn-circle",onClick:u=>v(u,t)},[...s[1]||(s[1]=[e("i",{class:"fa fa-edit"},null,-1)])],8,We),e("button",{class:"btn btn-danger btn-sm btn-circle",onClick:u=>E(u,t)},[...s[2]||(s[2]=[e("i",{class:"fa fa-trash"},null,-1)])],8,Fe)]),body:C(()=>[e("div",Me,[s[15]||(s[15]=e("h6",null,"Target settings",-1)),s[16]||(s[16]=e("p",{class:"text-body-secondary"},"Define the location of the target file in the repository and define the IRI of the resulting ontology.",-1)),e("div",Be,[V(e("input",{"onUpdate:modelValue":u=>i.target.publish=u,class:"form-check-input",role:"switch",type:"checkbox"},null,8,Je),[[H,i.target.publish]]),s[3]||(s[3]=e("span",{class:"form-check-label"},"Publish the file to GitHub",-1))]),e("div",Ge,[s[4]||(s[4]=e("span",{class:"input-group-text"},"Path",-1)),V(e("input",{"onUpdate:modelValue":u=>i.target.file=u,class:"form-control",type:"text"},null,8,He),[[J,i.target.file]])]),e("div",qe,[s[5]||(s[5]=e("span",{class:"input-group-text"},"IRI",-1)),V(e("input",{"onUpdate:modelValue":u=>i.target.iri=u,class:"form-control",type:"text"},null,8,ze),[[J,i.target.iri]])]),e("div",Ke,[s[6]||(s[6]=e("span",{class:"input-group-text"},"Annotations",-1)),e("textarea",{value:Object.entries(i.target.ontology_annotations).map(([u,j])=>`${u}: ${j}`).join(`
4
+ `),class:"form-control",onChange:u=>o(t,u.target?.value)}," ",40,Qe)]),s[17]||(s[17]=e("h6",null,"Source settings",-1)),s[18]||(s[18]=e("p",{class:"text-body-secondary"}," Add files that contain terms, individuals, and relations which should be included in the OWL ontology. Alternatively, add previously built owl files which should be merged to built the target ontology. ",-1)),(l(!0),n(g,null,D(i.sources,u=>(l(),n("div",Xe,[s[9]||(s[9]=e("span",{class:"input-group-text"},"Source",-1)),V(e("input",{"onUpdate:modelValue":j=>u.file=j,class:"form-control",type:"text"},null,8,Ye),[[J,u.file]]),s[10]||(s[10]=e("span",{class:"input-group-text"},"Type",-1)),V(e("select",{"onUpdate:modelValue":j=>u.type=j,class:"form-select",style:{flex:"unset",width:"auto"}},[...s[7]||(s[7]=[e("option",{value:"classes"},"Classes",-1),e("option",{value:"relations"},"Relations",-1),e("option",{value:"individuals"},"Individuals",-1),e("option",{value:"owl"},"OWL",-1)])],8,Ze),[[he,u.type]]),e("button",{class:"btn btn-danger",onClick:j=>i.sources=i.sources.filter(B=>B!=u)},[...s[8]||(s[8]=[e("i",{class:"fa fa-trash"},null,-1)])],8,et)]))),256)),e("button",{class:"mb-3 btn btn-sm btn-primary add-dependency",onClick:u=>i.sources.push({file:"",type:"classes"})},[...s[11]||(s[11]=[e("i",{class:"fa fa-add"},null,-1),b(" Add source ",-1)])],8,tt),s[19]||(s[19]=e("h6",null,"Dependency settings",-1)),s[20]||(s[20]=e("p",{class:"text-body-secondary"}," Specify which other files have to be loaded when building this file. ",-1)),(l(!0),n(g,null,D(i.needs,u=>(l(),n("div",st,[s[13]||(s[13]=e("span",{class:"input-group-text"},"Dependency",-1)),e("input",{value:a.releaseScript.files[u]?.target.file??u,class:"form-control",disabled:"",type:"text"},null,8,lt),e("button",{class:"btn btn-danger",onClick:j=>y(t,u)},[...s[12]||(s[12]=[e("i",{class:"fa fa-trash"},null,-1)])],8,nt)]))),256)),e("button",{class:"mb-3 btn btn-sm btn-primary add-dependency",onClick:u=>c(t)},[...s[14]||(s[14]=[e("i",{class:"fa fa-add"},null,-1),b(" Add dependency ",-1)])],8,at)])]),_:2},1024))),256)),e("div",{class:"d-flex gap-2"},[e("button",{class:"mb-3 btn btn-sm btn-primary add-file",onClick:S},[...s[21]||(s[21]=[e("i",{class:"fa fa-add"},null,-1),b(" Add file ",-1)])])])]),s[29]||(s[29]=e("h3",null,"Steps",-1)),e("button",{class:"btn btn-outline-primary add-step mb-3",onClick:s[0]||(s[0]=i=>k(i,0))},[...s[23]||(s[23]=[e("i",{class:"fa fa-plus-square"},null,-1),b(" Add step here ",-1)])]),(l(!0),n(g,null,D(a.releaseScript.steps,(i,t)=>(l(),n(g,null,[e("div",ot,[e("h6",null,d(i.name),1),s[25]||(s[25]=e("span",null,null,-1)),e("button",{class:"btn btn-danger btn-sm btn-circle",style:{"margin-bottom":".5rem"},onClick:u=>T(u,t)},[...s[24]||(s[24]=[e("i",{class:"fa fa-trash"},null,-1)])],8,it)]),e("div",rt,[s[26]||(s[26]=e("span",{class:"input-group-text"},"Release step",-1)),V(e("input",{"onUpdate:modelValue":u=>i.name=u,class:"form-control",type:"text"},null,8,ut),[[J,i.name]])]),e("div",dt,[s[27]||(s[27]=e("span",{class:"input-group-text"},"Arguments",-1)),e("textarea",{value:Object.entries(i.args).map(([u,j])=>`${u}: ${j}`).join(`
5
+ `),class:"form-control",onChange:u=>r(t,u.target?.value)}," ",40,ct)]),e("button",{class:"btn btn-outline-primary add-step mb-3",onClick:u=>k(u,t+1)},[...s[28]||(s[28]=[e("i",{class:"fa fa-plus-square"},null,-1),b(" Add step here ",-1)])],8,pt)],64))),256)),e("div",ft,[Q(f.$slots,"buttons",{},void 0,!0)])],64))}}),gt=ie(mt,[["__scopeId","data-v-7cac764c"]]),bt={class:"preparation"},yt={key:0,class:"placeholder",style:{width:"400px"}},ht={class:"btn-group w-100"},vt=["disabled"],kt=["disabled"],_t={class:"dropdown-menu"},$t={class:"list-group mt-2"},xt={class:"list-group-item"},wt=["href"],St={class:"ms-2 me-auto"},Ct={class:"fw-bold"},Ot={key:0,class:"fa fa-save"},Tt={key:1,class:"fa fa-spin fa-spinner"},At={key:2,class:"fa fa-check"},Nt={key:3,class:"fa fa-xmark"},jt=U({__name:"Setup",props:{repo:{}},emits:["settingsConfirmed"],setup(a){const p=I(),o=I(null),r=URLS.prefix,c=I("idle"),y=a,S=I(null),v=N(()=>S.value===null),k=N(()=>S.value?.find(i=>i.state==="completed")??null),T=N(()=>S.value?.[0]??null);ae(y,(i,t)=>i.repo!==t.repo&&E());async function E(){if(y.repo){o.value=null,o.value=await(await fetch(`${r}/api/release/${y.repo}/release_script`)).json();const i=await(await fetch(`${r}/api/release/${y.repo}`)).json();i.sort((t,u)=>new Date(t.start).getTime()-new Date(u.start).getTime()),S.value=i}}let f=null;async function s(i){i.preventDefault(),f!==null&&clearTimeout(f),c.value="saving";try{(await fetch(`${r}/api/release/${y.repo}/release_script`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o.value)})).ok?c.value="success":c.value="error"}catch{c.value="error"}f=setTimeout(()=>{c.value="idle",f=null},5e3)}return oe(()=>E()),(i,t)=>(l(),n("div",bt,[t[5]||(t[5]=e("h3",null,"Release setup",-1)),e("p",null,[b(" Currently, there is no release running for "+d(a.repo)+". ",1),v.value?(l(),n("span",yt)):k.value?(l(),n(g,{key:1},[b(d(k.value.started_by)+" started the last successful release on "+d(i.$filters.formatDate(k.value.start)),1)],64)):T.value?(l(),n(g,{key:2},[b(d(T.value.started_by)+" started the last release on "+d(i.$filters.formatDate(T.value.start))+". But it did not complete. ",1)],64)):(l(),n(g,{key:3},[b(" There have been no releases in the near past. ")],64))]),e("div",ht,[e("button",{disabled:!o.value,class:"btn btn-success",onClick:t[0]||(t[0]=u=>i.$emit("settingsConfirmed",o.value))},[...t[2]||(t[2]=[e("i",{class:"fa fa-play"},null,-1),b(" Start a release ",-1)])],8,vt),e("button",{disabled:!o.value,class:"btn btn-success dropdown-toggle dropdown-toggle-split flex-grow-0","data-bs-toggle":"dropdown",type:"button"},null,8,kt),e("ul",_t,[e("li",null,[e("a",{class:"dropdown-item",href:"#",onClick:t[1]||(t[1]=u=>p.value=!p.value)},[e("i",{class:L([[p.value?"fa-check-square":"fa-square"],"fa-regular"])},null,2),t[3]||(t[3]=b(" Show advanced configuration ",-1))])])])]),e("ul",$t,[(l(!0),n(g,null,D(S.value,u=>(l(),n("li",xt,[e("a",{class:"d-flex justify-content-between align-items-start",style:{"text-decoration":"none",color:"inherit"},href:`${u.id}`},[e("div",St,[e("div",Ct,d(i.$filters.formatDate(u.start)),1),b(" "+d(u.started_by),1)]),e("span",{class:L(["badge rounded-pill",{"text-bg-primary":["running","waiting-for-user"].indexOf(u.state)>=0,"text-bg-success":u.state==="success","text-bg-error":u.state==="errored","text-bg-secondary":u.state==="canceled"}])},d(u.state),3)],8,wt)]))),256))]),o.value&&p.value?(l(),O(gt,{key:0,"release-script":o.value,class:"mt-2"},{buttons:C(()=>[e("button",{class:L([{"btn-primary":c.value==="idle"||c.value==="saving","btn-success":c.value==="success","btn-danger":c.value==="error"},"mb-3 btn btn-sm btn-primary"]),onClick:s},[c.value==="idle"?(l(),n("i",Ot)):_("",!0),c.value==="saving"?(l(),n("i",Tt)):_("",!0),c.value==="success"?(l(),n("i",At)):_("",!0),c.value==="error"?(l(),n("i",Nt)):_("",!0),t[4]||(t[4]=b(" Save release script ",-1))],2)]),_:1},8,["release-script"])):_("",!0)]))}}),Rt=["href"],A=U({__name:"ErrorLink",props:{short_repository_name:{},error:{},term:{}},setup(a){const p=a,o=N(()=>p.term?p.term:p.error),r=URLS.prefix;return(c,y)=>o.value.hasOwnProperty("origin")&&o.value.origin?(l(),n("a",{key:0,target:"_blank",href:`${F(r)}/edit/${a.short_repository_name}/${o.value.origin[0]}?row=${o.value.origin[1]}`},[Q(c.$slots,"default",{},()=>[e("i",null,[y[3]||(y[3]=b(" at ",-1)),e("b",null,d(o.value.origin[0]),1),a.error&&"row"in a.error?(l(),n(g,{key:0},[y[0]||(y[0]=b(" row ",-1)),e("b",null,d(a.error.row),1)],64)):_("",!0),a.error&&"column"in a.error?(l(),n(g,{key:1},[y[1]||(y[1]=b(" column ",-1)),e("b",null,d(a.error.column),1)],64)):_("",!0),!a.error&&o.value.origin[1]>=0?(l(),n(g,{key:2},[y[2]||(y[2]=b(" row ",-1)),e("b",null,d(o.value.origin[1]),1)],64)):_("",!0)])])],8,Rt)):_("",!0)}}),Y=URLS.prefix;async function It(a,p,o){try{const c=await(await fetch(`${Y}/api/external/guess-parent`,{method:"post",body:JSON.stringify({term:{id:a.id??void 0,label:a.label??void 0},parent:{id:o?.id??void 0,label:o?.label??void 0}}),headers:{"Content-Type":"application/json"}})).json();if(c)return c.map(y=>({...y,kind:"external"}))}catch{}return null}async function Dt(a,p,o){const r=o.term;if(await je({title:"Found an external parent",message:`An external parent <code>${r.label}</code> (<code>${r.id}</code>) of <code>${a.term.label}</code> (<code>${a.term.id}</code>) was found. Import the term?`,buttons:{confirm:{label:`Import ${r.id}`,className:"btn-success"},cancel:{label:"Cancel",className:"btn-warning"}}}))try{if((await fetch(`${Y}/api/external/${p}/import`,{method:"post",body:JSON.stringify({terms:[{id:r.id,label:r.label}],ontologyId:o.ontology_id}),headers:{"Content-Type":"application/json"}})).ok)return"fixed"}catch{return"impossible"}return"loaded"}async function Pt(a,p,o){const r=await Re({title:"Found possible external parents",message:`Found ${a.length} possible external terms for <code>${p.parent.label}</code>. Select the correct parent term of <code>${p.term.label}</code> (<code>${p.term.id}</code>) if it is in the list.`,inputType:"select",inputOptions:a.map((c,y)=>({value:y.toString(),text:`${c.term.label} (${c.term.id})`})),buttons:{confirm:{label:"Import the selected term",className:"btn-success"},cancel:{label:"Cancel",className:"btn-warning"}}});if(r!==null){const c=a[+r],y=c.term;try{return(await fetch(`${Y}/api/external/${o}/import`,{method:"post",body:JSON.stringify({terms:[{id:y.id,label:y.label}],ontologyId:c.ontology_id}),headers:{"Content-Type":"application/json"}})).ok?"fixed":"impossible"}catch{return"impossible"}}return"loaded"}async function Et(a,p){const o=await It(a.term,p,a.parent);return o!==null&&o.length>0?o.length===1?await Dt(a,p,o[0]):await Pt(o,a,p):"impossible"}const Ut={key:0,class:"alert alert-success"},Vt={key:1},Lt={class:"text-danger bg-danger-subtle rounded ps-1 pe-1"},Wt={class:"text-warning bg-warning-subtle rounded ps-1 pe-1"},Ft=["onClick"],Mt={key:0,class:"fa fa-spin fa-spinner"},Bt={key:1,class:"fa fa-check"},Jt={key:2,class:"fa fa-close"},Gt={style:{"text-transform":"capitalize"}},Ht={key:0},qt={key:1},zt={key:2},Kt={key:3},Qt={class:"alert alert-warning val val-warning val-warning-type-{{ warning.type }} val-warning-source-{{ source }}",role:"alert"},Xt=["onClick"],Yt={key:0,class:"fa fa-spin fa-spinner"},Zt={key:1,class:"fa fa-check"},es={key:2,class:"fa fa-close"},ts=["onClick"],ss={key:0,class:"fa fa-spin fa-spinner"},ls={key:1,class:"fa fa-check"},ns={key:2,class:"fa fa-close"},as=U({__name:"Validation",props:{data:{},release:{},selectedSubStep:{}},emits:["release-control"],setup(a){const p=URLS.prefix,o=a,r=I({});function c(f){const s=JSON.stringify(f);return r.value[s]??null}const y=N(()=>o.data?Object.values(o.data).flatMap(f=>f.errors):null),S=N(()=>o.data?Object.values(o.data).flatMap(f=>f.warnings):null),v=N(()=>o.release.release_script.short_repository_name);async function k(f,s,i){const t=o.release.release_script.short_repository_name;try{return(await fetch(`${p}/api/edit/${t}/${f}`,{method:"PATCH",body:JSON.stringify({id:s,term:{id:i.id,parent:i.sub_class_of[0]?.label,label:i.label}}),headers:{"Content-Type":"application/json"}})).ok?"fixed":"impossible"}catch{return"impossible"}}async function T(f,s,i,t){const u=JSON.stringify(f);u in r.value&&r.value[u]!=="loaded"||(r.value[u]=await k(f?.term?.origin?.[0]??i?.origin?.[0],s,i))}async function E(f){let s=JSON.stringify(f);if(s in r.value&&r.value[s]!=="loaded")return;const i=o.release.release_script.short_repository_name;if(r.value[s]="loading",f.type==="unknown-parent")r.value[s]=await Et(f,i);else if(f.type==="missing-import")try{(await fetch(`${p}/api/external/${i}/import`,{method:"post",body:JSON.stringify({terms:[{id:f.term.id,label:f.term.label}],ontologyId:f.term.id.split(":")[0]}),headers:{"Content-Type":"application/json"}})).ok&&(r.value[s]="fixed")}catch(t){r.value[s]="impossible",console.error(t)}else r.value[s]="impossible";r.value[s]=="loading"&&(r.value[s]="loaded")}return(f,s)=>(l(),n(g,null,[s[18]||(s[18]=e("h3",null,"Validation",-1)),!a.data||Object.keys(a.data).length===1&&"__progress"in a.data?(l(),O(F(X),{key:0,release:a.release,details:a.data||{}},{default:C(()=>[...s[0]||(s[0]=[b(" All excel files are now being validated. The results will be presented here soon. ",-1)])]),_:1},8,["release","details"])):(l(),n(g,{key:1},[y.value?.length==0&&S.value?.length==0?(l(),n("div",Ut,[...s[1]||(s[1]=[e("h5",null,"Everything ok",-1),b(" Good work! All files are valid. The release process will continue. ",-1)])])):(l(),n("p",Vt,[e("span",Lt,d(y.value?.length??0)+" "+d(f.$filters.pluralise("error",y.value)),1),s[2]||(s[2]=b(" and ",-1)),e("span",Wt,d(S.value?.length??0)+" "+d(f.$filters.pluralise("warning",S.value)),1),s[3]||(s[3]=b(" were found during the validation. Please fix the errors and save the spreadsheets. Errors are problems which prevent the release from continuing. Warnings hint at possible problems, but the release might continue without solving them. When you fixed all errors, restart the release. If you just want to rerun the validation, restart the release as well. ",-1))])),(l(!0),n(g,null,D(a.data?Object.keys(a.data):[],i=>(l(),n(g,null,[a.selectedSubStep===null||a.selectedSubStep===i?(l(),n(g,{key:0},[(l(!0),n(g,null,D(a.data?.[i].errors,t=>(l(),n("div",{class:L([[`val-error-type-${t.type}`,`val-error-source-${i}`],"alert alert-danger val val-error"]),role:"alert"},[t.type==="unknown-parent"?(l(),n(g,{key:0},[w(R,{diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"]),a.release.release_script.short_repository_name.toLowerCase()!=="addicto"?(l(),n("button",{key:0,class:L([{"btn-success":c(t)==="fixed","btn-danger":c(t)==="impossible"},"btn btn-primary"]),onClick:u=>E(t)},[c(t)==="loading"?(l(),n("i",Mt)):_("",!0),c(t)==="fixed"?(l(),n("i",Bt)):_("",!0),c(t)==="impossible"?(l(),n("i",Jt)):_("",!0),s[4]||(s[4]=b(" Try auto fix ",-1))],10,Ft)):_("",!0)],64)):t.type==="missing-parent"?(l(),O(R,{key:1,diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="no-parent"?(l(),O(R,{key:2,diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="ignored-parent"?(l(),O(R,{key:3,diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="missing-label"?(l(),O(R,{key:4,diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="missing-id"?(l(),O(R,{key:5,diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="unknown-disjoint"?(l(),O(R,{key:6,diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="unknown-relation-value"?(l(),O(R,{key:7,diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="ignored-relation-value"?(l(),O(R,{key:8,diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.term??t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="unknown-range"?(l(),O(R,{key:9,diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="unknown-domain"?(l(),O(R,{key:10,diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="unknown-relation"?(l(),O(R,{key:11,diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.relation},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"])):t.type==="duplicate"?(l(),n(g,{key:12},[s[11]||(s[11]=e("h5",null,"Conflicting entries (duplicates)",-1)),e("p",null,[b(" There are multiple terms for the "+d(t.duplicate_field)+" ",1),e("code",null,d(t.duplicate_value),1),s[5]||(s[5]=b(": ",-1))]),e("ul",null,[(l(!0),n(g,null,D(t.mismatches,u=>(l(),n("li",null,[e("p",null,[e("span",Gt,d(u.field),1),s[6]||(s[6]=b(" is ",-1)),["definition","curation status"].indexOf(u.field)>=0?(l(),n("code",Ht,d(u.a.relations.find(j=>j[0]?.label?.endsWith(u.field))?.[1]),1)):(l(),n("code",qt,d(u.a[u.field]),1)),s[7]||(s[7]=e("br",null,null,-1)),w(A,{short_repository_name:v.value,term:u.a},null,8,["short_repository_name","term"]),s[8]||(s[8]=e("br",null,null,-1)),s[9]||(s[9]=b(" and ",-1)),["definition","curation status"].indexOf(u.field)>=0?(l(),n("code",zt,d(u.b.relations.find(j=>j[0]?.label?.endsWith(u.field))?.[1]),1)):(l(),n("code",Kt,d(u.b[u.field]),1)),s[10]||(s[10]=e("br",null,null,-1)),w(A,{short_repository_name:v.value,term:u.b},null,8,["short_repository_name","term"])])]))),256))])],64)):(l(),n(g,{key:13},[e("h5",null,d(t.type.replace("-"," ")),1),e("p",null,[b(d(t.msg),1),s[12]||(s[12]=e("br",null,null,-1)),w(A,{error:t,short_repository_name:v.value},null,8,["error","short_repository_name"])]),e("pre",null,d(JSON.stringify(t,void 0,2)),1)],64))],2))),256)),(l(!0),n(g,null,D(a.data?.[i].warnings,t=>(l(),n("div",Qt,[t.type=="incomplete-term"?(l(),O(R,{key:0,diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value},null,8,["error","short_repository_name"])]),_:2},1032,["diagnostic"])):t.type==="unknown-column"?(l(),O(R,{key:1,diagnostic:t},null,8,["diagnostic"])):t.type==="missing-import"?(l(),n(g,{key:2},[w(R,{diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.term},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"]),e("button",{class:L([{"btn-success":c(t)==="fixed","btn-danger":c(t)==="impossible"},"btn btn-primary"]),onClick:u=>E(t)},[c(t)==="loading"?(l(),n("i",Yt)):_("",!0),c(t)==="fixed"?(l(),n("i",Zt)):_("",!0),c(t)==="impossible"?(l(),n("i",es)):_("",!0),s[13]||(s[13]=b(" Import ",-1))],10,Xt)],64)):t.type==="inconsistent-import"?(l(),n(g,{key:3},[w(R,{diagnostic:t},{default:C(()=>[w(A,{error:t,short_repository_name:v.value,term:t.term},null,8,["error","short_repository_name","term"])]),_:2},1032,["diagnostic"]),e("button",{class:L([{"btn-success":c(t)==="fixed","btn-danger":c(t)==="impossible"},"btn btn-primary"]),onClick:u=>T(t,t.term.id,{...t.term.id,label:t.term.label,id:t.term.id})},[c(t)==="loading"?(l(),n("i",ss)):_("",!0),c(t)==="fixed"?(l(),n("i",ls)):_("",!0),c(t)==="impossible"?(l(),n("i",ns)):_("",!0),s[16]||(s[16]=b(" Change ",-1)),t.term.id!==t.imported_term.id?(l(),n(g,{key:3},[s[14]||(s[14]=b(" ID to ",-1)),e("code",null,d(t.imported_term.id),1)],64)):(l(),n(g,{key:4},[s[15]||(s[15]=b("label to ",-1)),e("code",null,d(t.imported_term.label),1)],64))],10,ts)],64)):(l(),n(g,{key:4},[e("h5",null,d(t.type.replace("-"," ")),1),e("p",null,[b(d(t.msg),1),s[17]||(s[17]=e("br",null,null,-1)),w(A,{error:t,short_repository_name:v.value},null,8,["error","short_repository_name"])]),e("pre",null,d(JSON.stringify(t,void 0,2)),1)],64))]))),256))],64)):_("",!0)],64))),256))],64))],64))}}),os=["href","download"],is={class:"list-unstyled"},rs={class:"ms-4"},us={class:"form-check"},ds=["disabled"],cs={class:"ms-4"},ps={class:"form-check"},fs=["disabled"],ms={key:0,class:"ms-4"},gs={class:"form-check"},bs=["disabled"],ys=["disabled"],hs=U({__name:"HumanVerification",props:{data:{},release:{},selectedSubStep:{}},emits:["release-control"],setup(a){const p=a,o=I(p.release.state==="completed"),r=I(p.release.state==="completed"),c=I(p.release.state==="completed"),y=N(()=>!!p.data?.files?.find(v=>v.name.endsWith(".xlsx"))),S=N(()=>[r.value,o.value,!y.value||c.value].reduce((v,k)=>v&&k,!0));return(v,k)=>(l(),n(g,null,[k[7]||(k[7]=e("h3",null,"Verify the built ontologies",-1)),k[8]||(k[8]=e("p",null,[b(" Please download the built files and ontologies and open them in Protégé (download "),e("a",{href:"https://protege.stanford.edu/software.php#desktop-protege"},"here"),b(" or use "),e("a",{href:"https://webprotege.stanford.edu/"},"Web protege"),b("). ")],-1)),e("ul",null,[(l(!0),n(g,null,D(a.data?.files,T=>(l(),n("li",null,[e("a",{href:T.link,download:T.name},d(T.name),9,os)]))),256))]),k[9]||(k[9]=e("p",null," Check the following things: ",-1)),e("ul",is,[e("li",rs,[e("div",us,[V(e("input",{"onUpdate:modelValue":k[0]||(k[0]=T=>o.value=T),disabled:a.release.state!=="waiting-for-user",class:"form-check-input checklist",type:"checkbox",value:"",id:"chk-inferred"},null,8,ds),[[H,o.value]]),k[4]||(k[4]=e("label",{class:"form-check-label",for:"chk-inferred"}," Start the reasoner. Does the inferred hierarchy look alright? ",-1))])]),e("li",cs,[e("div",ps,[V(e("input",{"onUpdate:modelValue":k[1]||(k[1]=T=>r.value=T),disabled:a.release.state!=="waiting-for-user",class:"form-check-input checklist",type:"checkbox",value:"",id:"chk-labels"},null,8,fs),[[H,r.value]]),k[5]||(k[5]=e("label",{class:"form-check-label",for:"chk-labels"}," Do the labels look alright? ",-1))])]),y.value?(l(),n("li",ms,[e("div",gs,[V(e("input",{"onUpdate:modelValue":k[2]||(k[2]=T=>c.value=T),disabled:a.release.state!=="waiting-for-user",class:"form-check-input checklist",type:"checkbox",value:"",id:"chk-hierarchical-spreadsheets"},null,8,bs),[[H,c.value]]),k[6]||(k[6]=e("label",{class:"form-check-label",for:"chk-hierarchical-spreadsheets"}," Do the hierarchy, labels, and other fields in the hierarchical spreadsheets look alright? ",-1))])])):_("",!0)]),e("button",{class:"btn btn-success w-100",id:"btn-publish-release",disabled:!S.value||a.release.state!=="waiting-for-user",onClick:k[3]||(k[3]=T=>v.$emit("release-control","continue"))}," Everything looks alright. Publish the release! ",8,ys)],64))}}),vs={class:"alert alert-danger"},ks={key:1},re=U({__name:"TechnicalError",props:{release:{},details:{}},setup(a){return(p,o)=>(l(),n(g,null,[o[4]||(o[4]=e("div",{class:"alert alert-danger"},[e("h4",null,"An error occurred while building the file"),e("p",null," A technical error occurred. Please contact an administrator. ")],-1)),(l(!0),n(g,null,D(a.details.errors,r=>(l(),n("div",vs,["code"in r?(l(),n(g,{key:0},[o[0]||(o[0]=e("h6",null,"Command",-1)),e("pre",null,d(r.command),1),o[1]||(o[1]=e("h6",null,"Return code",-1)),e("p",null,d(r.code),1),o[2]||(o[2]=e("h6",null,"Standard out",-1)),e("pre",null,d(r.out),1),o[3]||(o[3]=e("h6",null,"Standard error",-1)),e("pre",null,d(r.err),1)],64)):(l(),n("pre",ks,d(JSON.stringify(r,void 0,2)),1))]))),256))],64))}}),_s=U({__name:"GithubPublish",props:{data:{},release:{},selectedSubStep:{}},emits:["release-control"],setup(a){return(p,o)=>(l(),n(g,null,[o[3]||(o[3]=e("h3",null,"Publishing the release",-1)),a.release.state=="waiting-for-user"&&a.data&&(a.data.errors?.length??0)>0?(l(),O(re,{key:0,release:a.release,details:a.data},null,8,["release","details"])):a.release.state==="completed"?(l(),n(g,{key:1},[o[0]||(o[0]=e("p",null," The ontologies are now published to github and the release is completed. ",-1)),o[1]||(o[1]=e("div",{class:"text-center w-100 text-success",style:{"font-size":"100px"}},[e("i",{class:"fa fa-check-double"})],-1))],64)):(l(),O(F(X),{key:2,details:a.data,release:a.release},{default:C(()=>[...o[2]||(o[2]=[b(" The ontologies are being published to github. ",-1)])]),_:1},8,["details","release"]))],64))}}),$s={key:2},xs=U({__name:"Generic",props:{data:{},release:{},step:{}},emits:["release-control"],setup(a){const p={PREPARATION:{title:"Preparation",running_text:"Excel files are downloaded to the server and prepared.",finished_text:"Excel files were downloaded to the server."},IMPORT_EXTERNAL:{title:"Building external dependencies",running_text:"External ontologies are now downloaded and converted. This might take a few minutes.",finished_text:"External ontologies were successfully downloaded and converted."},BUILD:{title:"Building OWL files",running_text:"OWL files are now build.",finished_text:"OWL files were successfully built."},MERGE:{title:"Merging files",running_text:"Multiple OWL files are being combined into one.",finished_text:"Multiple OWL files were combined into one."}},o=a;function r(v){return v.replace("_"," ").replace(/\w\S*/g,k=>k.charAt(0).toUpperCase()+k.substring(1).toLowerCase())}const c=N(()=>p[o.step.name]?.title??r(o.step.name??"<MISSING>")),y=N(()=>p[o.step.name]?.running_text??""),S=N(()=>p[o.step.name]?.finished_text??"");return(v,k)=>(l(),n(g,null,[e("h3",null,d(c.value),1),a.release.state=="waiting-for-user"&&a.data&&(a.data.errors?.length??0)>0?(l(),O(re,{key:0,release:a.release,details:a.data},null,8,["release","details"])):(l(),O(F(X),{key:1,details:a.data,release:a.release},{default:C(()=>[b(d(y.value),1)]),_:1},8,["details","release"])),a.release.state==="completed"?(l(),n("p",$s,d(S.value),1)):_("",!0)],64))}}),ws={class:"release"},Ss={class:"d-flex gap-2 align-items-center"},Cs={id:"lbl-release-title"},Os={key:0,id:"release-info",class:"align-self-end mb-2 text-muted"},Ts={key:0,class:"alert alert-danger"},As={key:1,style:{display:"grid","grid-template-columns":"240px 1fr","grid-gap":"50px"},class:"text-start w-100",id:"release-core"},Ns={class:"sidebar border",style:{"grid-column":"1"}},js={class:"list-unstyled ps-2"},Rs={class:"mb-1"},Is={class:"d-flex align-items-center"},Ds=["onClick"],Ps={key:0},Es={key:0,class:"list-unstyled ms-4"},Us={style:{display:"flex","align-items":"center"}},Vs={key:0,class:"fa fa-circle-exclamation text-danger"},Ls={key:1,class:"fa fa-triangle-exclamation text-warning"},Ws={key:2,class:"fa fa-check-circle text-success"},Fs=["onClick"],Ms={key:0},Bs={class:"main",style:{"grid-column":"2"}},Js={key:0,class:"alert alert-danger"},Gs={key:1,class:"alert alert-danger"},Hs={key:0,class:"loading"},qs={style:{"font-size":"x-small",position:"absolute",bottom:"4px",right:"8px",color:"#888"}},zs=U({__name:"Release",setup(a){const p=SERVER_DATA.repo,o=URLS.prefix,r=I(null),c=I(!1),y=I(null),S=I(null),v=I(null),{show:k}=Oe(),T={VALIDATION:as,HUMAN_VERIFICATION:hs,GITHUB_PUBLISH:_s},E=we({}),f=N(()=>({...T,...E.value}));async function s(){try{const h=await fetch(`${o}/api/plugins/`);if(!h.ok)return;const m=await h.json(),$={};for(const x of m)if(!(!x.has_static||!x.js_module||x.components.length===0))for(const P of x.components){const M=x.id,W=x.js_module,le=P.component_name;$[P.step_name]=$e(xe(async()=>{const ne=await import(`${o}/api/plugins/${M}/static/${W}`);return ne[le]||ne.default}))}E.value=$}catch(h){console.error("Failed to load plugins:",h)}}const i=N(()=>r.value?.release_script.steps[S.value??r.value.step]??null),t=N(()=>f.value[i.value?.name]??xs),u=N(()=>{const h={data:j.value,release:r.value,selectedSubStep:v.value,step:i.value},m=t.value;if(m){const $=Object.keys(m.props);return Object.fromEntries(Object.entries(h).filter(([x,P])=>$.indexOf(x)>=0))}return null}),j=N(()=>r.value?.details[(S.value??r.value.step).toString()]);function B(h){if(h instanceof Object){const $=Object.entries(h).filter(([x,P])=>!x.startsWith("_")&&["warnings","errors","infos"].indexOf(x)<0&&Array.isArray(P?.warnings)&&Array.isArray(P?.errors));return $.length>0?Object.fromEntries($):null}return null}async function ee(h=!1){const m=r.value?.id??`${p}/running`;c.value=h;try{let $=await fetch(`${o}/api/release/${m}`);$.ok?r.value=await $.json():r.value=null}catch{}finally{c.value=!1}}oe(async()=>{await s();const h=window.location.pathname.split("/").slice(-1)[0],m=parseInt(h);isNaN(m)?await ee(!0):r.value=await K(()=>fetch(`${o}/api/release/${m}`))??null});let q=null;function z(){q===null&&(q=setInterval(ee,2e3))}const ue=ae(r,(h,m)=>{m===null&&h!==null&&q===null&&h.state==="running"&&(ue(),z())}),de=N(()=>{switch(r.value?.state){case void 0:case null:return["fa-regular","fa-file","text-black-50"];case"canceled":return["fa-regular","fa-circle-xmark","text-danger"];case"waiting-for-user":return["fa-solid","fa-user-clock","text-warning"];case"errored":return["fa-solid","fa-triangle-exclamation","text-danger"];case"completed":return["fa-regular","fa-circle-check","text-success"];default:return["fa-spinner","fa-spin","text-black-50"]}});async function K(h,m=null){try{c.value=!0;const $=await h();if($.ok){const x=await $.json();return m!==null?await m(x):x}else{const x=await $.json();y.value=x.error}c.value=!1}catch($){$ instanceof Error?y.value=$.message:y.value=`An unknown error occurred: ${$}`}finally{c.value=!1}}async function ce(){k?.({props:{value:5e3,progressProps:{variant:"success"}},component:G(Ae,{variant:"success"},{default:()=>G("div",{style:"display: flex; align-items: center; gap: 16px"},[G("i",{class:"fa fa-check"}),G("span",null,"Requesting rerun!")])})}),await fetch(`${o}/api/release/${p}/rerun-step?force=true`,{method:"POST"}),z()}async function te(h){const m=await K(()=>fetch(o+"/api/release/start",{method:"post",body:JSON.stringify(h),headers:{"Content-Type":"application/json"}}));m&&(r.value=m,window.location.pathname=`${o}/admin/release/${m.id}`)}async function se(){r.value=await K(()=>fetch(`${o}/api/release/${p}/cancel`,{method:"post"}))??null}async function pe(){const h=r.value?.release_script;h&&(await se(),await te(h))}function fe(h){const m=r.value?.details[h.toString()];if(m?.hasOwnProperty("errors")&&Array.isArray(m.errors))return m.errors.length;if(Array.isArray(m))return m.map($=>$.errors?.length).reduce(($,x)=>x+$,0)}function me(h){const m=r.value?.details[h.toString()];if(m?.hasOwnProperty("warnings")&&Array.isArray(m.warnings))return m.warnings.length;if(m)return Object.values(m).map($=>$.warnings?.length).reduce(($,x)=>x+$,0)}function ge(h){return(r.value?.step??0)>=h?fe(h)>0?"fa fa-triangle-exclamation text-danger".split(" "):me(h)>0?"fa fa-triangle-exclamation text-warning".split(" "):r.value?.step===h&&r.value.state!=="completed"?"fa-regular fa-circle text-primary".split(" "):"fa-regular fa-check-circle text-success".split(" "):"fa-regular fa-clock text-warning".split(" ")}async function be(h){h==="continue"?(await fetch(`${o}/api/release/${p}/continue`),z()):console.warn(`No such release control type: '${h}'`)}return(h,m)=>{const $=Te;return l(),n(g,null,[w($),e("div",ws,[e("div",Ss,[e("h1",Cs,[e("i",{id:"icon-release",class:L(["fa",de.value])},null,2),b(" Release "+d(F(p)),1)]),r.value?(l(),n("span",Os," started by "+d(r.value.started_by)+" on "+d(h.$filters.formatDate(r.value.start)),1)):_("",!0),m[4]||(m[4]=e("span",{class:"flex-fill"},null,-1)),r.value&&["running","waiting-for-user","errored"].indexOf(r.value.state)>=0?(l(),n(g,{key:1},[e("button",{class:"btn btn-warning",id:"btn-release-restart",onClick:pe},[...m[2]||(m[2]=[e("i",{class:"fa fa-rotate-left"},null,-1),b(" Restart ",-1)])]),e("button",{class:"btn btn-danger",id:"btn-release-cancel",onClick:se},[...m[3]||(m[3]=[e("i",{class:"fa fa-cancel"},null,-1),b(" Cancel ",-1)])])],64)):_("",!0)]),!r.value&&!c.value?(l(),n(g,{key:0},[y.value!==null?(l(),n("div",Ts,[m[5]||(m[5]=e("h4",null,"An error occurred",-1)),b(" "+d(y.value),1)])):_("",!0),r.value?_("",!0):(l(),O(jt,{key:1,style:{"max-width":"1080px",margin:"0 auto"},repo:F(p),onSettingsConfirmed:m[0]||(m[0]=x=>te(x))},null,8,["repo"]))],64)):_("",!0),r.value!==null?(l(),n("div",As,[e("div",Ns,[e("ul",js,[(l(!0),n(g,null,D(r.value.release_script.steps,(x,P)=>(l(),n("li",Rs,[e("div",Is,[e("i",{class:L(ge(P))},null,2),e("a",{class:"btn border-0",onClick:M=>{S.value=P,v.value=null}},[(S.value!==null?S.value==P:r.value.step==P)?(l(),n("strong",Ps,d(h.$filters.formatText(x.name)),1)):(l(),n(g,{key:1},[b(d(h.$filters.formatText(x.name)),1)],64))],8,Ds)]),B?(l(),n("ul",Es,[(l(!0),n(g,null,D(B(r.value.details[P]),(M,W)=>(l(),n("li",Us,[(M.errors?.length??0)>0?(l(),n("i",Vs)):(M.warnings?.length??0)>0?(l(),n("i",Ls)):(l(),n("i",Ws)),e("a",{class:"btn border-0 text-truncate",onClick:le=>v.value=v.value===W?null:W},[v.value===W?(l(),n("strong",Ms,d(W),1)):(l(),n(g,{key:1},[b(d(W),1)],64))],8,Fs)]))),256))])):_("",!0)]))),256))])]),e("div",Bs,[y.value!==null?(l(),n("div",Js,[m[6]||(m[6]=e("h4",null,"An error occurred",-1)),b(" "+d(y.value),1)])):_("",!0),j.value?.error?(l(),n("div",Gs,[e("h4",null,"An error occurred: "+d(j.value.error.short),1),e("pre",null,d(j.value.error.long),1)])):_("",!0),(l(),O(ke(t.value),ve(u.value,{onReleaseControl:be}),null,16))])])):_("",!0)]),c.value?(l(),n("div",Hs,[...m[7]||(m[7]=[e("div",{class:"inner text-light"},[e("div",{class:"spinner-border",style:{width:"5rem",height:"5rem"},role:"status"}),e("h5",null,"Loading...")],-1)])])):_("",!0),e("div",qs,[e("a",{href:"#",onClick:m[1]||(m[1]=_e(x=>ce(),["prevent"]))},"Rerun")])],64)}}}),Ks=ie(zs,[["__scopeId","data-v-16ff9444"]]),Z=Se(Ks);Z.use(Ie());Z.config.globalProperties.$filters=Ce;Z.mount("#vue-app-release");
@@ -1,2 +1 @@
1
- import{d as P,r as g,c as r,a as i,e as s,F as k,g as U,q as W,s as $,D as b,L as y,u as o,l as A,x as v,f as x,h as _,t as V,v as B,j as I,$ as q}from"./chunks/filter-CiYqP1_r.js";import{C as E}from"./chunks/CollapsibleCard-DoX0kPCZ.js";import{a as f,p as F}from"./chunks/bootbox-D3SJ_Fwv.js";import{_ as J}from"./chunks/_plugin-vue_export-helper-DlAUqK2U.js";const M={class:"settings"},z=["disabled","onClick"],G=["disabled","onClick"],H={class:"input-group input-group-sm mb-3"},K=["onUpdate:modelValue"],Q={class:"input-group input-group-sm mb-3"},X=["onUpdate:modelValue"],Y={class:"input-group input-group-sm mb-3"},Z=["onUpdate:modelValue"],ee={class:"input-group input-group-sm mb-3"},se=["onUpdate:modelValue"],te={class:"input-group input-group-sm mb-3"},le=["onUpdate:modelValue"],ae=["onUpdate:modelValue"],oe=["disabled","onClick"],ne=["disabled","onClick"],ie={key:0,class:"fa fa-spin fa-spinner"},re={key:1,class:"fa fa-check"},ue={key:2,class:"fa fa-close"},de={key:3,class:"fa fa-file-import"},pe={class:"d-flex gap-2"},fe=["disabled"],ce=["disabled"],me=P({__name:"Settings",setup(be){const c=URLS.prefix,n=g(SETTINGS);let w=g(!1),h=g(null),C=g(null),u=g(null),m=A(()=>w.value||h.value!==null||C.value!==null||u.value==="busy"),d=g({reload:null}),T={};async function O(a){C.value=a.full_name;const e=n.value.startup_repositories.indexOf(a.full_name)>=0;(await(await fetch(`${c}/api/settings/repositories/${e?"remove":"add"}_startup`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({full_name:a.full_name})})).json()).success?n.value.startup_repositories=e?n.value.startup_repositories.filter(p=>p!==a.full_name):[...n.value.startup_repositories,a.full_name]:await f({title:"Unsetting as startup failed",message:"The current configuration probably does not allow setting startup repositories."}),C.value=null}async function R(a){h.value=a.full_name,(await(await fetch(`${c}/api/settings/repositories/unload`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({full_name:a.full_name})})).json()).success?n.value.repositories=n.value.repositories.filter(t=>t!==a):await f({title:"Unloading failed",message:"The repository was probably already unloaded. Try refreshing the page."}),h.value=null}async function N(){w.value=!0;let a=await(await fetch(`${c}/api/settings/repositories/possibilities`)).json();if(a.success){const e=a.repositories,t=await F({title:"Found possible external parents",message:"Chose one of your repositories to load.",inputType:"select",inputOptions:e.map(({short_name:l,full_name:p},S)=>({value:S,text:`${l} (${p})`})),buttons:{confirm:{label:"Load repository",className:"btn-success"},cancel:{label:"Cancel",className:"btn-warning"}}});if(t!==null){const l=await(await fetch(`${c}/api/settings/repositories/load`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e[t])})).json();l.success?n.value.repositories=[...n.value.repositories,l.repo]:await f({title:"Loading failed",message:l.error})}}else await f({title:"Unloading failed",message:"The repository was probably already unloaded. Try refreshing the page."});w.value=!1}async function L(a,e){u.value="busy";try{const t=await(await fetch(`${c}/api/repo/${e.short_name}/install_workflow/${a}`,{method:"POST",headers:{"Content-Type":"application/json"}})).json();t.success||await f({title:"Workflow installation failed",message:t.msg}),u.value="success"}catch{await f({title:"Workflow installation failed",message:"An error occurred while installing the workflow."}),u.value="error"}}async function D(){d.value.reload="loading";try{const a=await(await fetch(`${c}/api/settings/repositories/reload`,{method:"post"})).json();a.success?(n.value.repositories=a.repositories,d.value.reload="success"):(await f({title:"Reloading settings failed",message:a.error}),d.value.reload="error")}catch{await f({title:"Reloading settings failed",message:"An error occurred while reloading the settings."}),d.value.reload="error"}T.reload&&clearTimeout(T.reload),T.reload=setTimeout(()=>d.value.reload=null,2e3)}return(a,e)=>(i(),r("div",M,[e[21]||(e[21]=s("h1",null,"Settings",-1)),e[22]||(e[22]=s("h3",null,"Repositories",-1)),(i(!0),r(k,null,U(n.value.repositories,t=>(i(),W(E,null,{title:$(()=>[_(V(t.short_name)+" ("+V(t.full_name)+") ",1)]),buttons:$(()=>[s("button",{disabled:o(m)||!n.value.changing_startup_allowed,class:"btn btn-primary btn-sm",onClick:l=>O(t)},[n.value.startup_repositories.indexOf(t.full_name)>=0?(i(),r(k,{key:0},[e[1]||(e[1]=s("i",{class:"fa fa-square-check"},null,-1)),e[2]||(e[2]=_(" Loaded on startup ",-1))],64)):(i(),r(k,{key:1},[e[3]||(e[3]=s("i",{class:"fa fa-square"},null,-1)),e[4]||(e[4]=_(" Not loaded on startup ",-1))],64))],8,z),n.value.loading_new_allowed?(i(),r("button",{key:0,disabled:o(m),class:"btn btn-danger btn-sm btn-circle",onClick:l=>{l.stopPropagation(),R(t)}},[s("i",{class:v([o(h)===t.full_name?["fa-spinner","fa-spin"]:["fa-trash"],"fa"])},null,2)],8,G)):x("",!0)]),body:$(()=>[e[13]||(e[13]=s("h6",null,"Core settings",-1)),s("div",H,[e[5]||(e[5]=s("span",{class:"input-group-text"},"ID Length",-1)),b(s("input",{"onUpdate:modelValue":l=>t.id_digits=l,class:"form-control",type:"number"},null,8,K),[[y,t.id_digits]])]),s("div",Q,[e[6]||(e[6]=s("span",{class:"input-group-text"},"Main branch",-1)),b(s("input",{"onUpdate:modelValue":l=>t.main_branch=l,class:"form-control",type:"text"},null,8,X),[[y,t.main_branch]])]),e[14]||(e[14]=s("h6",null,"Release",-1)),s("div",Y,[e[7]||(e[7]=s("span",{class:"input-group-text"},"Released OWL file",-1)),b(s("input",{"onUpdate:modelValue":l=>t.release_file=l,class:"form-control",type:"text"},null,8,Z),[[y,t.release_file]])]),s("div",ee,[e[8]||(e[8]=s("span",{class:"input-group-text"},"Released script",-1)),b(s("input",{"onUpdate:modelValue":l=>t.release_script_path=l,class:"form-control",type:"text"},null,8,se),[[y,t.release_script_path]])]),e[15]||(e[15]=s("h6",null,"Subontologies",-1)),e[16]||(e[16]=s("p",{class:"text-body-secondary"}," To generate hierarchical spreadsheets ",-1)),(i(!0),r(k,null,U(t.subontologies,l=>(i(),r("div",te,[e[10]||(e[10]=s("span",{class:"input-group-text"},"Excel",-1)),b(s("input",{"onUpdate:modelValue":p=>l.excel_file=p,class:"form-control",type:"text"},null,8,le),[[y,l.excel_file]]),e[11]||(e[11]=s("span",{class:"input-group-text"},"Released",-1)),b(s("input",{"onUpdate:modelValue":p=>l.release_file=p,class:"form-control",type:"text"},null,8,ae),[[y,l.release_file]]),s("button",{disabled:o(m),class:"btn btn-danger",onClick:p=>t.subontology=t.subontologies.filter(S=>S!=l)},[...e[9]||(e[9]=[s("i",{class:"fa fa-trash"},null,-1)])],8,oe)]))),256)),e[17]||(e[17]=s("h6",null,"Workflows",-1)),e[18]||(e[18]=s("p",{class:"text-body-secondary"}," Install github workflows in this repository ",-1)),s("button",{class:v([{"btn-success":o(u)==="success","btn-danger":o(u)==="error"},"btn btn-primary btn-sm"]),disabled:o(m),onClick:l=>L("externals",t)},[o(u)==="busy"?(i(),r("i",ie)):x("",!0),o(u)==="success"?(i(),r("i",re)):x("",!0),o(u)==="error"?(i(),r("i",ue)):(i(),r("i",de)),e[12]||(e[12]=_(" Automatically build externals owl file ",-1))],10,ne)]),_:2},1024))),256)),s("div",pe,[n.value.loading_new_allowed?(i(),r("button",{key:0,disabled:o(m),class:"mb-3 btn btn-sm btn-primary add-file",onClick:N},[s("i",{class:v([o(w)?["fa-spinner","fa-spin"]:["fa-add"],"fa"])},null,2),e[19]||(e[19]=_(" Load repository ",-1))],8,fe)):x("",!0),s("button",{class:v([[{success:"btn-success",null:"btn-primary",error:"btn-danger"}[o(d).reload]],"mb-3 btn btn-sm btn-primary add-file"]),disabled:o(m)||o(d).reload==="loading",onClick:e[0]||(e[0]=t=>D())},[s("i",{class:v([{success:["fa-check"],error:["fa-cross"],loading:["fa-spinner","fa-spin"]}[o(d).reload]??["fa-refresh"],"fa"])},null,2),e[20]||(e[20]=_(" Reload settings ",-1))],10,ce),B(a.$slots,"buttons",{},void 0,!0)])]))}}),ge=J(me,[["__scopeId","data-v-064e11eb"]]),j=I(ge);j.config.globalProperties.$filters=q;j.mount("#vue-app-settings");
2
- //# sourceMappingURL=settings.js.map
1
+ import{d as P,r as g,c as r,a as i,e as s,F as k,g as U,q as W,s as $,D as b,L as y,u as o,l as A,x as v,f as x,h as _,t as V,v as B,j as I,$ as q}from"./chunks/filter-Xg_JD3wD.js";import{C as E}from"./chunks/CollapsibleCard-kE-t6wrT.js";import{a as f,p as F}from"./chunks/bootbox-D3SJ_Fwv.js";import{_ as J}from"./chunks/_plugin-vue_export-helper-DlAUqK2U.js";const M={class:"settings"},z=["disabled","onClick"],G=["disabled","onClick"],H={class:"input-group input-group-sm mb-3"},K=["onUpdate:modelValue"],Q={class:"input-group input-group-sm mb-3"},X=["onUpdate:modelValue"],Y={class:"input-group input-group-sm mb-3"},Z=["onUpdate:modelValue"],ee={class:"input-group input-group-sm mb-3"},se=["onUpdate:modelValue"],te={class:"input-group input-group-sm mb-3"},le=["onUpdate:modelValue"],ae=["onUpdate:modelValue"],oe=["disabled","onClick"],ne=["disabled","onClick"],ie={key:0,class:"fa fa-spin fa-spinner"},re={key:1,class:"fa fa-check"},ue={key:2,class:"fa fa-close"},de={key:3,class:"fa fa-file-import"},pe={class:"d-flex gap-2"},fe=["disabled"],ce=["disabled"],me=P({__name:"Settings",setup(be){const c=URLS.prefix,n=g(SETTINGS);let w=g(!1),h=g(null),C=g(null),u=g(null),m=A(()=>w.value||h.value!==null||C.value!==null||u.value==="busy"),d=g({reload:null}),T={};async function O(a){C.value=a.full_name;const e=n.value.startup_repositories.indexOf(a.full_name)>=0;(await(await fetch(`${c}/api/settings/repositories/${e?"remove":"add"}_startup`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({full_name:a.full_name})})).json()).success?n.value.startup_repositories=e?n.value.startup_repositories.filter(p=>p!==a.full_name):[...n.value.startup_repositories,a.full_name]:await f({title:"Unsetting as startup failed",message:"The current configuration probably does not allow setting startup repositories."}),C.value=null}async function R(a){h.value=a.full_name,(await(await fetch(`${c}/api/settings/repositories/unload`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({full_name:a.full_name})})).json()).success?n.value.repositories=n.value.repositories.filter(t=>t!==a):await f({title:"Unloading failed",message:"The repository was probably already unloaded. Try refreshing the page."}),h.value=null}async function N(){w.value=!0;let a=await(await fetch(`${c}/api/settings/repositories/possibilities`)).json();if(a.success){const e=a.repositories,t=await F({title:"Found possible external parents",message:"Chose one of your repositories to load.",inputType:"select",inputOptions:e.map(({short_name:l,full_name:p},S)=>({value:S,text:`${l} (${p})`})),buttons:{confirm:{label:"Load repository",className:"btn-success"},cancel:{label:"Cancel",className:"btn-warning"}}});if(t!==null){const l=await(await fetch(`${c}/api/settings/repositories/load`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e[t])})).json();l.success?n.value.repositories=[...n.value.repositories,l.repo]:await f({title:"Loading failed",message:l.error})}}else await f({title:"Unloading failed",message:"The repository was probably already unloaded. Try refreshing the page."});w.value=!1}async function L(a,e){u.value="busy";try{const t=await(await fetch(`${c}/api/repo/${e.short_name}/install_workflow/${a}`,{method:"POST",headers:{"Content-Type":"application/json"}})).json();t.success||await f({title:"Workflow installation failed",message:t.msg}),u.value="success"}catch{await f({title:"Workflow installation failed",message:"An error occurred while installing the workflow."}),u.value="error"}}async function D(){d.value.reload="loading";try{const a=await(await fetch(`${c}/api/settings/repositories/reload`,{method:"post"})).json();a.success?(n.value.repositories=a.repositories,d.value.reload="success"):(await f({title:"Reloading settings failed",message:a.error}),d.value.reload="error")}catch{await f({title:"Reloading settings failed",message:"An error occurred while reloading the settings."}),d.value.reload="error"}T.reload&&clearTimeout(T.reload),T.reload=setTimeout(()=>d.value.reload=null,2e3)}return(a,e)=>(i(),r("div",M,[e[21]||(e[21]=s("h1",null,"Settings",-1)),e[22]||(e[22]=s("h3",null,"Repositories",-1)),(i(!0),r(k,null,U(n.value.repositories,t=>(i(),W(E,null,{title:$(()=>[_(V(t.short_name)+" ("+V(t.full_name)+") ",1)]),buttons:$(()=>[s("button",{disabled:o(m)||!n.value.changing_startup_allowed,class:"btn btn-primary btn-sm",onClick:l=>O(t)},[n.value.startup_repositories.indexOf(t.full_name)>=0?(i(),r(k,{key:0},[e[1]||(e[1]=s("i",{class:"fa fa-square-check"},null,-1)),e[2]||(e[2]=_(" Loaded on startup ",-1))],64)):(i(),r(k,{key:1},[e[3]||(e[3]=s("i",{class:"fa fa-square"},null,-1)),e[4]||(e[4]=_(" Not loaded on startup ",-1))],64))],8,z),n.value.loading_new_allowed?(i(),r("button",{key:0,disabled:o(m),class:"btn btn-danger btn-sm btn-circle",onClick:l=>{l.stopPropagation(),R(t)}},[s("i",{class:v([o(h)===t.full_name?["fa-spinner","fa-spin"]:["fa-trash"],"fa"])},null,2)],8,G)):x("",!0)]),body:$(()=>[e[13]||(e[13]=s("h6",null,"Core settings",-1)),s("div",H,[e[5]||(e[5]=s("span",{class:"input-group-text"},"ID Length",-1)),b(s("input",{"onUpdate:modelValue":l=>t.id_digits=l,class:"form-control",type:"number"},null,8,K),[[y,t.id_digits]])]),s("div",Q,[e[6]||(e[6]=s("span",{class:"input-group-text"},"Main branch",-1)),b(s("input",{"onUpdate:modelValue":l=>t.main_branch=l,class:"form-control",type:"text"},null,8,X),[[y,t.main_branch]])]),e[14]||(e[14]=s("h6",null,"Release",-1)),s("div",Y,[e[7]||(e[7]=s("span",{class:"input-group-text"},"Released OWL file",-1)),b(s("input",{"onUpdate:modelValue":l=>t.release_file=l,class:"form-control",type:"text"},null,8,Z),[[y,t.release_file]])]),s("div",ee,[e[8]||(e[8]=s("span",{class:"input-group-text"},"Released script",-1)),b(s("input",{"onUpdate:modelValue":l=>t.release_script_path=l,class:"form-control",type:"text"},null,8,se),[[y,t.release_script_path]])]),e[15]||(e[15]=s("h6",null,"Subontologies",-1)),e[16]||(e[16]=s("p",{class:"text-body-secondary"}," To generate hierarchical spreadsheets ",-1)),(i(!0),r(k,null,U(t.subontologies,l=>(i(),r("div",te,[e[10]||(e[10]=s("span",{class:"input-group-text"},"Excel",-1)),b(s("input",{"onUpdate:modelValue":p=>l.excel_file=p,class:"form-control",type:"text"},null,8,le),[[y,l.excel_file]]),e[11]||(e[11]=s("span",{class:"input-group-text"},"Released",-1)),b(s("input",{"onUpdate:modelValue":p=>l.release_file=p,class:"form-control",type:"text"},null,8,ae),[[y,l.release_file]]),s("button",{disabled:o(m),class:"btn btn-danger",onClick:p=>t.subontology=t.subontologies.filter(S=>S!=l)},[...e[9]||(e[9]=[s("i",{class:"fa fa-trash"},null,-1)])],8,oe)]))),256)),e[17]||(e[17]=s("h6",null,"Workflows",-1)),e[18]||(e[18]=s("p",{class:"text-body-secondary"}," Install github workflows in this repository ",-1)),s("button",{class:v([{"btn-success":o(u)==="success","btn-danger":o(u)==="error"},"btn btn-primary btn-sm"]),disabled:o(m),onClick:l=>L("externals",t)},[o(u)==="busy"?(i(),r("i",ie)):x("",!0),o(u)==="success"?(i(),r("i",re)):x("",!0),o(u)==="error"?(i(),r("i",ue)):(i(),r("i",de)),e[12]||(e[12]=_(" Automatically build externals owl file ",-1))],10,ne)]),_:2},1024))),256)),s("div",pe,[n.value.loading_new_allowed?(i(),r("button",{key:0,disabled:o(m),class:"mb-3 btn btn-sm btn-primary add-file",onClick:N},[s("i",{class:v([o(w)?["fa-spinner","fa-spin"]:["fa-add"],"fa"])},null,2),e[19]||(e[19]=_(" Load repository ",-1))],8,fe)):x("",!0),s("button",{class:v([[{success:"btn-success",null:"btn-primary",error:"btn-danger"}[o(d).reload]],"mb-3 btn btn-sm btn-primary add-file"]),disabled:o(m)||o(d).reload==="loading",onClick:e[0]||(e[0]=t=>D())},[s("i",{class:v([{success:["fa-check"],error:["fa-cross"],loading:["fa-spinner","fa-spin"]}[o(d).reload]??["fa-refresh"],"fa"])},null,2),e[20]||(e[20]=_(" Reload settings ",-1))],10,ce),B(a.$slots,"buttons",{},void 0,!0)])]))}}),ge=J(me,[["__scopeId","data-v-064e11eb"]]),j=I(ge);j.config.globalProperties.$filters=q;j.mount("#vue-app-settings");