✨ Re: #196 - Adds option for different favicon API for each app
This commit is contained in:
@@ -89,18 +89,32 @@ export default {
|
||||
return emojiCode; // Emoji is a glyph already, just return
|
||||
},
|
||||
/* Get favicon URL, for items which use the favicon as their icon */
|
||||
getFavicon(fullUrl) {
|
||||
getFavicon(fullUrl, specificApi) {
|
||||
if (this.shouldUseDefaultFavicon(fullUrl)) { // Check if we should use local icon
|
||||
const urlParts = fullUrl.split('/');
|
||||
if (urlParts.length >= 2) return `${urlParts[0]}/${urlParts[1]}/${urlParts[2]}/${iconCdns.faviconName}`;
|
||||
} else if (fullUrl.includes('http')) { // Service is running publicly
|
||||
const host = this.getHostName(fullUrl);
|
||||
const faviconApi = this.config.appConfig.faviconApi || defaultFaviconApi;
|
||||
const faviconApi = specificApi || this.config.appConfig.faviconApi || defaultFaviconApi;
|
||||
const endpoint = faviconApiEndpoints[faviconApi];
|
||||
return endpoint.replace('$URL', host);
|
||||
}
|
||||
return '';
|
||||
},
|
||||
/* Get the URL for a favicon, but using the non-default favicon API */
|
||||
getCustomFavicon(fullUrl, faviconIdentifier) {
|
||||
const faviconApi = faviconIdentifier.split('favicon-')[1];
|
||||
if (!faviconApi) {
|
||||
ErrorHandler('Favicon API not specified');
|
||||
} else if (!Object.keys(faviconApiEndpoints).includes(faviconApi)) {
|
||||
ErrorHandler(`The specified favicon API, '${faviconApi}' cannot be found.`);
|
||||
} else {
|
||||
return this.getFavicon(fullUrl, faviconApi);
|
||||
}
|
||||
// Error encountered, favicon service not found
|
||||
this.broken = true;
|
||||
return undefined;
|
||||
},
|
||||
/* If using favicon for icon, and if service is running locally (determined by local IP) */
|
||||
/* or if user prefers local favicon, then return true */
|
||||
shouldUseDefaultFavicon(fullUrl) {
|
||||
@@ -127,6 +141,7 @@ export default {
|
||||
case 'url': return img;
|
||||
case 'img': return this.getLocalImagePath(img);
|
||||
case 'favicon': return this.getFavicon(url);
|
||||
case 'custom-favicon': return this.getCustomFavicon(url, img);
|
||||
case 'generative': return this.getGenerativeIcon(url);
|
||||
case 'mdi': return img; // Material design icons
|
||||
case 'simple-icons': return this.getSimpleIcon(img);
|
||||
@@ -145,6 +160,7 @@ export default {
|
||||
else if (img.includes('fa-')) imgType = 'font-awesome';
|
||||
else if (img.includes('mdi-')) imgType = 'mdi';
|
||||
else if (img.includes('si-')) imgType = 'si';
|
||||
else if (img.includes('favicon-')) imgType = 'custom-favicon';
|
||||
else if (img === 'favicon') imgType = 'favicon';
|
||||
else if (img === 'generative') imgType = 'generative';
|
||||
else if (this.isEmoji(img).isEmoji) imgType = 'emoji';
|
||||
|
||||
Reference in New Issue
Block a user