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

Nowe ogłoszenie

Dodaj ogłoszenie biznesowe dla członków Norda Biznes

Ogłoszenie będzie widoczne przez 30 dni. Po tym czasie wygaśnie automatycznie.

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'] ] } }); // Sync Quill content to hidden textarea on form submit document.querySelector('form').addEventListener('submit', function() { var html = quill.root.innerHTML; if (html === '


') html = ''; document.getElementById('description').value = html; }); (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 = ''; }); // Paste from clipboard document.addEventListener('paste', (e) => { const desc = document.getElementById('description'); if (document.activeElement !== desc) return; const items = e.clipboardData?.items; if (!items) return; const pastedFiles = []; for (let i = 0; i < items.length; i++) { if (items[i].type.startsWith('image/')) { e.preventDefault(); const file = items[i].getAsFile(); if (file) pastedFiles.push(file); } } if (pastedFiles.length > 0) addFiles(pastedFiles); }); 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 = ''; uploadCounter.classList.remove('limit-reached'); dropzone.style.display = 'block'; } else { uploadCounter.textContent = 'Wybrano: ' + 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) {} } // FormData fallback for mobile 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 %}