| 1 |
function ticketFileUpload(inputId, nonce) { |
| 2 |
var input = document.getElementById(inputId); |
| 3 |
if (!input) return; |
| 4 |
|
| 5 |
var wrapper = input.closest('.ticket-file-upload'); |
| 6 |
var previews = wrapper.querySelector('.ticket-file-upload__previews'); |
| 7 |
|
| 8 |
input.addEventListener('change', function () { |
| 9 |
var file = this.files[0]; |
| 10 |
if (!file) return; |
| 11 |
this.value = ''; |
| 12 |
|
| 13 |
var objectUrl = URL.createObjectURL(file); |
| 14 |
var item = document.createElement('div'); |
| 15 |
item.className = 'ticket-file-upload__preview-item ticket-file-upload__preview-item--loading'; |
| 16 |
item.innerHTML = |
| 17 |
'<img src="' + objectUrl + '" class="ticket-file-upload__preview-img" alt="">' + |
| 18 |
'<div class="ticket-file-upload__preview-info">' + |
| 19 |
'<span class="ticket-file-upload__preview-name">' + file.name + '</span>' + |
| 20 |
'<span class="ticket-file-upload__preview-status">در حال آپلود...</span>' + |
| 21 |
'</div>' + |
| 22 |
'<button type="button" class="ticket-file-upload__preview-remove" aria-label="حذف">×</button>'; |
| 23 |
|
| 24 |
previews.appendChild(item); |
| 25 |
|
| 26 |
item.querySelector('.ticket-file-upload__preview-remove').addEventListener('click', function () { |
| 27 |
URL.revokeObjectURL(objectUrl); |
| 28 |
item.remove(); |
| 29 |
}); |
| 30 |
|
| 31 |
var fd = new FormData(); |
| 32 |
fd.append('action', 'upload_ticket_media'); |
| 33 |
fd.append('_wpnonce', nonce); |
| 34 |
fd.append('file', file); |
| 35 |
|
| 36 |
fetch(ajaxurl, { method: 'POST', body: fd }) |
| 37 |
.then(function (r) { return r.json(); }) |
| 38 |
.then(function (res) { |
| 39 |
item.classList.remove('ticket-file-upload__preview-item--loading'); |
| 40 |
var statusEl = item.querySelector('.ticket-file-upload__preview-status'); |
| 41 |
if (res.success) { |
| 42 |
item.classList.add('ticket-file-upload__preview-item--done'); |
| 43 |
statusEl.textContent = 'آپلود شد'; |
| 44 |
var hidden = document.createElement('input'); |
| 45 |
hidden.type = 'hidden'; |
| 46 |
hidden.name = 'file_ids[]'; |
| 47 |
hidden.value = res.data.file_id; |
| 48 |
item.appendChild(hidden); |
| 49 |
} else { |
| 50 |
item.classList.add('ticket-file-upload__preview-item--error'); |
| 51 |
statusEl.textContent = (res.data && res.data.message) ? res.data.message : 'خطا در آپلود'; |
| 52 |
} |
| 53 |
}) |
| 54 |
.catch(function () { |
| 55 |
item.classList.remove('ticket-file-upload__preview-item--loading'); |
| 56 |
item.classList.add('ticket-file-upload__preview-item--error'); |
| 57 |
item.querySelector('.ticket-file-upload__preview-status').textContent = 'خطا در آپلود'; |
| 58 |
}); |
| 59 |
}); |
| 60 |
} |
| 61 |
|