/
header.tsx
123 lines (108 loc) · 3.24 KB
/
header.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*
This file is part of Talkie -- text-to-speech browser extension button.
<https://joelpurra.com/projects/talkie/>
Copyright (c) 2016, 2017, 2018, 2019, 2020, 2021 Joel Purra <https://joelpurra.com/>
Talkie is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Talkie is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Talkie. If not, see <https://www.gnu.org/licenses/>.
*/
import Discretional from "@talkie/shared-application/components/discretional";
import ExtensionShortName from "@talkie/shared-application/components/editions/extension-short-name";
import TalkieEditionIcon from "@talkie/shared-application/components/icon/talkie-edition-icon";
import configureAttribute, {
ConfigureProps,
} from "@talkie/shared-application/hocs/configure";
import translateAttribute, {
TranslateProps,
} from "@talkie/shared-application/hocs/translate";
import * as buttonBase from "@talkie/shared-application/styled/button/button-base";
import * as layoutBase from "@talkie/shared-application/styled/layout/layout-base";
import * as textBase from "@talkie/shared-application/styled/text/text-base";
import React, {
ComponentProps,
} from "react";
import {
StyletronComponent,
withStyleDeep,
} from "styletron-react";
export interface HeaderProps {
isPremiumEdition: boolean;
}
class Header<P extends HeaderProps & ConfigureProps & TranslateProps> extends React.PureComponent<P> {
private readonly styled: {
button: StyletronComponent<ComponentProps<typeof buttonBase.a>>;
extensionName: StyletronComponent<ComponentProps<typeof textBase.a>>;
};
constructor(props: P) {
super(props);
this.styled = {
button: withStyleDeep(
buttonBase.a,
{
":focus": {
outline: 0,
},
lineHeight: "1.5em",
},
),
extensionName: withStyleDeep(
textBase.a,
{
":focus": {
outline: 0,
},
fontWeight: "bold",
textDecoration: "none",
},
),
};
}
override render(): React.ReactNode {
const {
isPremiumEdition,
translateSync,
configure,
} = this.props;
return (
<layoutBase.header>
<Discretional
enabled={!isPremiumEdition}
>
<this.styled.button
href={configure("urls.options-upgrade-from-demo")}
id="header-premium-button"
lang="en"
>
{translateSync("extensionShortName_Premium")}
</this.styled.button>
</Discretional>
<textBase.h1>
<TalkieEditionIcon
isPremiumEdition={isPremiumEdition}
mode="inline"
/>
<this.styled.extensionName
href={configure("urls.main")}
lang="en"
>
<ExtensionShortName
isPremiumEdition={isPremiumEdition}
/>
</this.styled.extensionName>
</textBase.h1>
</layoutBase.header>
);
}
}
export default configureAttribute<HeaderProps & ConfigureProps>()(
translateAttribute<HeaderProps & ConfigureProps & TranslateProps>()(
Header,
),
);