1
0
Fork 0
forked from Simnation/Main
Main/resources/[tools]/um-idcard/web/js/main.js
2025-08-04 05:51:33 +02:00

127 lines
3.9 KiB
JavaScript

import { fetchNui } from './fetchNui.js';
import { Global } from '../../lang/global.js';
let config;
// Eine Variable, um ausstehende Spielerdaten zu speichern
let pendingPlayerData = null;
/**
* Get element by id
* @param id {string}
**/
const getElementById = (id) => document.getElementById(id);
/**
* Set visibility
* @param visibility {string}
**/
const setVisibility = (visibility) => getElementById('um-idcard').style.visibility = visibility;
/**
* Set visibility of badge
* @param badge {string|Object|null}
**/
const setBadgeVisibility = (badge) => {
const badgeElement = getElementById('badge');
if (!badge || badge === 'none') {
badgeElement.style.display = 'none';
return;
}
getElementById('badgeimg').src = `badges/${badge.img}.png`;
getElementById('badgegrade').textContent = badge.grade;
badgeElement.style.display = 'flex';
};
const closeFunction = () => {
getElementById('um-idcard').classList.remove('animate__animated', 'animate__fadeInLeft', 'animate__faster');
setVisibility('hidden');
setBadgeVisibility('none');
fetchNui('closeIdCard');
};
/**
* Open id card
* @param playerData {Object}
**/
const openIdCard = (playerData) => {
// Überprüfen, ob config und config.Licenses existieren
if (!config || !config.Licenses) {
console.error('Config oder Licenses nicht initialisiert. Bitte stellen Sie sicher, dass configData vor playerData gesendet wird.');
return;
}
// Standardwert für cardtype setzen, falls undefined
const cardType = playerData.cardtype || 'id_card';
// Überprüfen, ob der cardtype gültig ist
const license = config.Licenses[cardType];
if (!license) {
console.error(`Lizenztyp "${cardType}" nicht in der Konfiguration gefunden. Verfügbare Typen: ${Object.keys(config.Licenses).join(', ')}`);
return;
}
const elements = {
lastname: playerData.lastname,
name: playerData.firstname,
sign: `${playerData.lastname} ${playerData.firstname}`,
dob: playerData.birthdate,
sex: playerData.sex,
nationality: playerData.nationality,
cardtype: license.header,
};
Object.entries(elements).forEach(([key, value]) => {
getElementById(key).textContent = value;
});
getElementById('mugshot').src = playerData.mugShot;
getElementById('smallmugshot').src = playerData.mugShot;
getElementById('um-idcard').style.backgroundColor = license.background;
getElementById('um-idcard').classList.add('animate__animated', 'animate__fadeInLeft', 'animate__faster');
setBadgeVisibility(playerData.badge);
setVisibility('visible');
autoClose();
};
const autoClose = () => {
if (!config || !config.IdCardSettings || !config.IdCardSettings.autoClose || !config.IdCardSettings.autoClose.status) return;
setTimeout(closeFunction, config.IdCardSettings.autoClose.time);
};
window.addEventListener('message', (event) => {
const { type, playerData, configData } = event.data;
if (type === 'configData') {
config = configData;
console.log('Konfiguration geladen:', Object.keys(config.Licenses));
// Wenn es ausstehende Spielerdaten gibt, verarbeiten Sie diese jetzt
if (pendingPlayerData) {
openIdCard(pendingPlayerData);
pendingPlayerData = null;
}
}
else if (type === 'playerData') {
console.log('Spielerdaten erhalten:', playerData);
// Wenn die Konfiguration bereits geladen ist, öffnen Sie die ID-Karte
if (config) {
openIdCard(playerData);
}
// Andernfalls speichern Sie die Spielerdaten für später
else {
pendingPlayerData = playerData;
console.log('Konfiguration noch nicht geladen. Spielerdaten werden für später gespeichert.');
}
}
});
window.addEventListener('load', () => {
Object.entries(Global).forEach(([key, value]) => {
getElementById(key).textContent = value;
});
});
document.addEventListener('keydown', (e) => {
if (!config || !config.IdCardSettings || e.key !== config.IdCardSettings.closeKey) return;
closeFunction();
});