From ab7e806b5cbb4d77d4da07cbc698eb94177c8602 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albert=20M=C3=B8ller=20Nielsen?= Date: Tue, 27 Sep 2022 00:35:16 +0200 Subject: [PATCH] STL load `fetch` rewrite --- src/kiri/platform.js | 4 ++-- src/load/stl.js | 48 +++++++++++++++++--------------------------- 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/src/kiri/platform.js b/src/kiri/platform.js index 3fced887..4a8ee309 100644 --- a/src/kiri/platform.js +++ b/src/kiri/platform.js @@ -328,7 +328,7 @@ function platformLoad(url, onload) { } } -function platformLoadSTL(url, onload, formdata) { +function platformLoadSTL(url, onload, formdata, credentials) { new load.STL().load(url, (vertices, filename) => { if (vertices) { let widget = newWidget().loadVertices(vertices); @@ -338,7 +338,7 @@ function platformLoadSTL(url, onload, formdata) { onload(vertices, widget); } } - }, formdata, 1 / api.view.unit_scale()); + }, formdata, 1 / api.view.unit_scale(), credentials); } function platformLoadURL(url, options = {}) { diff --git a/src/load/stl.js b/src/load/stl.js index d5b352c9..6d8a5713 100644 --- a/src/load/stl.js +++ b/src/load/stl.js @@ -23,39 +23,27 @@ function STL() { this.colors = null; } -SP.load = function(url, callback, formdata, scale) { - let stl = this, - xhr = new XMLHttpRequest(); +SP.load = function(url, callback, formdata, scale, credentials) { + const stl = this; - function onloaded (event) { - if (event.target.status === 200 || event.target.status === 0) { - stl.parse(event.target.response || event.target.responseText, scale); - let cd = undefined; - if (xhr.getAllResponseHeaders().indexOf(CDH) > 0) { - cd = xhr.getResponseHeader(CDH) - .split(';').map(v => v.trim()).filter(v => { - return v.indexOf('filename=') === 0; - }).map(v => { - return v.substring(10,v.length-1); - })[0]; - } - if (callback) callback(stl.vertices, cd); + fetch(url, { + method: formdata ? 'POST' : 'GET', + credentials: credentials ? credentials : 'same-origin', + body: formdata + }).then(response => { + if (response.status === 200 || response.status === 0) { + response.arrayBuffer().then(buffer => { + stl.parse(buffer, scale); + + const cdhVal = response.headers.get(CDH); + if (callback) callback(stl.vertices, cdhVal); + }); } else { - if (callback) callback(null, event.target.statusText); + if (callback) callback(null, response.statusText); } - } - - xhr.addEventListener('load', onloaded, false); - xhr.addEventListener('progress', function (event) { }, false); - xhr.addEventListener('error', function () { }, false); - - if (xhr.overrideMimeType) { - xhr.overrideMimeType('text/plain; charset=x-user-defined'); - } - - xhr.open(formdata ? 'POST' : 'GET', url, true); - xhr.responseType = 'arraybuffer'; - xhr.send(formdata); + }).catch(err => { + if (callback) callback(null, err) + }); }; SP.encode = function(vertices, normals) {