diff --git a/app/file_handler.ts b/app/file_handler.ts index 1796197..ece380f 100644 --- a/app/file_handler.ts +++ b/app/file_handler.ts @@ -1,16 +1,18 @@ export class FileHandler { - public static ProcessImages = (fileList: FileList): Promise => { + public static ProcessImages = (fileList: FileList): Promise<[string[], string[]]> => { return new Promise(async (resolve, reject) => { - const filenames: string[] = []; + const processedFilenames: string[] = []; + const originalFilenames: string[] = []; for (let i = 0; i < fileList.length; i++) { const file = fileList[i]; const filename = await FileHandler.ProcessImage(file); - filenames.push(filename); + processedFilenames.push(filename); + originalFilenames.push(file.name); } - resolve(filenames); + resolve([ processedFilenames, originalFilenames ]); }); }; diff --git a/app/page.ts b/app/page.ts index 2677a2f..ffdf966 100644 --- a/app/page.ts +++ b/app/page.ts @@ -69,6 +69,11 @@ export class Page { info.classList.toggle('hidden'); }); + const exportButton = document.getElementById('exportButton') as HTMLElement; + exportButton.addEventListener('click', () => { + this.ExportData(); + }); + this.outputMessage = document.getElementById('outputMessage') as HTMLElement; this.message = document.getElementById('message') as HTMLElement; @@ -190,27 +195,7 @@ export class Page { case 83: { if (document.activeElement === document.body) { - this.pinHandler.UpdateAnimationPinNames(); - - if (this.ProjectHasNeccesaryData()) { - const zip = new JSZip(); - // name of project - const name = this.filenameInput.value; - // .anim file - zip.file(name + '.anim', JSON.stringify(this.animationData)); - // pngs - const filenames = this.frameHandler.GetFilenames(); - for (let i = 0; i < filenames.length; i++) { - const filedata = filenames[i].split('base64,')[1]; - const padding = i.toString().padStart(3, '0'); - zip.file(name + '_' + padding.toString() + '.png', filedata, { base64: true }); - } - // save zip - zip.generateAsync({ type: 'blob' }).then((content) => { - // see FileSaver.js - saveAs(content, name + '.zip'); - }); - } + this.ExportData(); } } } @@ -219,6 +204,30 @@ export class Page { document.addEventListener('keydown', keyDown); } + private ExportData() { + this.pinHandler.UpdateAnimationPinNames(); + + if (this.ProjectHasNeccesaryData()) { + const zip = new JSZip(); + // name of project + const name = this.filenameInput.value; + // .anim file + zip.file(name + '.anim', JSON.stringify(this.animationData)); + // pngs + const filenames = this.frameHandler.GetFilenames(); + for (let i = 0; i < filenames.length; i++) { + const filedata = filenames[i].split('base64,')[1]; + const padding = i.toString().padStart(3, '0'); + zip.file(name + '_' + padding.toString() + '.png', filedata, { base64: true }); + } + // save zip + zip.generateAsync({ type: 'blob' }).then((content) => { + // see FileSaver.js + saveAs(content, name + '.zip'); + }); + } + } + private ProjectHasNeccesaryData(): boolean { this.outputMessage.innerText = ''; this.outputMessage.classList.remove('errorMessage'); @@ -284,14 +293,14 @@ export class Page { event.stopPropagation(); event.preventDefault(); - const filenames = await FileHandler.ProcessImages(event.dataTransfer!.files); - this.frameHandler.loadFrames(filenames); + const [ processedFilenames, originalFilenames ] = await FileHandler.ProcessImages(event.dataTransfer!.files); + this.frameHandler.loadFrames(processedFilenames); const newFrames: IFrame[] = []; - for (let i = 0; i < filenames.length; i++) { + for (let i = 0; i < originalFilenames.length; i++) { newFrames.push({ - filename: i.toString() + filename: originalFilenames[i].toString() }); } @@ -301,7 +310,7 @@ export class Page { this.frameHandler.TogglePlayingAnimation(); const imageElement = new Image(); - imageElement.src = filenames[0]; + imageElement.src = processedFilenames[0]; imageElement.onload = () => { this.canvasHandler.ResizeCanvas(imageElement.width, imageElement.height); }; diff --git a/app/stylesheets/main.scss b/app/stylesheets/main.scss index 4f15b25..bb450b9 100644 --- a/app/stylesheets/main.scss +++ b/app/stylesheets/main.scss @@ -293,3 +293,16 @@ $pin-button-size: 75px; height: 15px; line-height: 15px; } + +#exportButton { + display: block; + margin: 0 auto; + margin-top: 20px; + width: 150px; + height: 50px; + line-height: 50px; + font-size: 30px; + text-align: center; + border: 1px solid; + border-radius: 5px; +} diff --git a/dist/index.html b/dist/index.html index 98c4adb..38e994b 100644 --- a/dist/index.html +++ b/dist/index.html @@ -9,6 +9,16 @@
?
+ +
@@ -41,15 +51,9 @@
+
-