Skip to content

Commit efd66d9

Browse files
committed
Slack emojis in markdown
1 parent 145375d commit efd66d9

7 files changed

+299
-5
lines changed

package.json

+5-1
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,12 @@
3434
"dependencies": {
3535
"@amplitude/analytics-browser": "^2.11.9",
3636
"@nais/ds-svelte-community": "^0.7.5",
37+
"@slack/web-api": "^7.7.0",
3738
"date-fns": "^4.1.0",
39+
"mdast-util-find-and-replace": "^3.0.1",
40+
"node-emoji": "^2.1.3",
3841
"shiki": "^1.23.0",
39-
"svelte-preprocess": "^6.0.3"
42+
"svelte-preprocess": "^6.0.3",
43+
"unified": "^11.0.5"
4044
}
4145
}

remark-custom-emojis.js

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { findAndReplace } from "mdast-util-find-and-replace";
2+
import { get as getEmoji } from "node-emoji";
3+
import { WebClient } from "@slack/web-api";
4+
5+
const token = process.env.SLACK_TOKEN;
6+
7+
const web = new WebClient(token);
8+
9+
console.log("Fetching custom emojis from Slack...");
10+
11+
const customEmojis = await web.emoji
12+
.list()
13+
.then((res) => {
14+
const { emoji = {} } = res;
15+
16+
const map = new Map();
17+
const getSrc = (url) => (url?.startsWith("alias:") ? getSrc(emoji[url.split(":")[1]]) : url);
18+
19+
Object.entries(emoji).forEach(([name, url]) => {
20+
const src = getSrc(url);
21+
if (src) {
22+
map.set(`:${name}:`, {
23+
type: "html",
24+
value: `<img src='${src.replace(
25+
/'/gu,
26+
"%27",
27+
)}' style='height: 1em;display:inline;' title='${name.replace(/'/gu, "&apos;")}'/>`,
28+
});
29+
}
30+
});
31+
32+
return map;
33+
})
34+
.catch((e) => {
35+
console.error(e);
36+
return new Map();
37+
});
38+
39+
const plugin = () => {
40+
const replaceEmoji = (match) => customEmojis.get(match) ?? getEmoji(match) ?? false;
41+
42+
const transformer = (tree) => findAndReplace(tree, [[/:\+1:|:-1:|:[\w-]+:/g, replaceEmoji]]);
43+
44+
return transformer;
45+
};
46+
47+
export default plugin;

src/routes/(pages)/log/posts/2024-11-06-nais-debug.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: ":naiser: NAIS DEBUG!"
2+
title: "NAIS DEBUG!"
33
date: 2024-11-06T12:55:13+02:00
44
author: Carl Hedgren
55
tags: []

src/routes/(pages)/log/posts/2024-11-12-nais-redirects.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: ":naiser: Redirects, but Nais"
2+
title: "Redirects, but Nais"
33
date: 2024-11-12T14:10:13+02:00
44
author: Carl Hedgren
55
tags: []

src/routes/(pages)/log/posts/2024-11-15-influx-pa-aiven-eol.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ layout: log
88

99
:aiven: Influx på Aiven er end of life 30. april 2025, innen denne dato må alle team som bruker Influx på Aiven avslutte sin bruk av bruk. Mer informasjon her: https://nav-it.slack.com/files/USLACKBOT/F080WSQCRUK/end_of_life_for_aiven_for_influxdb_services
1010

11-
:megaphone: I forbindelse med dette gjennomfører Nais en brukerundersøkelse om teamene sin bruk av forretningsmetrikker / produktmetrikker / funksjonelle metrikker. Vi hadde satt svært pris på tilbakemeldinger fra team som i dag bruker Prometheus, Influx, Bigquery eller noe annet til å lagre forretningsmetrikker.
11+
:mega: I forbindelse med dette gjennomfører Nais en brukerundersøkelse om teamene sin bruk av forretningsmetrikker / produktmetrikker / funksjonelle metrikker. Vi hadde satt svært pris på tilbakemeldinger fra team som i dag bruker Prometheus, Influx, Bigquery eller noe annet til å lagre forretningsmetrikker.
1212

1313
Undersøkelsen har bare 4 spørsmål og du finner den her: https://forms.office.com/e/A8BsJFt22h

svelte.config.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import path from "path";
33
import { mdsvex, escapeSvelte } from "mdsvex";
44
import { createHighlighter } from "shiki";
55
import remarkRelativeImages from "mdsvex-relative-images";
6+
import remarkCustomEmojis from "./remark-custom-emojis.js";
67

78
const theme = "github-dark";
89
const highlighter = await createHighlighter({
@@ -18,7 +19,7 @@ const config = {
1819
preprocess: [
1920
mdsvex({
2021
extensions: [".svx", ".md", ".mdx"],
21-
remarkPlugins: [remarkRelativeImages],
22+
remarkPlugins: [remarkCustomEmojis, remarkRelativeImages],
2223
layout: {
2324
log: "/src/routes/(pages)/log/post.svelte",
2425
blog: "/src/routes/(pages)/blog/posts/layout.svelte",

0 commit comments

Comments
 (0)