Initial import

This commit is contained in:
Admin Nasledstvo
2026-05-01 20:52:04 +03:00
commit ac168868ee
10028 changed files with 2337954 additions and 0 deletions
@@ -0,0 +1,193 @@
class DocumentsModule {
documentRow() {
return `
<td>
<select oninput="updateInput(this)" data-input="document_type">
<option value=""></option>
<option value="pptx">Презентация (pptx)</option>
<option value="pdf">Документ (pdf)</option>
<option value="docx">Документ (docx)</option>
<option value="xlsx">Таблица (xlsx)</option>
<option value="other">Други</option>
</select>
</td>
<td><input oninput="updateInput(this)" data-input="name"></td>
<td><input oninput="updateInput(this)" data-input="name_en"></td>
<td class="ct"><button class="btn-ib btn-default" data-upload-field="file_name" onclick="attachAndUploadFile(this)"><i class="la la-file-upload"></i> Качи файл</button></td>
<td class="ct"><button class="btn-ib btn-default" data-upload-field="file_name_en" onclick="attachAndUploadFile(this)"><i class="la la-file-upload"></i> Качи файл</button></td>
<td><button onclick="deleteDocument(this)" class="btn btn-red btn-ico center"><i class="la la-trash font-20"></i></button></td>
`;
}
addDocument(documentKey, modelClass, modelId) {
const
tbody = document.querySelector('.docs-table tbody'),
tr = document.createElement('tr')
tr.innerHTML = this.documentRow()
this.generateRows();
this.postRequest('/file/document-add/', {documentKey, modelClass, modelId}, r => {
console.log(r)
if (r.document_id)
tr.setAttribute('data-document-id', r.document_id)
})
if (tbody.querySelector('tr.empty')) {
tbody.innerHTML = ''
tbody.appendChild(tr)
} else {
const first = tbody.querySelector('tr:first-child');
tbody.insertBefore(tr, first)
}
}
postRequest(url, data, done) {
const xhr = new XMLHttpRequest();
xhr.responseType = 'json'
xhr.open('post', url)
xhr.onload = () => {
done(xhr.response)
}
xhr.send(JSON.stringify(data));
}
getRequest(url, data, done) {
data = data || {}
let query = [];
Object.keys(data).forEach(d => {
query.push(d + '=' + data[d])
})
if (query.length > 0) url = `${url}?${query.join('&')}`
const xhr = new XMLHttpRequest();
xhr.responseType = 'json'
xhr.open('get', url)
xhr.onload = () => {
done(xhr.response)
}
xhr.send();
}
uploadFile(url, data, done) {
data = data || {}
const formData = new FormData();
Object.keys(data).forEach(d => {
formData.append(d, data[d]);
})
const xhr = new XMLHttpRequest();
xhr.responseType = 'json'
xhr.open('post', url)
xhr.onload = () => {
done(xhr.response)
}
xhr.send(formData);
}
generateRows() {
document.querySelectorAll('[data-input]').forEach(e => {
this.updateInput(e)
})
}
updateInput(e) {
if (e.tagName === 'SELECT') {
e.addEventListener('change', () => {
let id = e.parentNode.parentNode.dataset.documentId;
this.postRequest('/file/document-update/', {id: id, key: e.dataset.input, value: e.value}, done => {
})
})
}
if (e.tagName === 'INPUT') {
e.addEventListener('keypress', () => {
let id = e.parentNode.parentNode.dataset.documentId;
this.postRequest('/file/document-update/', {id: id, key: e.dataset.input, value: e.value}, done => {
})
})
}
}
}
const documentObject = new DocumentsModule();
function addDocument(e) {
documentObject.addDocument(e.dataset.documentKey, e.dataset.modelClass, e.dataset.modelId)
}
function updateInput(e) {
documentObject.updateInput(e)
}
function attachAndUploadFile(e) {
const fileInput = document.createElement('input')
fileInput.setAttribute('type', 'file')
fileInput.addEventListener('change', () => {
let id = e.parentNode.parentNode.dataset.documentId;
let update = e.dataset.uploadField;
let file = fileInput.files[0];
let tdContainer = e.parentNode;
documentObject.uploadFile('/file/document-file-upload/', {
id,
update,
file
}, data => {
console.log(data);
if(data.id && data.file_path) {
if (update === 'file_name') {
tdContainer.innerHTML = `<a href="${data.file_path}" class="download-link"><span class="extension"><i class="la la-download"></i> ${data.extension} сваляне</span></a>
<span data-document-id="${id}" data-delete-field="file_name" onclick="deleteUploadedFile(this)" class="delete-link"><span class="extension"><i class="la la-trash"></i> изтриване</span></span>`;
} else if (update === 'file_name_en') {
tdContainer.innerHTML = `<a href="${data.file_path}" class="download-link"><span class="extension"><i class="la la-download"></i> ${data.extension} сваляне</span></a>
<span data-document-id="${id}" data-delete-field="file_name_en" onclick="deleteUploadedFile(this)" class="delete-link"><span class="extension"><i class="la la-trash"></i> изтриване</span></span>`;
}
flash.success('Файлът е качен');
} else {
flash.error('Грешка при качване на файла');
}
})
})
fileInput.click()
}
function deleteUploadedFile(e) {
let td = e.parentNode;
let id = e.dataset.documentId;
let deleteField = e.dataset.deleteField;
modal.confirm('Сигурни ли сте, че искате да изтриете този файл?', function () {
documentObject.postRequest('/file/document-file-delete/', {id, deleteField}, done => {
td.innerHTML = `<button class="btn-ib btn-default" data-upload-field="${deleteField}" onclick="attachAndUploadFile(this)"><i class="la la-file-upload"></i> Качи файл</button>`
flash.success('Файлът е изтрит');
})
})
}
function deleteDocument(e) {
let id = e.parentNode.parentNode.dataset.documentId;
console.log(id);
if(id) {
modal.confirm('Сигурни ли сте, че искате да изтриете този документ?', function () {
let tr = e.parentNode.parentNode;
documentObject.postRequest('/file/document-delete/', {id}, done => {
tr.remove();
flash.success('Документът е изтрит');
let rows = document.querySelectorAll('.docs-table tbody tr');
if(rows.length === 0) {
let tbody = document.querySelector('.docs-table tbody');
tbody.innerHTML =
`<tr class="empty">
<td colspan="7" class="ct p20" style="">
<strong>Няма добавени документи</strong>
</td>
</tr>`;
}
})
})
}
}
document.addEventListener('DOMContentLoaded', () => {
documentObject.generateRows()
})