diff --git a/frontend/package.json b/frontend/package.json index 26eabfaa98b868937689e423ba821b8b708d3f3b..3cb7fbbd3ebed9f20fda68fa6336a95cf695e562 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,7 +17,9 @@ "bootstrap-vue": "^2.0.0", "cookieparser": "^0.1.0", "debounce": "^1.2.0", + "file-saver": "^2.0.2", "js-cookie": "^2.2.1", + "jszip": "^3.4.0", "nuxt": "^2.0.0", "nuxt-dropzone": "^1.0.4", "vue-json-viewer": "^2.2.11", diff --git a/frontend/pages/main/pascal.vue b/frontend/pages/main/pascal.vue index e5190986912531765329998a2a485b7a668653ad..4c104a4b385b903f30ba6e2f230e2db535ab957f 100644 --- a/frontend/pages/main/pascal.vue +++ b/frontend/pages/main/pascal.vue @@ -52,6 +52,8 @@ import pascalMethods from '~/mixins/outputs/pascalMethods' import Convert from 'xml-js' import Label from '~/components/label/Label' import Dropdown from '~/components/dropdown/Dropdown' +import JSZip from 'jszip' +import { saveAs } from 'file-saver' export default { components: { @@ -70,17 +72,22 @@ export default { methods: { async getPascalXML () { this.pascalJSON = {} - var newPascalJSON = {"annotation": []} var allImages = await this.getAllImages() if (allImages) { + // Generate zip file + var zip = new JSZip() + // Get information about labels var allLabels = await this.getAllLabel() + // These methods are available in mixins await this.setImagesAttr(allImages) await this.getObjectsAttr(allLabels) - console.log('pascal: ', this.pascalJSON) for (var key in this.pascalJSON) { - newPascalJSON["annotation"].push(this.pascalJSON[key]) + var xml = this.convertToXML(this.pascalJSON[key]) + zip.file(this.pascalJSON[key].filename + '.xml', xml) } - return newPascalJSON + zip.generateAsync({type:'blob'}).then((content) => { + saveAs(content, this.dataset) + }) } }, async setImagesAttr (allImages) { @@ -99,16 +106,7 @@ export default { return result }, async downloadXML() { - var filename = 'XMLFile.xml' - var element = document.createElement('a') - var newPascalJSON = await this.getPascalXML() - var xml = this.convertToXML(newPascalJSON) - element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(xml)) - element.setAttribute('download',filename) - element.style.display = 'none' - document.body.appendChild(element) - element.click() - document.body.removeChild(element) + await this.getPascalXML() } } }