38 lines
1.4 KiB
JavaScript
38 lines
1.4 KiB
JavaScript
|
|
function enablePasteUpload(inputSelector, previewSelector) {
|
||
|
|
var input = document.querySelector(inputSelector);
|
||
|
|
if (!input) return;
|
||
|
|
|
||
|
|
document.addEventListener('paste', function (e) {
|
||
|
|
var clipboard = e.clipboardData || window.clipboardData;
|
||
|
|
var items = clipboard ? clipboard.items : null;
|
||
|
|
if (!items) return;
|
||
|
|
|
||
|
|
for (var i = 0; i < items.length; i++) {
|
||
|
|
var item = items[i];
|
||
|
|
if (item.kind === 'file' && item.type.indexOf('image/') === 0) {
|
||
|
|
var blob = item.getAsFile();
|
||
|
|
if (!blob) continue;
|
||
|
|
|
||
|
|
var ext = (blob.type.split('/')[1] || 'png').toLowerCase();
|
||
|
|
var pastedFile = new File([blob], 'pasted-image-' + Date.now() + '.' + ext, { type: blob.type });
|
||
|
|
|
||
|
|
var dt = new DataTransfer();
|
||
|
|
dt.items.add(pastedFile);
|
||
|
|
input.files = dt.files;
|
||
|
|
input.dispatchEvent(new Event('change', { bubbles: true }));
|
||
|
|
|
||
|
|
if (previewSelector) {
|
||
|
|
var preview = document.querySelector(previewSelector);
|
||
|
|
if (preview) {
|
||
|
|
preview.src = URL.createObjectURL(pastedFile);
|
||
|
|
preview.style.display = '';
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
e.preventDefault();
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|