1 |
|
2 |
|
3 | import type {PluginConfig, PluginResult} from './index';
|
4 |
|
5 | export default function visited(
|
6 | {
|
7 | addCSS,
|
8 | appendImportantToEachValue,
|
9 | config,
|
10 | cssRuleSetToString,
|
11 | hash,
|
12 | props,
|
13 | style,
|
14 | }: PluginConfig,
|
15 | ): PluginResult {
|
16 |
|
17 | let className = props.className;
|
18 |
|
19 | const newStyle = Object.keys(style).reduce(
|
20 | (newStyleInProgress, key) => {
|
21 | let value = style[key];
|
22 | if (key === ':visited') {
|
23 | value = appendImportantToEachValue(value);
|
24 | const ruleCSS = cssRuleSetToString('', value, config.userAgent);
|
25 | const visitedClassName = 'rad-' + hash(ruleCSS);
|
26 | const css = '.' + visitedClassName + ':visited' + ruleCSS;
|
27 |
|
28 | addCSS(css);
|
29 | className = (className ? className + ' ' : '') + visitedClassName;
|
30 | } else {
|
31 | newStyleInProgress[key] = value;
|
32 | }
|
33 |
|
34 | return newStyleInProgress;
|
35 | },
|
36 | {},
|
37 | );
|
38 |
|
39 | return {
|
40 | props: className === props.className ? null : {className},
|
41 | style: newStyle,
|
42 | };
|
43 | }
|