From 87352b15bbcdea57eb181daded6625480b3d7eb6 Mon Sep 17 00:00:00 2001 From: omrips Date: Sun, 5 Jul 2020 16:00:11 +0300 Subject: [PATCH] Add files via upload fixed download files issue and TextDecoder polyfill for IE / Edge --- src/ie_polyfills.js | 48 +++++++++++++++++++++++++++++++++++++++++++++ src/stl_viewer.js | 45 +++++++++++++++++++++++++++++++++++------- 2 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 src/ie_polyfills.js diff --git a/src/ie_polyfills.js b/src/ie_polyfills.js new file mode 100644 index 0000000..4b5ef42 --- /dev/null +++ b/src/ie_polyfills.js @@ -0,0 +1,48 @@ +if (!String.prototype.repeat) { + String.prototype.repeat = function(count) { + 'use strict'; + if (this == null) { + throw new TypeError('can\'t convert ' + this + ' to object'); + } + var str = '' + this; + count = +count; + if (count != count) { + count = 0; + } + if (count < 0) { + throw new RangeError('repeat count must be non-negative'); + } + if (count == Infinity) { + throw new RangeError('repeat count must be less than infinity'); + } + count = Math.floor(count); + if (str.length == 0 || count == 0) { + return ''; + } + // Ensuring count is a 31-bit integer allows us to heavily optimize the + // main part. But anyway, most current (August 2014) browsers can't handle + // strings 1 << 28 chars or longer, so: + if (str.length * count >= 1 << 28) { + throw new RangeError('repeat count must not overflow maximum string size'); + } + var rpt = ''; + for (;;) { + if ((count & 1) == 1) { + rpt += str; + } + count >>>= 1; + if (count == 0) { + break; + } + str += str; + } + // Could we try: + // return Array(count + 1).join(this); + return rpt; + } +} + +'use strict';(function(e){function r(b){var a=b.charCodeAt(0),c=1114112,d=0,n=b.length|0,g="";switch(a>>>4){case 12:case 13:c=(a&31)<<6|b.charCodeAt(1)&63;d=128>c?0:2;break;case 14:c=(a&15)<<12|(b.charCodeAt(1)&63)<<6|b.charCodeAt(2)&63;d=2048>c?0:3;break;case 15:30===a>>>3&&(c=(a&7)<<18|(b.charCodeAt(1)&63)<<12|(b.charCodeAt(2)&63)<<6|b.charCodeAt(3),d=65536>c?0:4)}d&&(nc?g=f(c):1114112>c?(c=c-65664|0,g=f((c>>>10)+55296|0,(c&1023)+56320|0)):d=0);for(;d=a)if(b=b.charCodeAt(1)|0,56320<=b&&57343>=b){if(a=(a<<10)+b-56613888|0,65535>>18,128|a>>>12&63,128|a>>>6&63,128|a&63)}else a=65533;return 2047>=a?f(192|a>>>6,128|a&63):f(224|a>>>12,128|a>>>6&63,128|a&63)}function q(){}var f=String.fromCharCode,l={}.toString,h=e.SharedArrayBuffer,u=h?l.call(h):"",k=e.Uint8Array,m=k||Array,v=l.call((k?ArrayBuffer:m).prototype);h=q.prototype;var w=e.TextEncoder;p.prototype.decode= +function(b){var a=b&&b.buffer||b,c=l.call(a);if(c!==v&&c!==u&&void 0!==b)throw TypeError("Failed to execute 'decode' on 'TextDecoder': The provided value is not of type '(ArrayBuffer or ArrayBufferView)'");b=k?new m(a):a;a="";c=0;for(var d=b.length|0;c=0) download_name=download_name.substring( 0, p ); if (download_name.length<1) download_name='1'; + if (window.navigator.msSaveOrOpenBlob) + { + //only for IE + window.navigator.msSaveBlob(blob, download_name+'.vsj'); + return; + } + link.download = download_name+'.vsj'; link.click(); } @@ -1216,6 +1229,7 @@ function StlViewer(parent_element_obj, options) .then(function(content) { var blob = new Blob([content], {type: "application/zip"}); + var link = document.createElement("a"); link.href = window.URL.createObjectURL(blob); var download_name=filename?filename:"1"; @@ -1223,6 +1237,14 @@ function StlViewer(parent_element_obj, options) if (p>=0) download_name=download_name.substring( 0, p ); if (download_name.length<1) download_name='1'; + if (window.navigator.msSaveOrOpenBlob) + { + //only for IE + window.navigator.msSaveBlob(blob, download_name+'.vsb'); + return; + } + + link.download = download_name+'.vsb'; link.click(); }); @@ -1338,11 +1360,20 @@ function StlViewer(parent_element_obj, options) var blob = new Blob([_this.get_stl_bin(model_id)], {type: "application/sla"}); var link = document.createElement("a"); link.href = window.URL.createObjectURL(blob); - var download_name=filename?filename:(model.filename?model.filename:(model.local_file?model.local_file.name:"1")); + //var download_name=filename?filename:(model.filename?model.filename:(model.local_file?model.local_file.name:"1")); + var download_name=_this.get_model_filename(model,true); + console.log(download_name); var p=download_name.toLowerCase().indexOf('.stl'); if (p>=0) download_name=download_name.substring( 0, p ); if (download_name.length<1) download_name='1'; + if (window.navigator.msSaveOrOpenBlob) + { + //only for IE + window.navigator.msSaveBlob(blob, download_name+'.stl'); + return; + } + link.download = download_name+'.stl'; link.click(); }