[Glitch] Support "system" theme setting (light/dark theme depending on user system preference)
Port 02ea161506
to glitch-soc
Co-authored-by: Nishiki Liu <hello@nshki.com>
Signed-off-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
parent
a6147a831f
commit
d63c0a2879
1 changed files with 31 additions and 8 deletions
|
@ -17,8 +17,13 @@ const emojiFilenames = (emojis) => {
|
||||||
const darkEmoji = emojiFilenames(['🎱', '🐜', '⚫', '🖤', '⬛', '◼️', '◾', '◼️', '✒️', '▪️', '💣', '🎳', '📷', '📸', '♣️', '🕶️', '✴️', '🔌', '💂♀️', '📽️', '🍳', '🦍', '💂', '🔪', '🕳️', '🕹️', '🕋', '🖊️', '🖋️', '💂♂️', '🎤', '🎓', '🎥', '🎼', '♠️', '🎩', '🦃', '📼', '📹', '🎮', '🐃', '🏴', '🐞', '🕺', '📱', '📲', '🚲', '🪮', '🐦⬛']);
|
const darkEmoji = emojiFilenames(['🎱', '🐜', '⚫', '🖤', '⬛', '◼️', '◾', '◼️', '✒️', '▪️', '💣', '🎳', '📷', '📸', '♣️', '🕶️', '✴️', '🔌', '💂♀️', '📽️', '🍳', '🦍', '💂', '🔪', '🕳️', '🕹️', '🕋', '🖊️', '🖋️', '💂♂️', '🎤', '🎓', '🎥', '🎼', '♠️', '🎩', '🦃', '📼', '📹', '🎮', '🐃', '🏴', '🐞', '🕺', '📱', '📲', '🚲', '🪮', '🐦⬛']);
|
||||||
const lightEmoji = emojiFilenames(['👽', '⚾', '🐔', '☁️', '💨', '🕊️', '👀', '🍥', '👻', '🐐', '❕', '❔', '⛸️', '🌩️', '🔊', '🔇', '📃', '🌧️', '🐏', '🍚', '🍙', '🐓', '🐑', '💀', '☠️', '🌨️', '🔉', '🔈', '💬', '💭', '🏐', '🏳️', '⚪', '⬜', '◽', '◻️', '▫️', '🪽', '🪿']);
|
const lightEmoji = emojiFilenames(['👽', '⚾', '🐔', '☁️', '💨', '🕊️', '👀', '🍥', '👻', '🐐', '❕', '❔', '⛸️', '🌩️', '🔊', '🔇', '📃', '🌧️', '🐏', '🍚', '🍙', '🐓', '🐑', '💀', '☠️', '🌨️', '🔉', '🔈', '💬', '💭', '🏐', '🏳️', '⚪', '⬜', '◽', '◻️', '▫️', '🪽', '🪿']);
|
||||||
|
|
||||||
const emojiFilename = (filename) => {
|
/**
|
||||||
const borderedEmoji = (document.body && document.body.classList.contains('skin-mastodon-light')) ? lightEmoji : darkEmoji;
|
* @param {string} filename
|
||||||
|
* @param {"light" | "dark" } colorScheme
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
const emojiFilename = (filename, colorScheme) => {
|
||||||
|
const borderedEmoji = colorScheme === "light" ? lightEmoji : darkEmoji;
|
||||||
return borderedEmoji.includes(filename) ? (filename + '_border') : filename;
|
return borderedEmoji.includes(filename) ? (filename + '_border') : filename;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -92,12 +97,30 @@ const emojifyTextNode = (node, customEmojis) => {
|
||||||
const { filename, shortCode } = unicodeMapping[unicode_emoji];
|
const { filename, shortCode } = unicodeMapping[unicode_emoji];
|
||||||
const title = shortCode ? `:${shortCode}:` : '';
|
const title = shortCode ? `:${shortCode}:` : '';
|
||||||
|
|
||||||
replacement = document.createElement('img');
|
replacement = document.createElement('picture');
|
||||||
replacement.setAttribute('draggable', 'false');
|
|
||||||
replacement.setAttribute('class', 'emojione');
|
const isSystemTheme = !!document.body?.classList.contains('theme-system');
|
||||||
replacement.setAttribute('alt', unicode_emoji);
|
|
||||||
replacement.setAttribute('title', title);
|
if(isSystemTheme) {
|
||||||
replacement.setAttribute('src', `${assetHost}/emoji/${emojiFilename(filename)}.svg`);
|
let source = document.createElement('source');
|
||||||
|
source.setAttribute('media', '(prefers-color-scheme: dark)');
|
||||||
|
source.setAttribute('srcset', `${assetHost}/emoji/${emojiFilename(filename, "dark")}.svg`);
|
||||||
|
replacement.appendChild(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
let img = document.createElement('img');
|
||||||
|
img.setAttribute('draggable', 'false');
|
||||||
|
img.setAttribute('class', 'emojione');
|
||||||
|
img.setAttribute('alt', unicode_emoji);
|
||||||
|
img.setAttribute('title', title);
|
||||||
|
|
||||||
|
let theme = "light";
|
||||||
|
|
||||||
|
if(!isSystemTheme && !document.body?.classList.contains('skin-mastodon-light'))
|
||||||
|
theme = "dark";
|
||||||
|
|
||||||
|
img.setAttribute('src', `${assetHost}/emoji/${emojiFilename(filename, theme)}.svg`);
|
||||||
|
replacement.appendChild(img);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the processed-up-to-now string and the emoji replacement
|
// Add the processed-up-to-now string and the emoji replacement
|
||||||
|
|
Loading…
Reference in a new issue