|
23 | 23 | <h1 class="text-wp-text-100 text-xl">{{ $t('login_to_woodpecker_with') }}</h1>
|
24 | 24 | <div class="flex flex-col gap-2">
|
25 | 25 | <Button
|
26 |
| - v-for="forge in forges" |
| 26 | + v-for="forge in forgesWithNameAndFavicon" |
27 | 27 | :key="forge.id"
|
28 | 28 | :start-icon="forge.type === 'addon' ? 'repo' : forge.type"
|
29 | 29 | class="whitespace-normal!"
|
30 | 30 | @click="doLogin(forge.id)"
|
31 | 31 | >
|
32 | 32 | <div class="mr-2 w-4">
|
33 | 33 | <img
|
34 |
| - v-if="!failedForgeFavicons.has(forge.id)" |
35 |
| - :src="getFaviconUrl(forge)" |
36 |
| - :alt="$t('login_to_woodpecker_with', { forge: getHostFromUrl(forge) })" |
| 34 | + v-if="forge.favicon && !failedForgeFavicons.has(forge.id)" |
| 35 | + :src="forge.favicon" |
| 36 | + :alt="$t('login_to_woodpecker_with', { forge: forge.name })" |
37 | 37 | @error="() => failedForgeFavicons.add(forge.id)"
|
38 | 38 | />
|
39 | 39 | <Icon v-else :name="forge.type === 'addon' ? 'repo' : forge.type" />
|
40 | 40 | </div>
|
41 | 41 |
|
42 |
| - {{ getHostFromUrl(forge) }} |
| 42 | + {{ forge.name }} |
43 | 43 | </Button>
|
44 | 44 | </div>
|
45 | 45 | </div>
|
@@ -103,18 +103,24 @@ onMounted(async () => {
|
103 | 103 |
|
104 | 104 | useWPTitle(computed(() => [i18n.t('login')]));
|
105 | 105 |
|
106 |
| -function getHostFromUrl(forge: Forge) { |
107 |
| - if (!forge.url && !forge.oauth_host) { |
108 |
| - return forge.type.charAt(0).toUpperCase() + forge.type.slice(1); |
109 |
| - } |
110 |
| -
|
111 |
| - const url = new URL(forge.oauth_host ?? forge.url); |
112 |
| - return url.hostname; |
113 |
| -} |
114 |
| -
|
115 | 106 | const failedForgeFavicons = ref(new Set<number>()); // Track which favicons failed to load
|
116 |
| -function getFaviconUrl(forge: Forge) { |
117 |
| - const url = new URL(forge.oauth_host ?? forge.url); |
118 |
| - return `${url.origin}/favicon.ico`; |
119 |
| -} |
| 107 | +
|
| 108 | +const forgesWithNameAndFavicon = computed(() => |
| 109 | + forges.value.map((forge) => { |
| 110 | + let name = forge.type.charAt(0).toUpperCase() + forge.type.slice(1); |
| 111 | + let favicon: null | string = null; |
| 112 | +
|
| 113 | + if (forge.url || forge.oauth_host) { |
| 114 | + const url = new URL(forge.oauth_host || forge.url); |
| 115 | + name = url.hostname; |
| 116 | + favicon = `${url.origin}/favicon.ico`; |
| 117 | + } |
| 118 | +
|
| 119 | + return { |
| 120 | + ...forge, |
| 121 | + name, |
| 122 | + favicon, |
| 123 | + }; |
| 124 | + }), |
| 125 | +); |
120 | 126 | </script>
|
0 commit comments