Notes/src/routes/api/fonts.ts

93 lines
2.3 KiB
TypeScript
Raw Normal View History

2024-04-05 22:24:21 +03:00
import { Request, Response } from 'express';
import optionService from "../../services/options.js";
import { OptionMap } from '../../services/options_interface.js';
2021-09-27 21:01:56 +02:00
const SYSTEM_SANS_SERIF = [
"-apple-system",
"BlinkMacSystemFont",
"Segoe UI",
"Noto Sans",
"Helvetica",
"Arial",
"sans-serif",
"Apple Color Emoji","Segoe UI Emoji"
].join(",");
const SYSTEM_MONOSPACE = [
"monospace"
].join(",");
2024-04-05 22:24:21 +03:00
function getFontCss(req: Request, res: Response) {
2021-09-27 21:01:56 +02:00
res.setHeader('Content-Type', 'text/css');
if (!optionService.getOptionBool('overrideThemeFonts')) {
res.send('');
return;
}
2023-06-29 22:10:13 +02:00
const optionsMap = optionService.getOptionMap();
2021-09-27 21:01:56 +02:00
// using body to be more specific than themes' :root
let style = 'body {';
style += getFontFamily(optionsMap);
style += getFontSize(optionsMap);
style += '}';
res.send(style);
}
function getFontFamily({ mainFontFamily, treeFontFamily, detailFontFamily, monospaceFontFamily }: OptionMap) {
let style = "";
// System override
if (mainFontFamily === "system") {
mainFontFamily = SYSTEM_SANS_SERIF;
}
if (treeFontFamily === "system") {
treeFontFamily = SYSTEM_SANS_SERIF;
}
if (detailFontFamily === "system") {
detailFontFamily = SYSTEM_SANS_SERIF;
}
if (monospaceFontFamily === "system") {
monospaceFontFamily = SYSTEM_MONOSPACE;
}
// Apply the font override if not using theme fonts.
if (mainFontFamily !== 'theme') {
style += `--main-font-family: ${mainFontFamily};`;
}
if (treeFontFamily !== 'theme') {
style += `--tree-font-family: ${treeFontFamily};`;
}
if (detailFontFamily !== 'theme') {
style += `--detail-font-family: ${detailFontFamily};`;
}
if (monospaceFontFamily !== 'theme') {
style += `--monospace-font-family: ${monospaceFontFamily};`;
}
return style;
}
function getFontSize(optionsMap: OptionMap) {
let style = "";
style += `--main-font-size: ${optionsMap.mainFontSize}%;`;
style += `--tree-font-size: ${optionsMap.treeFontSize}%;`;
style += `--detail-font-size: ${optionsMap.detailFontSize}%;`;
style += `--monospace-font-size: ${optionsMap.monospaceFontSize}%;`;
return style;
2021-09-27 21:01:56 +02:00
}
export default {
2021-09-27 21:01:56 +02:00
getFontCss
};