Online ora

This commit is contained in:
Zan
2026-01-15 17:42:53 +01:00
parent 15ab433064
commit 0f69a1583b
3 changed files with 196 additions and 169 deletions

1
icons/contact.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 3.223a9.003 9.003 0 0 0-5.605 13.592L3 21l4.185-1.395A9.003 9.003 0 0 0 20.777 14m0-4A9.01 9.01 0 0 0 14 3.223M17 12a5 5 0 0 0-5-5m1 5a1 1 0 0 0-1-1"/></svg>

After

Width:  |  Height:  |  Size: 353 B

View File

Before

Width:  |  Height:  |  Size: 365 B

After

Width:  |  Height:  |  Size: 365 B

View File

@@ -655,16 +655,28 @@
lesson.testInfo lesson.testInfo
? (() => { ? (() => {
const testType = lesson.testId ? testTypeMap[lesson.testId] : null; const testType = lesson.testId ? testTypeMap[lesson.testId] : null;
if (testType === "KONTAKT ÓRA") { const isKontaktOra = testType === "KONTAKT ÓRA";
return "";
}
const isProjektOra = testType === "PROJEKT ÓRA"; const isProjektOra = testType === "PROJEKT ÓRA";
const indicatorClass = isProjektOra ? "homework-indicator" : "test-indicator"; let indicatorClass = "test-indicator";
const iconPath = isProjektOra ? "icons/online.svg" : "icons/assigment.svg"; let iconPath = "icons/assigment.svg";
const titleText = isProjektOra ? "Online óra" : LanguageManager.t("timetable.test_indicator"); let titleText = LanguageManager.t("timetable.test_indicator");
let altText = "Teszt";
if (isKontaktOra) {
indicatorClass = "homework-indicator";
iconPath = "icons/contact.svg";
titleText = "Kontakt óra";
altText = "Kontakt óra";
} else if (isProjektOra) {
indicatorClass = "homework-indicator";
iconPath = "icons/project.svg";
titleText = "Projekt óra";
altText = "Projekt óra";
}
return ` return `
<span class="lesson-indicator ${indicatorClass}" title="${titleText}"> <span class="lesson-indicator ${indicatorClass}" title="${titleText}">
<img src="${chrome.runtime.getURL(iconPath)}" alt="${isProjektOra ? 'Online óra' : 'Teszt'}" style="width: 20px; height: 20px;"> <img src="${chrome.runtime.getURL(iconPath)}" alt="${altText}" style="width: 20px; height: 20px;">
</span> </span>
`; `;
})() })()
@@ -1249,195 +1261,209 @@
if (lesson.testId) { if (lesson.testId) {
testDetails = await loadTestDetailsFromAPI(lesson.testId); testDetails = await loadTestDetailsFromAPI(lesson.testId);
} }
const isKontaktOra = testDetails && testDetails.type === "KONTAKT ÓRA"; const isKontaktOra = testDetails && testDetails.type === "KONTAKT ÓRA";
const isProjektOra = testDetails && testDetails.type === "PROJEKT ÓRA"; const isProjektOra = testDetails && testDetails.type === "PROJEKT ÓRA";
const isSpecialType = isKontaktOra || isProjektOra;
if (!isKontaktOra) { const testSection = document.createElement('div');
const testSection = document.createElement('div'); testSection.className = isSpecialType ? 'modal-section homework-section' : 'modal-section test-section';
testSection.className = isProjektOra ? 'modal-section homework-section' : 'modal-section test-section';
const testH4 = document.createElement('h4'); const testH4 = document.createElement('h4');
const testIcon = document.createElement('img'); const testIcon = document.createElement('img');
testIcon.src = chrome.runtime.getURL(isProjektOra ? 'icons/online.svg' : 'icons/assigment.svg');
testIcon.alt = isProjektOra ? 'Online óra' : 'Teszt';
testIcon.style.width = '20px';
testIcon.style.height = '20px';
testH4.appendChild(testIcon);
testH4.appendChild(document.createTextNode(isProjektOra ? 'Online óra' : LanguageManager.t('timetable.test_indicator')));
if (isProjektOra) {
testH4.style.color = 'var(--accent-accent)';
}
const testContent = document.createElement('div'); let iconPath = 'icons/assigment.svg';
testContent.className = 'test-content'; let sectionTitle = LanguageManager.t('timetable.test_indicator');
let altText = 'Teszt';
if (testDetails) { if (isKontaktOra) {
const detailsDiv = document.createElement('div'); iconPath = 'icons/contact.svg';
detailsDiv.className = 'test-details'; sectionTitle = 'Kontakt óra';
altText = 'Kontakt óra';
} else if (isProjektOra) {
iconPath = 'icons/project.svg';
sectionTitle = 'Projekt óra';
altText = 'Projekt óra';
}
const nameP = document.createElement('p'); testIcon.src = chrome.runtime.getURL(iconPath);
const nameStrong = document.createElement('strong'); testIcon.alt = altText;
nameStrong.textContent = 'Megnevezés: '; testIcon.style.width = '20px';
nameP.appendChild(nameStrong); testIcon.style.height = '20px';
nameP.appendChild(document.createTextNode(testDetails.name)); testH4.appendChild(testIcon);
detailsDiv.appendChild(nameP); testH4.appendChild(document.createTextNode(sectionTitle));
if (isSpecialType) {
testH4.style.color = 'var(--accent-accent)';
}
const typeP = document.createElement('p'); const testContent = document.createElement('div');
const typeStrong = document.createElement('strong'); testContent.className = 'test-content';
typeStrong.textContent = 'Típus: ';
typeP.appendChild(typeStrong);
typeP.appendChild(document.createTextNode(testDetails.type));
detailsDiv.appendChild(typeP);
const dateP = document.createElement('p'); if (testDetails) {
const dateStrong = document.createElement('strong'); const detailsDiv = document.createElement('div');
dateStrong.textContent = 'Bejelentés dátuma: '; detailsDiv.className = 'test-details';
dateP.appendChild(dateStrong);
dateP.appendChild(document.createTextNode(testDetails.announceDate));
detailsDiv.appendChild(dateP);
testContent.appendChild(detailsDiv); const nameP = document.createElement('p');
} else if (lesson.testId) { const nameStrong = document.createElement('strong');
const errorP = document.createElement('p'); nameStrong.textContent = 'Megnevezés: ';
errorP.className = 'test-details-error'; nameP.appendChild(nameStrong);
errorP.textContent = 'Nem sikerült betölteni a számonkérés részleteit.'; nameP.appendChild(document.createTextNode(testDetails.name));
testContent.appendChild(errorP); detailsDiv.appendChild(nameP);
}
const lessonKey = getLessonKey(lesson); const typeP = document.createElement('p');
const customTests = await getCustomTests(); const typeStrong = document.createElement('strong');
const customTestItems = customTests[lessonKey] || []; typeStrong.textContent = 'Típus: ';
typeP.appendChild(typeStrong);
typeP.appendChild(document.createTextNode(testDetails.type));
detailsDiv.appendChild(typeP);
if (customTestItems.length > 0) { const dateP = document.createElement('p');
const customTestsDiv = document.createElement('div'); const dateStrong = document.createElement('strong');
customTestsDiv.className = 'custom-tests-in-section'; dateStrong.textContent = 'Bejelentés dátuma: ';
customTestsDiv.style.marginTop = '1rem'; dateP.appendChild(dateStrong);
customTestsDiv.style.paddingTop = '1rem'; dateP.appendChild(document.createTextNode(testDetails.announceDate));
customTestsDiv.style.borderTop = '1px solid var(--background-0)'; detailsDiv.appendChild(dateP);
const customTestsTitle = document.createElement('h5'); testContent.appendChild(detailsDiv);
customTestsTitle.textContent = 'Saját számonkérések:'; } else if (lesson.testId) {
customTestsTitle.style.fontSize = '14px'; const errorP = document.createElement('p');
customTestsTitle.style.fontWeight = '600'; errorP.className = 'test-details-error';
customTestsTitle.style.color = 'var(--warning-accent)'; errorP.textContent = 'Nem sikerült betölteni a számonkérés részleteit.';
customTestsTitle.style.marginBottom = '0.5rem'; testContent.appendChild(errorP);
customTestsDiv.appendChild(customTestsTitle); }
const customTestsList = document.createElement('div'); const lessonKey = getLessonKey(lesson);
customTestsList.className = 'custom-tests-list-integrated'; const customTests = await getCustomTests();
const customTestItems = customTests[lessonKey] || [];
customTestItems.forEach(test => { if (customTestItems.length > 0) {
const testItem = document.createElement('div'); const customTestsDiv = document.createElement('div');
testItem.className = `custom-test-item-integrated ${test.completed ? 'completed' : ''}`; customTestsDiv.className = 'custom-tests-in-section';
testItem.style.display = 'flex'; customTestsDiv.style.marginTop = '1rem';
testItem.style.alignItems = 'center'; customTestsDiv.style.paddingTop = '1rem';
testItem.style.justifyContent = 'space-between'; customTestsDiv.style.borderTop = '1px solid var(--background-0)';
testItem.style.padding = '0.5rem';
testItem.style.marginBottom = '0.5rem';
testItem.style.background = 'var(--background)';
testItem.style.borderRadius = '6px';
testItem.style.border = '1px solid var(--background-0)';
const testText = document.createElement('span'); const customTestsTitle = document.createElement('h5');
testText.className = 'test-text-integrated'; customTestsTitle.textContent = 'Saját számonkérések:';
testText.textContent = test.text; customTestsTitle.style.fontSize = '14px';
testText.style.flex = '1'; customTestsTitle.style.fontWeight = '600';
testText.style.color = 'var(--text-primary)'; customTestsTitle.style.color = 'var(--warning-accent)';
if (test.completed) { customTestsTitle.style.marginBottom = '0.5rem';
customTestsDiv.appendChild(customTestsTitle);
const customTestsList = document.createElement('div');
customTestsList.className = 'custom-tests-list-integrated';
customTestItems.forEach(test => {
const testItem = document.createElement('div');
testItem.className = `custom-test-item-integrated ${test.completed ? 'completed' : ''}`;
testItem.style.display = 'flex';
testItem.style.alignItems = 'center';
testItem.style.justifyContent = 'space-between';
testItem.style.padding = '0.5rem';
testItem.style.marginBottom = '0.5rem';
testItem.style.background = 'var(--background)';
testItem.style.borderRadius = '6px';
testItem.style.border = '1px solid var(--background-0)';
const testText = document.createElement('span');
testText.className = 'test-text-integrated';
testText.textContent = test.text;
testText.style.flex = '1';
testText.style.color = 'var(--text-primary)';
if (test.completed) {
testText.style.textDecoration = 'line-through';
testText.style.opacity = '0.6';
}
const testActions = document.createElement('div');
testActions.className = 'test-actions-integrated';
testActions.style.display = 'flex';
testActions.style.gap = '0.5rem';
const completeBtn = document.createElement('button');
completeBtn.className = 'test-complete-btn-integrated';
completeBtn.title = test.completed ? 'Megoldva - kattints a visszavonáshoz' : 'Megoldottként jelöl';
completeBtn.style.background = 'none';
completeBtn.style.border = 'none';
completeBtn.style.cursor = 'pointer';
completeBtn.style.padding = '4px';
completeBtn.style.borderRadius = '4px';
completeBtn.style.display = 'flex';
completeBtn.style.alignItems = 'center';
completeBtn.style.justifyContent = 'center';
const completeIcon = document.createElement('img');
completeIcon.src = chrome.runtime.getURL('icons/pipa.svg');
completeIcon.alt = 'Megoldva';
completeIcon.style.width = '16px';
completeIcon.style.height = '16px';
if (test.completed) {
completeIcon.style.opacity = '1';
completeBtn.style.background = 'var(--warning-accent)';
} else {
completeIcon.style.opacity = '0.5';
}
completeBtn.appendChild(completeIcon);
const deleteBtn = document.createElement('button');
deleteBtn.className = 'test-delete-btn-integrated';
deleteBtn.title = 'Törlés';
deleteBtn.style.background = 'none';
deleteBtn.style.border = 'none';
deleteBtn.style.cursor = 'pointer';
deleteBtn.style.padding = '4px';
deleteBtn.style.borderRadius = '4px';
deleteBtn.style.display = 'flex';
deleteBtn.style.alignItems = 'center';
deleteBtn.style.justifyContent = 'center';
const deleteIcon = document.createElement('img');
deleteIcon.src = chrome.runtime.getURL('icons/delete.svg');
deleteIcon.alt = 'Törlés';
deleteIcon.style.width = '16px';
deleteIcon.style.height = '16px';
deleteIcon.style.opacity = '0.5';
deleteBtn.appendChild(deleteIcon);
completeBtn.addEventListener('click', async () => {
const newCompleted = await toggleCustomTestCompletion(lessonKey, test.id);
if (newCompleted) {
testText.style.textDecoration = 'line-through'; testText.style.textDecoration = 'line-through';
testText.style.opacity = '0.6'; testText.style.opacity = '0.6';
}
const testActions = document.createElement('div');
testActions.className = 'test-actions-integrated';
testActions.style.display = 'flex';
testActions.style.gap = '0.5rem';
const completeBtn = document.createElement('button');
completeBtn.className = 'test-complete-btn-integrated';
completeBtn.title = test.completed ? 'Megoldva - kattints a visszavonáshoz' : 'Megoldottként jelöl';
completeBtn.style.background = 'none';
completeBtn.style.border = 'none';
completeBtn.style.cursor = 'pointer';
completeBtn.style.padding = '4px';
completeBtn.style.borderRadius = '4px';
completeBtn.style.display = 'flex';
completeBtn.style.alignItems = 'center';
completeBtn.style.justifyContent = 'center';
const completeIcon = document.createElement('img');
completeIcon.src = chrome.runtime.getURL('icons/pipa.svg');
completeIcon.alt = 'Megoldva';
completeIcon.style.width = '16px';
completeIcon.style.height = '16px';
if (test.completed) {
completeIcon.style.opacity = '1'; completeIcon.style.opacity = '1';
completeBtn.style.background = 'var(--warning-accent)'; completeBtn.style.background = 'var(--warning-accent)';
completeBtn.title = 'Megoldva - kattints a visszavonáshoz';
} else { } else {
testText.style.textDecoration = 'none';
testText.style.opacity = '1';
completeIcon.style.opacity = '0.5'; completeIcon.style.opacity = '0.5';
completeBtn.style.background = 'none';
completeBtn.title = 'Megoldottként jelöl';
} }
completeBtn.appendChild(completeIcon);
const deleteBtn = document.createElement('button');
deleteBtn.className = 'test-delete-btn-integrated';
deleteBtn.title = 'Törlés';
deleteBtn.style.background = 'none';
deleteBtn.style.border = 'none';
deleteBtn.style.cursor = 'pointer';
deleteBtn.style.padding = '4px';
deleteBtn.style.borderRadius = '4px';
deleteBtn.style.display = 'flex';
deleteBtn.style.alignItems = 'center';
deleteBtn.style.justifyContent = 'center';
const deleteIcon = document.createElement('img');
deleteIcon.src = chrome.runtime.getURL('icons/delete.svg');
deleteIcon.alt = 'Törlés';
deleteIcon.style.width = '16px';
deleteIcon.style.height = '16px';
deleteIcon.style.opacity = '0.5';
deleteBtn.appendChild(deleteIcon);
completeBtn.addEventListener('click', async () => {
const newCompleted = await toggleCustomTestCompletion(lessonKey, test.id);
if (newCompleted) {
testText.style.textDecoration = 'line-through';
testText.style.opacity = '0.6';
completeIcon.style.opacity = '1';
completeBtn.style.background = 'var(--warning-accent)';
completeBtn.title = 'Megoldva - kattints a visszavonáshoz';
} else {
testText.style.textDecoration = 'none';
testText.style.opacity = '1';
completeIcon.style.opacity = '0.5';
completeBtn.style.background = 'none';
completeBtn.title = 'Megoldottként jelöl';
}
});
deleteBtn.addEventListener('click', async () => {
if (confirm('Biztosan törölni szeretnéd ezt a számonkérést?')) {
await removeCustomTest(lessonKey, test.id);
testItem.remove();
}
});
testActions.appendChild(completeBtn);
testActions.appendChild(deleteBtn);
testItem.appendChild(testText);
testItem.appendChild(testActions);
customTestsList.appendChild(testItem);
}); });
customTestsDiv.appendChild(customTestsList); deleteBtn.addEventListener('click', async () => {
testContent.appendChild(customTestsDiv); if (confirm('Biztosan törölni szeretnéd ezt a számonkérést?')) {
} await removeCustomTest(lessonKey, test.id);
testItem.remove();
}
});
testSection.appendChild(testH4); testActions.appendChild(completeBtn);
testSection.appendChild(testContent); testActions.appendChild(deleteBtn);
body.appendChild(testSection); testItem.appendChild(testText);
testItem.appendChild(testActions);
customTestsList.appendChild(testItem);
});
customTestsDiv.appendChild(customTestsList);
testContent.appendChild(customTestsDiv);
} }
testSection.appendChild(testH4);
testSection.appendChild(testContent);
body.appendChild(testSection);
} }