1(()=>{'use strict';const escape=value=>String(value||'').replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]));const accents={navy:'#18354d',green:'#24564d',black:'#252525'};document.querySelectorAll('[data-agcv]').forEach(root=>{if(root.classList.contains('agcv-ready'))return;const form=root.querySelector('form'),paper=root.querySelector('.agcv-paper');const status=root.querySelector('.agcv-status'),submit=root.querySelector('[type=submit]');const photo=form.elements.namedItem('image');let photoURL='',pdfURL='',revision=0;const get=name=>String(form.elements.namedItem(name)?.value||'').trim();const array=name=>Array.from(form.querySelectorAll(`[name="${name}[]"]`),e=>e.value.trim());const templates=new Map(Array.from(form.querySelectorAll('[data-group]'),group=>[group,group.querySelector('.agcv-entry-fields').cloneNode(!0)]));const setStatus=message=>{status.textContent=message};function fit(){const space=paper.parentElement;if(!space.clientWidth)return;const scale=Math.min(1,space.clientWidth/paper.offsetWidth);paper.style.transform=`scale(${scale})`;space.style.height=`${Math.ceil(paper.offsetHeight * scale)}px`} 2function section(title,content){return content?`<section class="agcv-cv-section"><h3>${title}</h3>${content}</section>`:''} 3function points(value){return value?`<ul class="agcv-cv-points">${value.split('\n').filter(v => v.trim()).map(v => `<li>${escape(v.replace(/^\s*[-â¢]\s*/,''))}</li>`).join('')}</ul>`:''} 4function rows(key,title,main,sub,desc){const a=array(main),b=sub?array(sub):[],c=desc?array(desc):[];const from=array(`${key}_dates_from`),to=array(`${key}_dates_to`);return section(title,a.map((value,i)=>{if(!value&&!b[i]&&!c[i]&&!from[i]&&!to[i])return'';const dates=[from[i],to[i]].filter(Boolean).join(' â\n');return `<div class="agcv-cv-row"><div class="agcv-cv-date">${escape(dates)}</div><div>${value ? `<div class="agcv-cv-title">${escape(value)}</div>` : ''}${b[i] ? `<div class="agcv-cv-subtitle">${escape(b[i])}</div>` : ''}${points(c[i])}</div></div>`}).join(''))} 5function simple(title,key,detail){const a=array(key),b=array(detail);return section(title,a.map((value,i)=>!value&&!b[i]?'':`<div class="agcv-cv-simple"><strong>${escape(value)}</strong><span>${escape(b[i])}</span></div>`).join(''))} 6function render(){root.style.setProperty('--agcv-accent',accents[get('accent')]||accents.navy);paper.classList.toggle('agcv-compact',form.elements.namedItem('compact').checked);const name=[get('name'),get('surname')].filter(Boolean).join(' ');let birth=get('birthdate');
6if(/^\d{4}-\d{2}-\d{2}$/.test(birth))birth=birth.split('-').reverse().join('.');const personal=[birth,get('birthcity')].filter(Boolean).join(' · ');const contact=['city','phone','email'].map(get).filter(Boolean);if(personal)contact.push(`Geboren: ${personal}`);paper.innerHTML=`<header class="agcv-cv-top"><div class="agcv-cv-identity"><div class="agcv-cv-label">LEBENSLAUF</div><h2 class="agcv-cv-name">${escape(name) || 'Ihr Name'}</h2>${get('role') ? `<div class="agcv-cv-role">${escape(get('role'))}</div>` : ''}<div class="agcv-contact">${contact.map(v => `<span>${escape(v)}</span>`).join('')}</div></div>${photoURL ? `<img class="agcv-cv-photo" src="${photoURL}" alt="Bewerbungsfoto">` : ''}</header>`+section('Profil',get('profile')?`<p>${escape(get('profile'))}</p>`:'')+rows('experience','Berufserfahrung','experience_job_title','experience_companies_name','experience_companies_position')+rows('education','Ausbildung','education_school_awards','education_school_name')+rows('training','Weiterbildung','training_name',null,'training_description')+simple('Sprachkenntnisse','language_name','language_level')+simple('Kenntnisse & Fähigkeiten','skill_name','skill_description')+section('Interessen',array('interests').filter(Boolean).map(v=>`<p>${escape(v)}</p>`).join(''));fit()} 7function view(mode){root.dataset.view=mode;root.querySelectorAll('[data-view-button]').forEach(button=>button.setAttribute('aria-pressed',String(button.dataset.viewButton===mode)));fit()}
8function invalidate(){revision++;if(pdfURL){URL.revokeObjectURL(pdfURL);pdfURL=''} 9setStatus('')} 10function clearErrors(){form.querySelectorAll('.agcv-field-error').forEach(e=>e.remove());form.querySelectorAll('[aria-invalid]').forEach(e=>{e.removeAttribute('aria-invalid');e.removeAttribute('aria-describedby')})} 11function showErrors(fields){clearErrors();view('edit');let first;Object.entries(fields).forEach(([name,messages],i)=>{const control=form.elements.namedItem(name);if(!(control instanceof HTMLElement))return;const details=control.closest('details');if(details)details.open=!0;control.setAttribute('aria-invalid','true');const error=document.createElement('span');error.className='agcv-field-error';error.id=`${root.querySelector('.agcv-preview').id}-error-${i}`;error.textContent=Array.isArray(messages)?messages.join(' '):messages;control.setAttribute('aria-describedby',error.id);control.after(error);first||=control});setStatus(fields.form?fields.form.join(' '):'Sprawdź zaznaczone pola formularza.');first?.focus()} 12root.addEventListener('click',event=>{const button=event.target.closest('button');if(!button)return;if(button.dataset.viewButton){view(button.dataset.viewButton);return} 13const group=button.closest('[data-group]'),entry=button.closest('.agcv-entry-fields');if(button.hasAttribute('data-add')){const entries=group.querySelector('.agcv-entries');if(entries.children.length>=20){setStatus('Możesz dodaÄ maksymalnie 20 wpisów w jednej sekcji.');return} 14const next=templates.get(group).cloneNode(!0);entries.append(next);next.querySelector('input,select,textarea').focus()}else if(button.hasAttribute('data-remove')){const parent=entry.parentElement;if(parent.children.length===1){entry.querySelectorAll('input,textarea,select').forEach(e=>{e.value=''})}else{entry.remove()} 15parent.querySelector('input,select,textarea')?.focus()}else if(button.dataset.move==='up'&&entry.previousElementSibling){entry.parentElement.insertBefore(entry,entry.previousElementSibling);button.focus()}else if(button.dataset.move==='down'&&entry.nextElementSibling){entry.parentElement.insertBefore(entry.nextElementSibling,entry);button.focus()}else if(button.hasAttribute('data-remove-photo')){photo.value='';if(photoURL)URL.revokeObjectURL(photoURL);photoURL='';button.hidden=!0}else{return} 16invalidate();clearErrors();render()});form.addEventListener('input',event=>{if(event.target===photo)return;invalidate();render()});photo.addEventListener('change',()=>{invalidate();clearErrors();if(photoURL)URL.revokeObjectURL(photoURL);photoURL='';const file=photo.files[0];if(file&&(!['image/jpeg','image/png'].includes(file.type)||file.size>5*1024*1024)){photo.value='';showErrors({image:['Wybierz zdjÄcie JPG lub PNG do 5 MB.']})}else if(file){photoURL=URL.createObjectURL(file)} 17root.querySelector('[data-remove-photo]').hidden=!photoURL;render()});form.addEventListener('submit',async event=>{event.preventDefault();clearErrors();const invalid=Array.from(form.elements).find(e=>e.willValidate&&!e.validity.valid);if(invalid){showErrors({[invalid.name]:[invalid.validationMessage]});return} 18const current=revision;submit.disabled=!0;submit.textContent='PrzygotowujÄ PDFâ¦';setStatus('');if(pdfURL){URL.revokeObjectURL(pdfURL);pdfURL=''} 19try{const response=await fetch(form.action,{method:'POST',body:new FormData(form),headers:{Accept:'application/pdf, application/json'}});if(!response.ok||!response.headers.get('Content-Type')?.includes('application/pdf')){const result=await response.json().catch(()=>null);if(result?.fields&&Object.keys(result.fields).length){showErrors(result.fields);return} 20throw new Error(result?.message||'Nie udaÅo siÄ utworzyÄ PDF. Spróbuj ponownie za chwilÄ.')} 21const blob=await response.blob();if(current!==revision){setStatus('Dane zmieniÅy siÄ podczas tworzenia PDF. Pobierz dokument ponownie, aby uwzglÄdniÄ zmiany.');return} 22pdfURL=URL.createObjectURL(blob);const link=document.createElement('a');link.href=pdfURL;link.download=([get('name'),get('surname')].join('-').replace(/[^\p{L}\p{N}-]/gu,'')||'Lebenslauf')+'-CV.pdf';link.textContent='PDF gotowy â otwórz lub pobierz dokument';link.target='_blank';link.rel='noopener';status.replaceChildren(link);link.click()}catch(error){setStatus(error.message||'BÅÄ d poÅÄ czenia. Twoje dane pozostaÅy w formularzu â spróbuj ponownie.')}finally{submit.disabled=!1;submit.innerHTML='Pobierz CV w PDF <span aria-hidden="true">â</span>'}});root.classList.add('agcv-ready');render();if(typeof ResizeObserver!=='undefined'){new ResizeObserver(fit).observe(paper.parentElement)} 23window.addEventListener('resize',fit)})})() 24;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.