X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=js%2Fkivi.js;h=a76ad8a99ad70b56d6ee32ef752eff2d95882537;hb=0b36b2259c1300ee5360a9c8d5aee1f321abd364;hp=4448921178dd20dfc5a4961d3416854433e23cf5;hpb=7f414d7b101046679e311f35c849a9ecfe60a538;p=kivitendo-erp.git diff --git a/js/kivi.js b/js/kivi.js index 444892117..a76ad8a99 100644 --- a/js/kivi.js +++ b/js/kivi.js @@ -558,6 +558,39 @@ namespace("kivi", function(ns) { return undefined; }; + ns.save_file = function(base64_data, content_type, size, attachment_name) { + // atob returns a unicode string with one codepoint per octet. revert this + const b64toBlob = (b64Data, contentType='', sliceSize=512) => { + const byteCharacters = atob(b64Data); + const byteArrays = []; + + for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) { + const slice = byteCharacters.slice(offset, offset + sliceSize); + + const byteNumbers = new Array(slice.length); + for (let i = 0; i < slice.length; i++) { + byteNumbers[i] = slice.charCodeAt(i); + } + + const byteArray = new Uint8Array(byteNumbers); + byteArrays.push(byteArray); + } + + const blob = new Blob(byteArrays, {type: contentType}); + return blob; + } + + var blob = b64toBlob(base64_data, content_type); + var a = $(""); + var url = window.URL.createObjectURL(blob); + a.attr("href", url); + a.attr("download", attachment_name); + $("body").append(a); + a[0].click(); + window.URL.revokeObjectURL(url); + a.remove(); + } + ns.detect_duplicate_ids_in_dom = function() { var ids = {}, found = false;