Let’s recruit together and find your next colleague.
No jobs found
Try adjusting your filters or search terms
`; jobsList.appendChild(noResultsEl); } } } /** * Add scroll animations for job cards */ function addScrollAnimations() { if (!('IntersectionObserver' in window)) return; const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('tt-fade-in'); observer.unobserve(entry.target); } }); }, { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }); const jobCards = document.querySelectorAll('[class*="job-"], [class*="career-job"], li[class*="job"]'); jobCards.forEach(card => observer.observe(card)); } /** * Add accessibility features * @param {HTMLElement} container */ function addAccessibilityFeatures(container) { // Add ARIA labels to job cards const jobCards = container.querySelectorAll('[class*="job-"], [class*="career-job"], li[class*="job"]'); jobCards.forEach(card => { const titleEl = card.querySelector('[class*="title"], h3, h4'); if (titleEl) { const jobTitle = titleEl.textContent.trim(); card.setAttribute('aria-label', `View ${jobTitle} job posting`); } }); // Add skip link for keyboard users const firstJobCard = jobCards[0]; if (firstJobCard) { firstJobCard.setAttribute('id', 'first-job-card'); } } /** * Track job card clicks * @param {HTMLElement} container */ function trackJobClicks(container) { if (!CONFIG.enableAnalytics) return; const jobCards = container.querySelectorAll('[class*="job-"], [class*="career-job"], li[class*="job"]'); jobCards.forEach(card => { card.addEventListener('click', () => { const title = card.getAttribute('data-job-title'); const department = card.getAttribute('data-job-department'); const location = card.getAttribute('data-job-location'); trackEvent('job_click', { title: title, department: department, location: location }); }); }); } /** * Track analytics events * @param {string} eventName * @param {object} eventData */ function trackEvent(eventName, eventData) { // Google Analytics 4 if (typeof gtag !== 'undefined') { gtag('event', eventName, eventData); } // Google Analytics Universal if (typeof ga !== 'undefined') { ga('send', 'event', 'Jobs', eventName, JSON.stringify(eventData)); } // Mixpanel if (typeof mixpanel !== 'undefined') { mixpanel.track(eventName, eventData); } // Console log for debugging console.log('Event tracked:', eventName, eventData); } /** * Create custom filters programmatically (optional) * Call this function if Teamtailor doesn't provide filters */ function createCustomFilters(container) { const jobCards = container.querySelectorAll('[class*="job-"], [class*="career-job"], li[class*="job"]'); const departments = new Set(); const locations = new Set(); // Extract unique departments and locations jobCards.forEach(card => { const dept = card.getAttribute('data-job-department'); const loc = card.getAttribute('data-job-location'); if (dept) departments.add(dept); if (loc) locations.add(loc); }); // Create filter UI const filtersContainer = document.createElement('div'); filtersContainer.className = 'jobs-filters tt-custom-filters'; filtersContainer.innerHTML = `