@@ -194,59 +215,88 @@ class CCPMethodList2 extends HTMLElement{
}, {})
}
- importMethods(files){
- if(files && files.length) {
- let formdata = new FormData();
- files.reduce((formdata, f)=>{
- formdata.append("files[]", f)
- return formdata
- }, formdata)
- this.#boot.secureFetch(`${this.#serviceurl}/methods`, { body: formdata, method : "POST"})
- .then(reply=>{
- if (reply.status !== 200) {
- throw "Unable to import"
- }else return reply.text()
- }).then(data=>{
- this.refreshExecutions()
- }).catch(err=>{ alert(err) })
- }
+ exportCategory(category){
+ Promise.all(
+ this.#filtered[category].map(m=>this.exportMethod(m.id))
+ )
+ }
+
+ exportMethod(method){
+ this.#boot.secureFetch(this.#serviceurl + "/methods/" + method + "/shareable").then(
+ (resp)=>{
+ if(resp.status === 200){
+ return resp.json()
+ }else throw "Error exporting sharable process: " + resp.status
+ }
+ ).then(data=>{
+ const filename = data.title + "-" + data.version + ".json"
+ const datastr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(data));
+ var tmplnk = document.createElement("a")
+ tmplnk.download = filename
+ tmplnk.href = datastr
+ document.body.appendChild(tmplnk)
+ tmplnk.click()
+ document.body.removeChild(tmplnk)
+ }).catch(err=>{
+ console.log(err)
+ })
+ }
+
+ importMethods(files){
+ if(files && files.length) {
+ let formdata = new FormData();
+ files.reduce((formdata, f)=>{
+ formdata.append("files[]", f)
+ return formdata
+ }, formdata)
+ this.#boot.secureFetch(`${this.#serviceurl}/methods`, { body: formdata, method : "POST"})
+ .then(reply=>{
+ if (reply.status !== 200) {
+ throw "Unable to import"
+ }else return reply.text()
+ }).then(data=>{
+ this.updateList()
+ }).catch(err=>{ alert(err) })
+ }
}
#process_list_bss = {
template : "#PROCESS_LIST_TEMPLATE",
target : "ul[name=process_category_list]",
"in" : this,
- on_dragover : (ev)=>{
- ev.preventDefault()
- },
- on_dragenter : (ev)=>{
- ev.target.classList.toggle("border-info")
- },
- on_dragleave : (ev)=>{
- ev.target.classList.toggle("border-info")
- },
- on_drop : (ev)=>{
- if(ev.dataTransfer && ev.dataTransfer.files && ev.dataTransfer.files.length){
- const files = Array.prototype.slice.call(ev.dataTransfer.files)
- const zips = files.filter(f=>f.type === "application/json")
- if(confirm("Confirm import of method files?")){
- this.importMethods(files)
- }
- }
- ev.target.classList.toggle("border-info")
- },
+ on_dragover : (ev)=> ev.preventDefault(),
+ on_dragenter : (ev)=> ev.target.classList.toggle("border-info"),
+ on_dragleave : (ev)=> ev.target.classList.toggle("border-info"),
+ on_drop : (ev)=>{
+ if(ev.dataTransfer && ev.dataTransfer.files && ev.dataTransfer.files.length){
+ const files = Array.prototype.slice.call(ev.dataTransfer.files)
+ const jsons = files.filter(f=>f.type === "application/json")
+ if(confirm("Confirm import of method files?")){
+ this.importMethods(files)
+ }
+ ev.preventDefault()
+ ev.stopPropagation()
+ }
+ ev.target.classList.toggle("border-info")
+ },
recurse : [
{
- target : "li",
+ target : "li.ccp-process-category",
"in" : (e,d)=>Object.keys(this.#filtered),
+ on_click : ev=>{
+ if(ev.target.getAttribute("name") === "export_category"){
+ this.exportCategory(ev.currentTarget.bss_input.data)
+ }
+ },
recurse : [
{
- target : "summary > h5",
+ target : "summary",
apply : (e,d)=>{
const executables = this.#filtered[d].filter(m=>m.executable).length
- e.innerHTML = `
- ${d} ${this.#filtered[d].length - executables}
- ${executables}` }
+ e.querySelector("h5").textContent = d
+ e.querySelector("span[name=count_notexecutables]").textContent = this.#filtered[d].length - executables
+ e.querySelector("span[name=count_executables]").textContent = executables
+ }
},
{
target : "details ul[name=process_list]",
@@ -255,6 +305,11 @@ class CCPMethodList2 extends HTMLElement{
{
target : "li.ccp-process",
"in" : (e,d)=>this.#filtered[d],
+ on_click : ev=>{
+ if(ev.target.getAttribute("name") === "export_method"){
+ this.exportMethod(ev.currentTarget.bss_input.data.id)
+ }
+ },
on_dragstart : ev=>{
ev.dataTransfer.effectAllowed = 'move'
ev.dataTransfer.setData('text/html', ev.currentTarget.innerHTML)