{% extends "base.html" %} {% block title %}Edycja ogloszenia - Norda Biznes Partner{% endblock %} {% block head_extra %} {% endblock %} {% block extra_css %} {% endblock %} {% block content %}
Powrót do ogłoszenia

Edytuj ogłoszenie

{% if classified.attachments %}
Istniejące zdjęcia (kliknij X aby usunąć):
{% for att in classified.attachments %}
{{ att.original_filename }}
{{ att.original_filename[:20] }}
{% endfor %}
{% endif %}
Dodaj nowe zdjęcia:

Przeciągnij obrazy lub kliknij tutaj (max 10 plików, JPG/PNG/GIF do 5MB)

📷 Dodaj zdjęcie z galerii

Anuluj
{% endblock %} {% block extra_js %} var quill = new Quill('#quill-editor', { theme: 'snow', placeholder: 'Opisz szczegółowo czego szukasz lub co oferujesz...', modules: { toolbar: [ ['bold', 'italic'], [{'list': 'ordered'}, {'list': 'bullet'}], ['link'], ['clean'] ] } }); quill.root.innerHTML = {{ classified.description|tojson }}; document.querySelector('form').addEventListener('submit', function(e) { var html = quill.root.innerHTML; if (html === '


' || quill.getText().trim() === '') { e.preventDefault(); alert('Wpisz treść ogłoszenia.'); quill.focus(); return; } document.getElementById('description').value = html; }); function toggleDeleteAttachment(attId) { var el = document.getElementById('existing-' + attId); var cb = document.getElementById('del-' + attId); if (cb.checked) { cb.checked = false; el.classList.remove('marked-for-delete'); } else { cb.checked = true; el.classList.add('marked-for-delete'); } } (function() { const dropzone = document.getElementById('dropzone'); if (!dropzone) return; const fileInput = document.getElementById('attachmentInput'); const previewsContainer = document.getElementById('previewsContainer'); const uploadCounter = document.getElementById('uploadCounter'); const MAX_FILES = 10; const MAX_SIZE = 5 * 1024 * 1024; const ALLOWED_TYPES = ['image/jpeg', 'image/png', 'image/gif']; let filesMap = new Map(); let fileIdCounter = 0; dropzone.addEventListener('click', () => fileInput.click()); dropzone.addEventListener('dragover', (e) => { e.preventDefault(); dropzone.classList.add('drag-over'); }); dropzone.addEventListener('dragleave', () => dropzone.classList.remove('drag-over')); dropzone.addEventListener('drop', (e) => { e.preventDefault(); dropzone.classList.remove('drag-over'); addFiles(Array.from(e.dataTransfer.files).filter(f => f.type.startsWith('image/'))); }); fileInput.addEventListener('change', (e) => { addFiles(Array.from(e.target.files)); fileInput.value = ''; }); function addFiles(newFiles) { const availableSlots = MAX_FILES - filesMap.size; if (availableSlots <= 0) return; newFiles.slice(0, availableSlots).forEach(file => { if (file.size > MAX_SIZE || !ALLOWED_TYPES.includes(file.type)) return; const fileId = 'file_' + (fileIdCounter++); filesMap.set(fileId, file); createPreview(fileId, file); }); updateCounter(); syncFilesToInput(); } function createPreview(fileId, file) { const preview = document.createElement('div'); preview.className = 'upload-preview-item'; preview.dataset.fileId = fileId; const img = document.createElement('img'); const info = document.createElement('div'); info.className = 'preview-info'; info.textContent = file.name.substring(0, 15) + (file.name.length > 15 ? '...' : '') + ' (' + formatFileSize(file.size) + ')'; const removeBtn = document.createElement('button'); removeBtn.type = 'button'; removeBtn.className = 'remove-preview'; removeBtn.innerHTML = '×'; removeBtn.onclick = () => { filesMap.delete(fileId); preview.remove(); updateCounter(); syncFilesToInput(); }; preview.appendChild(img); preview.appendChild(info); preview.appendChild(removeBtn); previewsContainer.appendChild(preview); const reader = new FileReader(); reader.onload = (e) => { img.src = e.target.result; }; reader.readAsDataURL(file); } function updateCounter() { const count = filesMap.size; if (count === 0) { uploadCounter.textContent = ''; dropzone.style.display = 'block'; } else { uploadCounter.textContent = 'Nowych: ' + count + '/' + MAX_FILES + ' plików'; uploadCounter.classList.toggle('limit-reached', count >= MAX_FILES); dropzone.style.display = count >= MAX_FILES ? 'none' : 'block'; } } function syncFilesToInput() { try { const dataTransfer = new DataTransfer(); filesMap.forEach(file => dataTransfer.items.add(file)); fileInput.files = dataTransfer.files; } catch (e) {} } const form = dropzone.closest('form'); form.addEventListener('submit', function(e) { if (filesMap.size === 0) return; if (fileInput.files && fileInput.files.length > 0) return; e.preventDefault(); const formData = new FormData(form); formData.delete('attachments[]'); filesMap.forEach(file => formData.append('attachments[]', file)); fetch(form.action, { method: 'POST', body: formData }) .then(resp => { if (resp.redirected) { window.location.href = resp.url; } else { window.location.reload(); } }) .catch(() => alert('Błąd wysyłania')); }); function formatFileSize(bytes) { if (bytes < 1024) return bytes + ' B'; if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB'; return (bytes / (1024 * 1024)).toFixed(1) + ' MB'; } })(); {% endblock %}