Skip to content

Commit

Permalink
Merge pull request #10036 from KlausBenndorf/codesandbox-edit-data
Browse files Browse the repository at this point in the history
uploading local resources to codesandbox
  • Loading branch information
ahocevar committed Sep 26, 2019
2 parents 76955d7 + 42d8ea3 commit 7a28457
Showing 1 changed file with 64 additions and 17 deletions.
81 changes: 64 additions & 17 deletions examples/resources/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,31 +20,78 @@
e.clearSelection();
});

function fetchResource(resource) {
return new Promise((resolve, reject) => {
const isImage = /\.(png|jpe?g|gif|tiff)$/.test(resource);
const xhr = new XMLHttpRequest();
xhr.open('GET', resource);
if (isImage) {
xhr.responseType = 'blob';
} else {
xhr.responseType = 'text';
}
xhr.addEventListener('load', () => {
if (isImage) {
const a = new FileReader();
a.addEventListener('load', e => {
resolve ({
isBinary: true,
content: e.target.result
})
});
a.readAsDataURL(xhr.response);
} else {
resolve ({
content: xhr.response
})
}
});
xhr.addEventListener('error', reject);
xhr.send();
})
}

var codepenButton = document.getElementsByClassName('codepen-button')[0];
if (codepenButton) {
codepenButton.onclick = function(event) {
event.preventDefault();
var form = document.getElementById('codepen-form');
const html = document.getElementById('example-html-source').innerText;
const js = document.getElementById('example-js-source').innerText;
const pkgJson = document.getElementById('example-pkg-source').innerText;
form.parameters.value = compress({
files: {
'index.html': {
content: html
},
'index.js': {
content: js
},
"package.json": {
content: pkgJson
},
'sandbox.config.json': {
content: '{"template": "parcel"}'
const form = document.getElementById('codepen-form');

const localResources = (js.match(/'data\/[^']*/g) || [])
.concat(js.match(/'resources\/[^']*/g) || [])
.map(f => f.slice(1));

const promises = localResources.map(resource => fetchResource(resource));

Promise.all(promises)
.then(results => {
const data = {
files: {
'index.html': {
content: html
},
'index.js': {
content: js
},
"package.json": {
content: pkgJson
},
'sandbox.config.json': {
content: '{"template": "parcel"}'
}
}
};

for (let i = 0; i < localResources.length; i++) {
data.files[localResources[i]] = results[i];
}
}
});
form.submit();

form.parameters.value = compress(data);
form.submit();
});
};
}
})();

0 comments on commit 7a28457

Please sign in to comment.