Files
kiss-translator/src/libs/style.js

103 lines
2.4 KiB
JavaScript
Raw Normal View History

import { css } from "@emotion/css";
import {
OPT_STYLE_NONE,
OPT_STYLE_LINE,
OPT_STYLE_DOTLINE,
OPT_STYLE_DASHLINE,
OPT_STYLE_WAVYLINE,
OPT_STYLE_DASHBOX,
OPT_STYLE_FUZZY,
OPT_STYLE_HIGHLIGHT,
OPT_STYLE_BLOCKQUOTE,
OPT_STYLE_DIY,
DEFAULT_COLOR,
} from "../config";
const genLineStyle = (style, color) => `
2025-09-25 01:02:38 +08:00
opacity: 0.8;
-webkit-opacity: 0.8;
text-decoration-line: underline;
text-decoration-style: ${style};
text-decoration-color: ${color};
text-decoration-thickness: 2px;
text-underline-offset: 0.3em;
-webkit-text-decoration-line: underline;
-webkit-text-decoration-style: ${style};
-webkit-text-decoration-color: ${color};
-webkit-text-decoration-thickness: 2px;
-webkit-text-underline-offset: 0.3em;
&:hover {
opacity: 1;
-webkit-opacity: 1;
}
`;
const genStyles = ({ textDiyStyle, bgColor = DEFAULT_COLOR }) => ({
// 无样式
[OPT_STYLE_NONE]: ``,
// 下划线
[OPT_STYLE_LINE]: genLineStyle("solid", bgColor),
// 点状线
[OPT_STYLE_DOTLINE]: genLineStyle("dotted", bgColor),
// 虚线
[OPT_STYLE_DASHLINE]: genLineStyle("dashed", bgColor),
// 波浪线
[OPT_STYLE_WAVYLINE]: genLineStyle("wavy", bgColor),
// 虚线框
[OPT_STYLE_DASHBOX]: `
border: 1px dashed ${bgColor || DEFAULT_COLOR};
background: transparent;
display: block;
padding: 0.2em 0.5em;
box-sizing: border-box;
`,
// 模糊
[OPT_STYLE_FUZZY]: `
filter: blur(0.2em);
-webkit-filter: blur(0.2em);
&:hover {
filter: none;
-webkit-filter: none;
}
`,
// 高亮
[OPT_STYLE_HIGHLIGHT]: `
color: #fff;
background-color: ${bgColor || DEFAULT_COLOR};
`,
// 引用
[OPT_STYLE_BLOCKQUOTE]: `
2025-09-25 01:02:38 +08:00
opacity: 0.8;
-webkit-opacity: 0.8;
display: block;
2025-09-25 01:13:40 +08:00
padding: 0.25em 0.5em;
2025-09-25 01:02:38 +08:00
border-left: 0.5em solid ${bgColor || DEFAULT_COLOR};
background: rgb(32, 156, 238, 0.2);
&:hover {
opacity: 1;
-webkit-opacity: 1;
}
`,
// 自定义
[OPT_STYLE_DIY]: textDiyStyle,
});
export const genTextClass = ({ textDiyStyle, bgColor = DEFAULT_COLOR }) => {
const styles = genStyles({ textDiyStyle, bgColor });
const textClass = {};
let textStyles = "";
Object.entries(styles).forEach(([k, v]) => {
textClass[k] = css`
${v}
`;
});
Object.entries(styles).forEach(([k, v]) => {
textStyles += `
.${textClass[k]} {
${v}
}
`;
});
return [textClass, textStyles];
};