Skip to content

Commit 6ebc37f

Browse files
committed
Add comments for emoji wrapping
1 parent b6eca7e commit 6ebc37f

2 files changed

Lines changed: 4 additions & 3 deletions

File tree

src/webpage/markdown.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,7 @@ class MarkDown {
630630
mention.classList.add("mentionMD");
631631
mention.contentEditable = "false";
632632
mention.textContent = everyone ? "@everyone" : "@here";
633-
setTextWithWrappedEmoji(mention, mention.textContent || "");
633+
setTextWithWrappedEmoji(mention, mention.textContent || "");
634634
appendcurrent();
635635
span.appendChild(mention);
636636
mention.setAttribute("real", everyone ? `@everyone` : "@here");

src/webpage/utils/utils.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,17 @@ let instances:
3131
}[]
3232
| null = null;
3333
await setTheme();
34+
// Matches keycaps, flags, standard, skin-toned, and ZWJ emoji sequences.
3435
const emojiGraphemeRegex = /^(?:[0-9#*]\uFE0F?\u20E3|\p{Regional_Indicator}{2}|\p{Extended_Pictographic}(?:\uFE0F|\uFE0E)?[\u{1F3FB}-\u{1F3FF}]?(?:\u200D\p{Extended_Pictographic}(?:\uFE0F|\uFE0E)?[\u{1F3FB}-\u{1F3FF}]?)*?)$/u;
3536
export function setTextWithWrappedEmoji(target: HTMLElement, name: string) {
3637
target.textContent = "";
37-
38+
// Fallback for browsers without grapheme segmentation support.
3839
if (!("Segmenter" in Intl)) {
3940
target.textContent = name;
4041
return;
4142
}
42-
4343
const segmenter = new Intl.Segmenter("und", {granularity: "grapheme"});
44+
// Buffer plain text between emoji to keep fewer DOM nodes.
4445
let textBuffer = "";
4546
const flushTextBuffer = () => {
4647
if (!textBuffer) return;

0 commit comments

Comments
 (0)