uploading local resources to codesandbox
This commit is contained in:
@@ -20,31 +20,78 @@
|
|||||||
e.clearSelection();
|
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];
|
var codepenButton = document.getElementsByClassName('codepen-button')[0];
|
||||||
if (codepenButton) {
|
if (codepenButton) {
|
||||||
codepenButton.onclick = function(event) {
|
codepenButton.onclick = function(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
var form = document.getElementById('codepen-form');
|
|
||||||
const html = document.getElementById('example-html-source').innerText;
|
const html = document.getElementById('example-html-source').innerText;
|
||||||
const js = document.getElementById('example-js-source').innerText;
|
const js = document.getElementById('example-js-source').innerText;
|
||||||
const pkgJson = document.getElementById('example-pkg-source').innerText;
|
const pkgJson = document.getElementById('example-pkg-source').innerText;
|
||||||
form.parameters.value = compress({
|
const form = document.getElementById('codepen-form');
|
||||||
files: {
|
|
||||||
'index.html': {
|
const localResources = (js.match(/'data\/[^']*/g) || [])
|
||||||
content: html
|
.concat(js.match(/'resources\/[^']*/g) || [])
|
||||||
},
|
.map(f => f.slice(1));
|
||||||
'index.js': {
|
|
||||||
content: js
|
const promises = localResources.map(resource => fetchResource(resource));
|
||||||
},
|
|
||||||
"package.json": {
|
Promise.all(promises)
|
||||||
content: pkgJson
|
.then(results => {
|
||||||
},
|
const data = {
|
||||||
'sandbox.config.json': {
|
files: {
|
||||||
content: '{"template": "parcel"}'
|
'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.parameters.value = compress(data);
|
||||||
form.submit();
|
form.submit();
|
||||||
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|||||||
Reference in New Issue
Block a user