207 lines
7.9 KiB
JavaScript
207 lines
7.9 KiB
JavaScript
const rows = [
|
|
{ label: 'Basic', emojiId: 'emojiBasic', emoji: '❌' },
|
|
{ label: 'Summary', emojiId: 'emojiSummary', emoji: '❌' },
|
|
{ label: 'Training', emojiId: 'emojiTraining', emoji: '❌' },
|
|
{ label: 'Genetics', emojiId: 'emojiGenetics', emoji: '❌' },
|
|
{ label: 'Achievements', emojiId: 'emojiAchievements', emoji: '❌' },
|
|
{ label: 'Health', emojiId: 'emojiHealth', emoji: '❌' },
|
|
];
|
|
// Warten, bis das DOM vollständig geladen ist
|
|
document.addEventListener("DOMContentLoaded", function () {
|
|
// Suche nach dem Element mit der Klasse 'horse_banner'
|
|
const banner = document.querySelector('.horse_banner');
|
|
if (banner) {
|
|
// Erstelle das container div
|
|
const div = document.createElement('div');
|
|
div.className = 'collector_ui';
|
|
Object.assign(div.style, {
|
|
position: 'absolute',
|
|
right: '-160px',
|
|
top: '20px',
|
|
zIndex: '1',
|
|
padding: '10px',
|
|
backgroundColor: '#FFFFFFD9',
|
|
width: '120px',
|
|
minHeight: '50px',
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
alignItems: 'flex-start',
|
|
gap: '10px' // Abstand zwischen Button und Tabelle
|
|
});
|
|
|
|
// Erstelle den Button
|
|
const updateHorseButton = document.createElement('updateHorseButton');
|
|
updateHorseButton.textContent = 'Update Horse';
|
|
Object.assign(updateHorseButton.style, {
|
|
padding: '10px 15px',
|
|
backgroundColor: '#ffa200',
|
|
color: '#fff',
|
|
border: 'none',
|
|
borderRadius: '5px',
|
|
cursor: 'pointer',
|
|
alignSelf: 'stretch', // Button auf volle Breite dehnen
|
|
transition: 'background-color 0.3s ease' // Übergang für den Hover-Effekt
|
|
});
|
|
updateHorseButton.addEventListener("click", function() {
|
|
chrome.runtime.sendMessage({ action: "updateHorseData" });
|
|
});
|
|
|
|
// Hover-Effekt hinzufügen
|
|
updateHorseButton.addEventListener('mouseenter', function () {
|
|
updateHorseButton.style.backgroundColor = '#bf8700'; // Hover-Farbe
|
|
});
|
|
updateHorseButton.addEventListener('mouseleave', function () {
|
|
updateHorseButton.style.backgroundColor = '#ffa200'; // Originalfarbe
|
|
});
|
|
|
|
// Flex-Container für die Tabelle
|
|
const table = document.createElement('div');
|
|
Object.assign(table.style, {
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
width: '100%',
|
|
gap: '12px' // Abstand zwischen den Zeilen
|
|
});
|
|
// Erstelle Zeilen für jede Beschriftung
|
|
rows.forEach(row => {
|
|
const rowDiv = document.createElement('div');
|
|
Object.assign(rowDiv.style, {
|
|
display: 'flex',
|
|
justifyContent: 'space-between', // Beschriftung links, Emoji rechts
|
|
width: '100%'
|
|
});
|
|
|
|
// Linkes Element für die Beschriftung
|
|
const labelCell = document.createElement('div');
|
|
labelCell.textContent = row.label;
|
|
labelCell.style.flex = '1'; // Beschriftung auf der linken Seite
|
|
|
|
// Rechtes Element für das Emoji
|
|
const emojiCell = document.createElement('div');
|
|
const emojiSpan = document.createElement('span');
|
|
emojiSpan.id = row.emojiId;
|
|
emojiSpan.textContent = row.emoji;
|
|
emojiCell.appendChild(emojiSpan);
|
|
emojiCell.style.flex = '0'; // Emoji auf der rechten Seite
|
|
|
|
// Zeile zur Tabelle hinzufügen
|
|
rowDiv.appendChild(labelCell);
|
|
rowDiv.appendChild(emojiCell);
|
|
table.appendChild(rowDiv);
|
|
});
|
|
|
|
// Linie hinzufügen
|
|
const line = document.createElement('hr');
|
|
Object.assign(line.style, {
|
|
width: '100%',
|
|
border: '0',
|
|
height: '1px',
|
|
backgroundColor: '#ddd',
|
|
margin: '10px 0'
|
|
});
|
|
|
|
// Legend-Titel hinzufügen
|
|
const legendTitle = document.createElement('div');
|
|
legendTitle.textContent = 'Legend:';
|
|
Object.assign(legendTitle.style, {
|
|
fontWeight: 'bold',
|
|
fontSize: '14px',
|
|
color: '#555'
|
|
});
|
|
|
|
// Info-Text für die Legende hinzufügen
|
|
const legendTexts = [
|
|
{ emoji: '✅', text: 'Loaded' },
|
|
{ emoji: '☑️', text: 'Dynamic' },
|
|
{ emoji: '🔄', text: 'Needs Refresh' },
|
|
{ emoji: '❌', text: 'Not Loaded' },
|
|
];
|
|
const legend = document.createElement('div');
|
|
Object.assign(legend.style, {
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
gap: '5px',
|
|
fontSize: '12px',
|
|
color: '#333'
|
|
});
|
|
|
|
legendTexts.forEach(item => {
|
|
const legendRow = document.createElement('div');
|
|
Object.assign(legendRow.style, {
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
gap: '5px'
|
|
});
|
|
|
|
const emoji = document.createElement('span');
|
|
emoji.textContent = item.emoji;
|
|
emoji.style.fontSize = '14px';
|
|
|
|
const text = document.createElement('span');
|
|
text.textContent = item.text;
|
|
|
|
legendRow.appendChild(emoji);
|
|
legendRow.appendChild(text);
|
|
legend.appendChild(legendRow);
|
|
});
|
|
|
|
// Button oben hinzufügen, dann die Tabelle, Linie, und die Legende
|
|
div.appendChild(updateHorseButton);
|
|
div.appendChild(table);
|
|
div.appendChild(line);
|
|
div.appendChild(legendTitle);
|
|
div.appendChild(legend);
|
|
banner.appendChild(div);
|
|
|
|
const horseId = document.querySelector('.right:nth-child(2)').innerText.replace('#', '');
|
|
updateLoadStateUI(horseId);
|
|
}
|
|
});
|
|
async function updateLoadStateUI(horseId) {
|
|
const loadState = await getHorseLoadStateAPIAsync(horseId);
|
|
if (!loadState) {
|
|
console.error("Failed to retrieve load state.");
|
|
return;
|
|
}
|
|
|
|
// Mappe die LoadState-Werte auf die UI-Emojis
|
|
const loadStateMapping = {
|
|
Basic: loadState.basicInfoLoaded ? (loadState.basicInfoNeedsRefresh ? '🔄' : '✅') : '❌',
|
|
Summary: loadState.summaryLoaded ? (loadState.summaryNeedsRefresh ? '🔄' : '✅') : '❌',
|
|
Training: loadState.trainingLoaded ? (loadState.trainingNeedsRefresh ? '🔄' : '✅') : '❌',
|
|
Genetics: loadState.geneticsLoaded ? (loadState.geneticsNeedsRefresh ? '🔄' : '✅') : '❌',
|
|
Achievements: loadState.achievementsLoaded ? (loadState.achievementsNeedsRefresh ? '🔄' : '☑️') : '❌',
|
|
Health: loadState.healthLoaded ? (loadState.healthNeedsRefresh ? '🔄' : '✅') : '❌',
|
|
};
|
|
|
|
// Aktualisiere die Rows in der UI
|
|
rows.forEach(row => {
|
|
const emojiElement = document.getElementById(row.emojiId);
|
|
if (emojiElement && loadStateMapping[row.label]) {
|
|
emojiElement.textContent = loadStateMapping[row.label]; // Setze das Emoji basierend auf dem Ladezustand
|
|
}
|
|
});
|
|
}
|
|
|
|
function updateSingleLoadStateUI(loadStateKey, isLoaded, needsRefresh) {
|
|
// Mappe das LoadState-Schlüssel auf das Emoji
|
|
const loadStateMapping = {
|
|
true: needsRefresh ? '☑️' : '✅', // Geladen, aber möglicherweise veraltet
|
|
false: '❌' // Nicht geladen
|
|
};
|
|
|
|
// Suche die passende Row basierend auf dem Schlüssel
|
|
const row = rows.find(row => row.label === loadStateKey);
|
|
if (!row) {
|
|
console.error(`Row for ${loadStateKey} not found.`);
|
|
return;
|
|
}
|
|
|
|
// Aktualisiere das Emoji in der UI
|
|
const emojiElement = document.getElementById(row.emojiId);
|
|
if (emojiElement) {
|
|
emojiElement.textContent = loadStateMapping[isLoaded]; // Setze das Emoji entsprechend des Status
|
|
} else {
|
|
console.error(`Emoji element for ${loadStateKey} not found.`);
|
|
}
|
|
}
|