fix: security hardening + code quality improvements (401 retry limit, UUID crypto, debounce this-bug, deduplicate CSS/helpers, optimize SW precache)
This commit is contained in:
@@ -21,34 +21,6 @@ export function escapeHTML(str) {
|
||||
.replace(/'/g, ''');
|
||||
}
|
||||
|
||||
/**
|
||||
* Format price with currency symbol
|
||||
* @param {number} price - Price value
|
||||
* @param {string} [currency='EUR'] - Currency code (EUR, USD, CHF, XMR)
|
||||
* @returns {string} Formatted price string
|
||||
* @example
|
||||
* formatPrice(99.5, 'EUR') // '€ 99.50'
|
||||
* formatPrice(0.5, 'XMR') // '0.5000 ɱ'
|
||||
*/
|
||||
export function formatPrice(price, currency = 'EUR') {
|
||||
if (price === null || price === undefined) return '–';
|
||||
|
||||
const symbols = {
|
||||
EUR: '€',
|
||||
USD: '$',
|
||||
CHF: 'CHF',
|
||||
XMR: 'ɱ'
|
||||
};
|
||||
|
||||
const symbol = symbols[currency] || currency;
|
||||
|
||||
if (currency === 'XMR') {
|
||||
return `${price.toFixed(4)} ${symbol}`;
|
||||
}
|
||||
|
||||
return `${symbol} ${price.toFixed(2)}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format relative time (e.g., "vor 2 Stunden", "2 hours ago")
|
||||
* Uses Intl.RelativeTimeFormat for localization
|
||||
@@ -84,11 +56,11 @@ export function formatRelativeTime(date, locale = 'de') {
|
||||
* const debouncedSearch = debounce((q) => search(q), 500)
|
||||
*/
|
||||
export function debounce(fn, delay = 300) {
|
||||
let timeoutId;
|
||||
return (...args) => {
|
||||
clearTimeout(timeoutId);
|
||||
timeoutId = setTimeout(() => fn.apply(this, args), delay);
|
||||
};
|
||||
let timeoutId
|
||||
return function (...args) {
|
||||
clearTimeout(timeoutId)
|
||||
timeoutId = setTimeout(() => fn.apply(this, args), delay)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user