Dodaj ogłoszenie biznesowe dla członków Norda Biznes
Ogłoszenie będzie widoczne przez 30 dni. Po tym czasie wygaśnie automatycznie.
{% 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 + validate non-empty.
// Note: hidden textarea cannot use `required` (browser cannot show validation
// UI on display:none fields, which silently blocks submit).
(function() {
var qc = document.getElementById('quill-editor');
// Restore from server-rendered textarea (e.g. after POST validation error)
var initialDesc = document.getElementById('description').value;
if (initialDesc) { quill.root.innerHTML = initialDesc; }
// Toggle .field-valid on a .form-group based on a "is filled" check.
function setValid(group, ok) {
if (!group) return;
if (ok) {
group.classList.add('field-valid');
group.classList.remove('field-error');
} else {
group.classList.remove('field-valid');
}
}
var titleEl = document.getElementById('title');
var titleGrp = titleEl.closest('.form-group');
var catEl = document.getElementById('category');
var catGrp = catEl.closest('.form-group');
var radios = document.querySelectorAll('input[name="listing_type"]');
var radiosGrp = radios.length ? radios[0].closest('.form-group') : null;
var descGrp = qc ? qc.closest('.form-group') : null;
function refreshTitle() { setValid(titleGrp, titleEl.value.trim().length > 0); }
function refreshCat() { setValid(catGrp, catEl.value !== ''); }
function refreshRadios() {
var any = Array.from(radios).some(function(r) { return r.checked; });
setValid(radiosGrp, any);
}
function refreshDesc() {
var html = quill.root.innerHTML;
var ok = !(html === '
' || quill.getText().trim() === '');
setValid(descGrp, ok);
if (ok && qc) qc.classList.remove('field-error');
}
titleEl.addEventListener('input', refreshTitle);
catEl.addEventListener('change', refreshCat);
radios.forEach(function(r) { r.addEventListener('change', refreshRadios); });
quill.on('text-change', refreshDesc);
// Initial pass — pre-filled fields (after POST validation error) get
// their green check immediately on page load.
refreshTitle(); refreshCat(); refreshRadios(); refreshDesc();
var submitBtn = document.getElementById('submitBtn');
document.getElementById('classifiedForm').addEventListener('submit', function(e) {
// Anty double/triple-click — jeśli już wysyłamy, blokuj kolejny submit
if (submitBtn && submitBtn.disabled) {
e.preventDefault();
return;
}
var html = quill.root.innerHTML;
var empty = (html === '