350 lines
11 KiB
Plaintext
350 lines
11 KiB
Plaintext
<div class="language-picker-container">
|
||
<div class="language-content-wrapper">
|
||
<h1>Select course language</h1>
|
||
<p>Please choose the language you’d like to take the ‘Jersey City safety course’ in. This language cannot be changed once the course begins.</p>
|
||
|
||
<div class="language-picker-dropdown" id="language-picker">
|
||
<button class="language-picker-btn">
|
||
<div class="language-picker-btn-content">
|
||
<img class="globe-icon" src="https://cdn.northpass.io/doordash/globe-line.svg" alt="">
|
||
<span>English (US)</span>
|
||
</div>
|
||
<span class="language-picker-arrow">
|
||
<i class="far fa-chevron-down picker-arrow"></i>
|
||
</span>
|
||
</button>
|
||
<div class="language-picker-content">
|
||
<div class="lang-option">
|
||
Հայերէն (Armenian)
|
||
</div>
|
||
<div class="lang-option">
|
||
中文 (Chinese)
|
||
</div>
|
||
<div class="lang-option">
|
||
Español (Spanish)
|
||
</div>
|
||
<div class="lang-option" course-id="a9aaf91c-a8fc-4a04-b461-941b3e9533d3">
|
||
English (US)
|
||
</div>
|
||
<div class="lang-option" course-id="f9d690e0-cf18-4a98-91b5-01fb18966729">
|
||
한국어 (Korean)
|
||
</div>
|
||
<div class="lang-option">
|
||
فارسی (Persian)
|
||
</div>
|
||
<div class="lang-option">
|
||
Tagalog
|
||
</div>
|
||
<div class="lang-option">
|
||
Tiếng Việt (Vietnamese)
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="button-container">
|
||
<button class="language-picker-confirm-btn">Confirm</button>
|
||
</div>
|
||
</div>
|
||
<div class="loading-overlay" id="loadingOverlay">
|
||
<div class="spinner"></div>
|
||
</div>
|
||
<style>
|
||
body {
|
||
font-family: Arial, sans-serif;
|
||
margin: 0;
|
||
background-color: #fff;
|
||
}
|
||
|
||
.language-picker-container {
|
||
max-width: 400px;
|
||
margin: 0 auto;
|
||
text-align: left;
|
||
display: flex;
|
||
height: 100svh;
|
||
flex-direction: column;
|
||
justify-content: space-between;
|
||
padding: 20px;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.language-picker-container h1 {
|
||
font-size: 1.5em;
|
||
margin: 0 0 10px;
|
||
font-weight: bold;
|
||
color: #191919;
|
||
}
|
||
|
||
.language-picker-container p {
|
||
margin: 0 0 20px;
|
||
line-height: 1.6;
|
||
color: #606060;
|
||
}
|
||
|
||
.language-picker-dropdown {
|
||
position: relative;
|
||
margin-bottom: 20px;
|
||
}
|
||
|
||
.language-picker-btn {
|
||
width: 100%;
|
||
background-color: #f4f4f4;
|
||
border: 1px solid #ccc;
|
||
padding: 10px 20px;
|
||
text-align: left;
|
||
cursor: pointer;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
border-radius: 5px;
|
||
font-size: 1em;
|
||
border: 2px solid #191919;
|
||
}
|
||
.button-container {
|
||
margin-top: auto;
|
||
}
|
||
.language-picker-content {
|
||
display: none;
|
||
position: absolute;
|
||
background-color: #fff;
|
||
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
||
width: 100%;
|
||
top: 100%;
|
||
left: 0;
|
||
z-index: 1;
|
||
border-radius: 5px;
|
||
overflow: hidden;
|
||
margin-top: 5px;
|
||
}
|
||
|
||
.language-picker-btn-content {
|
||
display: flex;
|
||
align-items: center;
|
||
color: #191919;
|
||
}
|
||
.picker-arrow{
|
||
color:#191919;
|
||
}
|
||
.language-picker-content .lang-option {
|
||
cursor: pointer;
|
||
transition: background-color 0.3s;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
}
|
||
|
||
.language-picker-content .lang-option:hover {
|
||
background-color: #ddd;
|
||
}
|
||
.lang-option {
|
||
padding: 9px 16px;
|
||
}
|
||
.language-picker-confirm-btn {
|
||
width: 100%;
|
||
background-color: #EB1700;
|
||
color: #fff;
|
||
padding: 12px;
|
||
border: none;
|
||
border-radius: 25px;
|
||
cursor: pointer;
|
||
font-size: 1em;
|
||
font-weight: bold;
|
||
text-align: center;
|
||
}
|
||
|
||
.globe-icon {
|
||
width: 24px;
|
||
height: 24px;
|
||
margin-right: 10px;
|
||
}
|
||
|
||
.language-picker-arrow {
|
||
font-size: 0.8em;
|
||
}
|
||
aside {
|
||
display: none !important;
|
||
}
|
||
|
||
.loading-overlay {
|
||
display: none;
|
||
position: fixed;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
background-color: rgba(255, 255, 255, 0.8);
|
||
z-index: 1000;
|
||
justify-content: center;
|
||
align-items: center;
|
||
}
|
||
|
||
.spinner {
|
||
border: 8px solid #f3f3f3;
|
||
border-top: 8px solid #3498db;
|
||
border-radius: 50%;
|
||
width: 40px;
|
||
height: 40px;
|
||
animation: spin 1s linear infinite;
|
||
}
|
||
|
||
@keyframes spin {
|
||
0% { transform: rotate(0deg); }
|
||
100% { transform: rotate(360deg); }
|
||
}
|
||
</style>
|
||
|
||
|
||
<script>
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
const urlParams = new URLSearchParams(window.location.search);
|
||
const langParam = urlParams.get('lang');
|
||
|
||
const translations = {
|
||
en: {
|
||
title: 'Select course language',
|
||
description: "Please choose the language you’d like to take the ‘Jersey City safety course’ in. This language cannot be changed once the course begins.",
|
||
confirm: "Confirm"
|
||
},
|
||
zh: {
|
||
title: '选择课程语言',
|
||
description: "请选择您希望参加‘泽西市安全课程’的语言。一旦课程开始,此语言将无法更改。",
|
||
confirm: "确认"
|
||
},
|
||
es: {
|
||
title: 'Selecciona el idioma del curso',
|
||
description: "Por favor elija el idioma en el que desea tomar el ‘Curso de seguridad de Jersey City’. Este idioma no se puede cambiar una vez que comience el curso.",
|
||
confirm: "Confirmar"
|
||
},
|
||
tl: {
|
||
title: 'Pumili ng wika para sa kurso',
|
||
description: "Pumili ng wika na nais mong gamitin sa ‘Jersey City safety course’. Hindi na ito mababago kapag nagsimula na ang kurso.",
|
||
confirm: "Kumpirmahin"
|
||
},
|
||
fr: {
|
||
title: 'Sélectionnez la langue du cours',
|
||
description: "Veuillez choisir la langue dans laquelle vous souhaitez suivre le ‘Cours de sécurité de Jersey City’. Cette langue ne peut pas être modifiée une fois le cours commencé.",
|
||
confirm: "Confirmer"
|
||
},
|
||
vi: {
|
||
title: 'Chọn ngôn ngữ khóa học',
|
||
description: "Vui lòng chọn ngôn ngữ bạn muốn sử dụng cho ‘Khóa học an toàn Jersey City’. Ngôn ngữ này không thể thay đổi sau khi khóa học bắt đầu.",
|
||
confirm: "Xác nhận"
|
||
},
|
||
ko: {
|
||
title: '과정 언어 선택',
|
||
description: "‘저지시티 안전 과정’을 수강할 언어를 선택하세요. 과정이 시작되면 언어를 변경할 수 없습니다.",
|
||
confirm: "확인"
|
||
},
|
||
hy: {
|
||
title: 'Ընտրեք դասընթացի լեզուն',
|
||
description: "Խնդրում ենք ընտրել լեզուն, որով ցանկանում եք անցկացնել ‘Ջերսի Սիթի անվտանգության դասընթացը’: Դասընթացի մեկնարկից հետո այս լեզուն չի կարող փոփոխվել։",
|
||
confirm: "Հաստատել"
|
||
},
|
||
fa: {
|
||
title: 'زبان دوره را انتخاب کنید',
|
||
description: "لطفاً زبانی را که میخواهید دوره «ایمنی شهر جرزی» را در آن بگذرانید انتخاب کنید. پس از شروع دوره، این زبان قابل تغییر نیست.",
|
||
confirm: "تأیید"
|
||
}
|
||
};
|
||
|
||
if (langParam && translations[langParam]) {
|
||
|
||
localStorage.setItem('selectedLang', langParam);
|
||
|
||
document.body.setAttribute('data-lang', langParam);
|
||
|
||
const t = translations[langParam];
|
||
document.querySelector('.language-content-wrapper h1').textContent = t.title;
|
||
document.querySelector('.language-content-wrapper p').textContent = t.description;
|
||
document.querySelector('.language-picker-confirm-btn').textContent = t.confirm;
|
||
}
|
||
});
|
||
</script>
|
||
|
||
<script>
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
const dropdown = document.getElementById('language-picker');
|
||
const btn = dropdown.querySelector('.language-picker-btn');
|
||
const selectedSpan = btn.querySelector('span');
|
||
const content = dropdown.querySelector('.language-picker-content');
|
||
const confirmBtn = document.querySelector('.language-picker-confirm-btn');
|
||
const options = Array.from(content.querySelectorAll('.lang-option'));
|
||
const loadingOverlay = document.getElementById('loadingOverlay');
|
||
|
||
let selectedCourseId = options.find(opt => opt.textContent.trim() === 'English (US)').getAttribute('course-id');
|
||
|
||
btn.addEventListener('click', function() {
|
||
content.style.display = content.style.display === 'block' ? 'none' : 'block';
|
||
});
|
||
|
||
options.forEach(option => {
|
||
option.addEventListener('click', function() {
|
||
selectedSpan.textContent = this.textContent;
|
||
|
||
options.forEach(opt => {
|
||
opt.classList.remove('selected');
|
||
const icon = opt.querySelector('.fa-check');
|
||
if (icon) icon.remove();
|
||
});
|
||
|
||
this.classList.add('selected');
|
||
const checkIcon = document.createElement('i');
|
||
checkIcon.className = 'far fa-check';
|
||
this.appendChild(checkIcon);
|
||
|
||
// Update selected course ID
|
||
selectedCourseId = this.getAttribute('course-id');
|
||
|
||
content.style.display = 'none';
|
||
});
|
||
});
|
||
|
||
window.addEventListener('click', function(e) {
|
||
if (!dropdown.contains(e.target)) {
|
||
content.style.display = 'none';
|
||
}
|
||
});
|
||
|
||
confirmBtn.addEventListener('click', function() {
|
||
if (selectedCourseId) {
|
||
loadingOverlay.style.display = 'flex';
|
||
enrollToCourse(selectedCourseId);
|
||
} else {
|
||
console.log('No course ID selected');
|
||
}
|
||
});
|
||
});
|
||
|
||
let enrollToCourse = async (courseId) => {
|
||
function apiCaller() {
|
||
return new Promise(function(res, rej) {
|
||
let xhr = new XMLHttpRequest();
|
||
url = "https://webhooks.workato.com/webhooks/rest/41ea4fc7-fb82-4d0b-8fb3-ca0d3a1e4b8e/enroll-to-course";
|
||
xhr.open("POST", url, true);
|
||
xhr.setRequestHeader('Content-Type', 'application/json');
|
||
xhr.onreadystatechange = function() {
|
||
if (xhr.readyState === 4 && xhr.status === 200) {
|
||
console.log('Enrollment successful');
|
||
res();
|
||
} else if (xhr.readyState === 4) {
|
||
console.log('Enrollment failed');
|
||
rej();
|
||
}
|
||
};
|
||
xhr.send(JSON.stringify({
|
||
"person_id": "{{ current_person.id }}",
|
||
"course_id": courseId
|
||
}));
|
||
});
|
||
}
|
||
|
||
try {
|
||
await apiCaller();
|
||
setTimeout(function() {
|
||
window.location.href = "/courses/" + courseId;
|
||
}, 3000);
|
||
} catch(err) {
|
||
console.log(err);
|
||
}
|
||
};
|
||
</script> |