Files
atakanozbancom/web_atakanozbancom/assets/js/paste-upload.js
T

76 lines
2.8 KiB
JavaScript
Raw Normal View History

var PasteImageModal = (function () {
var bsModal, targetEl, previewEl, defaultText;
var currentInputSelector, currentPreviewSelector;
function init() {
var modalEl = document.getElementById('pasteImageModal');
if (!modalEl || typeof bootstrap === 'undefined') return false;
targetEl = document.getElementById('pasteImageTarget');
previewEl = document.getElementById('pasteImageModalPreview');
defaultText = targetEl.textContent;
bsModal = new bootstrap.Modal(modalEl);
modalEl.addEventListener('shown.bs.modal', function () {
targetEl.textContent = defaultText;
previewEl.style.display = 'none';
previewEl.removeAttribute('src');
targetEl.focus();
});
targetEl.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) {
e.preventDefault();
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 input = document.querySelector(currentInputSelector);
if (input) {
var dt = new DataTransfer();
dt.items.add(pastedFile);
input.files = dt.files;
input.dispatchEvent(new Event('change', { bubbles: true }));
}
var url = URL.createObjectURL(pastedFile);
previewEl.src = url;
previewEl.style.display = '';
targetEl.textContent = 'Image pasted!';
if (currentPreviewSelector) {
var extPreview = document.querySelector(currentPreviewSelector);
if (extPreview) {
extPreview.src = url;
extPreview.style.display = '';
}
}
setTimeout(function () { bsModal.hide(); }, 400);
break;
}
}
});
return true;
}
function open(inputSelector, previewSelector) {
if (!bsModal && !init()) return;
currentInputSelector = inputSelector;
currentPreviewSelector = previewSelector || null;
bsModal.show();
}
return { open: open };
})();