menya-zovut-aset-mne-22-let/script.js

181 lines
6.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const LESSONS = {
accounting: {
name: "📊 Бухгалтерия",
words: [
{ en: "Advance report", kk: "Аванстық есеп" },
{ en: "Business trip", kk: "Іссапар" },
{ en: "Invoice", kk: "Шот-фактура" },
{ en: "Receipt", kk: "Түбіртек/чек" },
{ en: "Expense", kk: "Шығын" },
{ en: "Budget", kk: "Бюджет" },
{ en: "Tax", kk: "Салық" },
{ en: "Audit", kk: "Аудит/тексеру" },
{ en: "Payroll", kk: "Жалақы ведомості" },
{ en: "Reimbursement", kk: "Шығындарды өтеу" }
]
},
travel: {
name: "✈️ Командировка",
words: [
{ en: "Flight ticket", kk: "Ұшақ билеті" },
{ en: "Hotel booking", kk: "Қонақүй бронь" },
{ en: "Per diem", kk: "Тәуліктік" },
{ en: "Travel allowance", kk: "Көтерме ақы" },
{ en: "Boarding pass", kk: "Бортқа отырғызу талоны" },
{ en: "Departure", kk: "Ұшу/жөнелу" },
{ en: "Arrival", kk: "Қону/келу" },
{ en: "Luggage", kk: "Жүк" },
{ en: "Customs", kk: "Кеден" },
{ en: "Itinerary", kk: "Маршруттық парақ" }
]
},
business: {
name: "💼 Іс қағаздары",
words: [
{ en: "Dear colleague", kk: "Құрметті әріптес" },
{ en: "Best regards", kk: "Құрметпен" },
{ en: "Please find attached", kk: "Қоса берілген" },
{ en: "In response to your request", kk: "Сұранысыңызға жауап ретінде" },
{ en: "We confirm", kk: "Растаймыз" },
{ en: "Please note", kk: "Назар аударыңыз" },
{ en: "For your information", kk: "Ақпарат үшін" },
{ en: "Kindly request", kk: "Сыпайы түрде сұраймыз" },
{ en: "As discussed", kk: "Талқыланғандай" },
{ en: "Looking forward", kk: "Күтеміз" }
]
},
phrases: {
name: "💬 Пайдалы фразалар",
words: [
{ en: "Could you please clarify?", kk: "Нақтылай аласыз ба?" },
{ en: "I'll get back to you shortly", kk: "Жақын арада қайта хабарласамын" },
{ en: "Please let me know", kk: "Маған хабарлаңызшы" },
{ en: "I'm afraid I can't", kk: "Қорқамын, мен істей алмаймын" },
{ en: "Thank you for your cooperation", kk: "Ынтымақтастық үшін рахмет" },
{ en: "Is everything clear?", kk: "Бәрі түсінікті ме?" },
{ en: "Keep me updated", kk: "Мені хабардар етіңіз" },
{ en: "I'll check and confirm", kk: "Тексеріп, растаймын" }
]
}
};
let currentTopic = "accounting";
let currentTestWord = null;
let progress = { total: 0, correct: 0 };
function loadProgress() {
const saved = localStorage.getItem("englishProgress");
if (saved) {
progress = JSON.parse(saved);
}
updateProgressDisplay();
}
function saveProgress() {
localStorage.setItem("englishProgress", JSON.stringify(progress));
updateProgressDisplay();
}
function updateProgressDisplay() {
document.getElementById("total-answered").textContent = progress.total;
document.getElementById("correct-answered").textContent = progress.correct;
const accuracy = progress.total > 0 ? Math.round((progress.correct / progress.total) * 100) : 0;
document.getElementById("accuracy").textContent = accuracy + "%";
}
function renderWords() {
const wordList = document.getElementById("word-list");
const words = LESSONS[currentTopic].words;
wordList.innerHTML = words.map(w => `
<div class="word-card">
<div class="en">${w.en}</div>
<div class="kk">${w.kk}</div>
</div>
`).join("");
document.getElementById("topic-title").textContent = LESSONS[currentTopic].name;
}
function generateTest() {
const allWords = Object.values(LESSONS).flatMap(l => l.words);
const randomWord = allWords[Math.floor(Math.random() * allWords.length)];
currentTestWord = randomWord;
const wrongOptions = allWords
.filter(w => w.en !== randomWord.en)
.sort(() => Math.random() - 0.5)
.slice(0, 3)
.map(w => w.kk);
const options = [...wrongOptions, randomWord.kk].sort(() => Math.random() - 0.5);
document.getElementById("test-question").textContent = `"${randomWord.en}" сөзінің аудармасын таңда:`;
const optionsContainer = document.getElementById("test-options");
optionsContainer.innerHTML = options.map((opt, i) => `
<button class="test-option" data-index="${i}" data-correct="${opt === randomWord.kk}">
${opt}
</button>
`).join("");
document.getElementById("test-result").textContent = "";
document.querySelectorAll(".test-option").forEach(btn => {
btn.addEventListener("click", handleTestAnswer);
});
}
function handleTestAnswer(e) {
const buttons = document.querySelectorAll(".test-option");
buttons.forEach(btn => btn.disabled = true);
const isCorrect = e.target.dataset.correct === "true";
if (isCorrect) {
e.target.classList.add("correct");
document.getElementById("test-result").textContent = "✅ Дұрыс!";
document.getElementById("test-result").style.color = "#48bb78";
progress.correct++;
} else {
e.target.classList.add("wrong");
buttons.forEach(btn => {
if (btn.dataset.correct === "true") {
btn.classList.add("correct");
}
});
document.getElementById("test-result").textContent = `❌ Қате. Дұрыс жауап: "${currentTestWord.kk}"`;
document.getElementById("test-result").style.color = "#f56565";
}
progress.total++;
saveProgress();
setTimeout(() => {
generateTest();
}, 2000);
}
document.querySelectorAll(".topic-btn").forEach(btn => {
btn.addEventListener("click", () => {
document.querySelectorAll(".topic-btn").forEach(b => b.classList.remove("active"));
btn.classList.add("active");
currentTopic = btn.dataset.topic;
renderWords();
});
});
document.getElementById("start-test-btn").addEventListener("click", () => {
generateTest();
});
document.getElementById("reset-btn").addEventListener("click", () => {
if (confirm("Прогрессті тазалағыңыз келе ме?")) {
progress = { total: 0, correct: 0 };
saveProgress();
}
});
loadProgress();
renderWords();