Skip to content

Commit 8fdd378

Browse files
Added stack exchange site logo
1 parent 9340fb6 commit 8fdd378

File tree

7 files changed

+437
-4
lines changed

7 files changed

+437
-4
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
### Added
66

7+
- Implemented the stack exchange site logo instead of a title
8+
Title will be used as fallback
79
- Implemented nice name for all stack exchange sites
810

911
### Fixed

scripts/createMaps.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ fetch(
1414
console.log(body.items.length)
1515
const items = body.items
1616

17-
items.forEach(async ({ api_site_parameter, name, icon_url }) => {
17+
items.forEach(async ({ api_site_parameter, name, logo_url }) => {
1818
names[api_site_parameter] = name
19-
icons[api_site_parameter] = icon_url
19+
icons[api_site_parameter] = logo_url
2020
})
2121
})
2222
.then(async () => {
23-
console.log(names)
23+
// console.log(names)
2424
console.log(icons)
2525
})
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { getBase64Image } from '../../utils/getBase64Image.js'
2+
import { siteLogoMap } from './SiteLogoMap.js'
3+
4+
/**
5+
* @param {string} seSite parameter from request
6+
* @returns svg string
7+
*/
8+
export const siteLogo = async (seSite) => {
9+
try {
10+
const siteUrl = siteLogoMap(seSite)
11+
const base64Image = await getBase64Image(siteUrl)
12+
13+
return `
14+
<g data-test-id="site-icon-group" transform="translate(25, 5)">
15+
<style>
16+
.site-logo {
17+
filter: invert(.5) brightness(2);
18+
}
19+
</style>
20+
<image
21+
data-test-id="site-icon"
22+
class="site-logo"
23+
xlink:href="${base64Image}"
24+
width="158"
25+
height="28"
26+
/>
27+
</g>
28+
`
29+
} catch {
30+
return ''
31+
}
32+
}

source/components/SiteLogo/SiteLogoMap.js

Lines changed: 380 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { siteLogo } from './SiteLogo.js'

source/routes/stackExchange.route.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
import { SVG } from '../components/SVG/index.js'
1414
import { errorText } from '../components/ErrorText/index.js'
1515
import { siteName } from '../components/SiteName/index.js'
16+
import { siteLogo } from '../components/SiteLogo/index.js'
1617

1718
dotenv.config()
1819

@@ -148,16 +149,19 @@ router.get('/', async (req, res) => {
148149
)
149150
}
150151

152+
const siteLogoContent = await siteLogo(seSite)
153+
151154
res.send(
152155
SVG(
153156
useImage,
154157
false,
155-
siteName(seSite),
158+
siteLogoContent ?? siteName(seSite),
156159
`${
157160
useImage
158161
? await userImage(user.profile_image)
159162
: userName(user.display_name, nameSize, nameX)
160163
}
164+
${siteLogoContent}
161165
${reputationContainer(useImage, user.reputation)}
162166
${badgeContainer(useImage, user.badge_counts)}`,
163167
),
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
export const processObjectOfPromises = async (object) => {
2+
const keys = Object.keys(object)
3+
const promises = Object.values(object)
4+
5+
const results = await Promise.allSettled(promises)
6+
7+
// Reconstruct the object with the resolved values
8+
const resultObject = {}
9+
keys.forEach((key, index) => {
10+
resultObject[key] = results[index]
11+
})
12+
13+
return resultObject
14+
}

0 commit comments

Comments
 (0)