Skip to content

Commit 844b9af

Browse files
authored
feat: Adding headers and footers (sketch) (#163)
1 parent f575e66 commit 844b9af

File tree

5 files changed

+378
-0
lines changed

5 files changed

+378
-0
lines changed

src/App.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import InputAdornment from "@material-ui/core/InputAdornment";
1313
import SearchIcon from "@material-ui/icons/Search";
1414
import cloneDeep from "lodash.clonedeep";
1515

16+
import Navbar from './components/Navbar';
17+
import Footer from './components/Footer';
1618
import ContirbutorLineChart from "./components/contributor";
1719
import ActivityChart from "./components/activity";
1820
import { getParameterByName } from "./utils";
@@ -216,6 +218,7 @@ const App = () => {
216218
alignItems: "center",
217219
}}
218220
>
221+
{ window.self === window.top ? <Navbar /> : null}
219222
<div style={searchStyle}>
220223
<Paper className={classes.root} elevation={0}>
221224
<Autocomplete
@@ -356,6 +359,7 @@ const App = () => {
356359
</TabPanel>
357360
</div>
358361
</div>
362+
{ window.self === window.top ? <Footer /> : null}
359363
</div>
360364
</>
361365
);

src/components/Footer/index.jsx

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
import React from 'react'
2+
3+
import './style.css'
4+
5+
const App = () => {
6+
7+
const footerLinks = [
8+
{
9+
label: 'API7.ai Logo',
10+
icon: <img alt="Logo" src="https://static.apiseven.com/202108/1640917868852-37633689-5279-48d6-a13a-189054e4d15b.png" width='120px' height='auto' loading="lazy" class="chakra-image css-1s16w59"></img>,
11+
href: '/'
12+
},
13+
{
14+
label: 'Twitter',
15+
icon: <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" height="1.05em" width="1.05em" xmlns="http://www.w3.org/2000/svg"><path width='1.8em' height='1.8em' d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg>,
16+
href: 'https://twitter.com/ApacheAPISIX'
17+
},
18+
{
19+
label: 'YouTube',
20+
icon: <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 576 512" height="1.05em" width="1.05em" xmlns="http://www.w3.org/2000/svg"><path width='1.8em' height='1.8em' d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path></svg>,
21+
href: 'https://www.youtube.com/channel/UCgPD18cMhOg5rmPVnQhAC8g'
22+
},
23+
{
24+
label: 'Github',
25+
icon: <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 496 512" height="1.05em" width="1.05em" xmlns="http://www.w3.org/2000/svg"><path width='1.8em' height='1.8em' d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg>,
26+
href: 'https://github.com/apache/apisix'
27+
}
28+
]
29+
return (
30+
<>
31+
<div
32+
style={{
33+
width: '100%',
34+
height: 'auto',
35+
display: 'flex',
36+
justifyContent: 'center',
37+
margin: '1.5rem 0 0',
38+
}}
39+
>
40+
<div
41+
className='footbox'
42+
style={{
43+
width: '65%',
44+
display: 'flex',
45+
justifyContent: "space-between",
46+
alignItems: 'center',
47+
padding: '0.5rem 0.75rem',
48+
borderTop: '1px solid #e5e7eb',
49+
}}
50+
>
51+
<div
52+
style={{
53+
display: 'flex',
54+
alignItems: 'center',
55+
}}
56+
>
57+
{
58+
footerLinks.map((item) => {
59+
return (
60+
<a
61+
className='leftbottomtext'
62+
key={item.label}
63+
href={item.href}
64+
style={{
65+
color: '#4b5563',
66+
marginLeft: '0.75rem'
67+
}}
68+
>{item.icon}</a>
69+
)
70+
})
71+
}
72+
</div>
73+
<div>
74+
<span
75+
style={{
76+
fontSize: '12px',
77+
color: '#4b5563',
78+
}}
79+
>
80+
Sponsored by
81+
<a
82+
className='rightbottomtext'
83+
href='https://api7.ai'
84+
style={{
85+
fontWeight: '700',
86+
color: 'rgb(59 130 246)',
87+
textDecoration: 'none',
88+
padding: '0 4px'
89+
}}
90+
>API7.ai</a>
91+
</span>
92+
</div>
93+
</div>
94+
</div>
95+
</>
96+
)
97+
}
98+
99+
export default App

src/components/Footer/style.css

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.leftbottomtext:hover {
2+
opacity: 0.8;
3+
}
4+
5+
.rightbottomtext:hover {
6+
opacity: 0.8;
7+
}
8+
9+
@media only screen and (max-width:768px) {
10+
.footbox {
11+
min-width: 90%;
12+
flex-direction: column
13+
}
14+
}

src/components/Navbar/index.jsx

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
import React from "react";
2+
import { useState } from "react";
3+
4+
import './style.css'
5+
6+
const App = () => {
7+
8+
const [showNavContent, setShowNavContent] = useState(true)
9+
10+
const switchBtn = () => {
11+
setShowNavContent(showNavContent => !showNavContent)
12+
}
13+
14+
const navLeftList = [
15+
{
16+
label: <img alt="Logo" src="https://static.apiseven.com/202108/1648866052600-a71c5469-f81c-4b52-8c20-76eef2987dfc.png" width='120px' height='auto' loading="lazy" class="chakra-image css-1s16w59"></img>,
17+
href: '/'
18+
},
19+
{
20+
label: 'Blog',
21+
href: 'https://api7.ai/blog',
22+
},
23+
{
24+
label: 'About Us',
25+
href: 'https://api7.ai/about'
26+
}
27+
]
28+
const navRightList = [
29+
{
30+
label: 'Star',
31+
href: 'https://github.com/api7/contributor-graph'
32+
}
33+
]
34+
35+
return (
36+
<div
37+
style={{
38+
width: '100%',
39+
marginBottom: '40px',
40+
}}
41+
>
42+
<div
43+
className="main"
44+
style={{
45+
width: '100%',
46+
height: '3.5rem',
47+
backgroundColor: 'RGB(54,54,54)',
48+
display: 'flex',
49+
justifyContent: 'center',
50+
}}
51+
>
52+
<div
53+
className="navcontent"
54+
style={{
55+
width: '65%',
56+
height: '100%',
57+
display: "flex",
58+
justifyContent: "space-between",
59+
alignItems: 'center',
60+
}}
61+
>
62+
<div
63+
style={{
64+
display: "flex",
65+
height: '100%',
66+
alignItems: 'center',
67+
}}
68+
>
69+
{
70+
navLeftList.map((item) => {
71+
return (
72+
<a
73+
className="leftcontent"
74+
href={item.href}
75+
key={item.label}
76+
>
77+
{item.label}
78+
</a>
79+
)
80+
})
81+
}
82+
</div>
83+
<div class='rightnav'>
84+
<svg color="RGB(245,245,245)" stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 496 512" height="1.3em" width="1.3em" xmlns="http://www.w3.org/2000/svg"><path width='1.8em' height='1.8em' d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg>
85+
{
86+
navRightList.map((item) => {
87+
return (
88+
<a
89+
className="rightcontent"
90+
href={item.href}
91+
key={item.label}
92+
style={{
93+
height: '100%',
94+
display: "flex",
95+
alignItems: 'center',
96+
textDecoration: 'none',
97+
color: 'RGB(245,245,245)',
98+
padding: '0 0.75em',
99+
fontSize: '16px',
100+
fontWeight: '600',
101+
marginLeft: '5px'
102+
}}
103+
>
104+
{item.label}
105+
</a>
106+
)
107+
})
108+
}
109+
</div>
110+
<div
111+
className="switchbtn"
112+
onClick={switchBtn}
113+
>
114+
<span className={showNavContent ? "navMobile" : 'navDesktop'}></span>
115+
<span className={showNavContent ? "navMobile" : 'navDesktoprotate'}></span>
116+
<span className={showNavContent ? "navMobile" : ''}></span>
117+
</div>
118+
</div>
119+
</div>
120+
<div
121+
className={showNavContent ? 'closebox' : 'openbox'}
122+
>
123+
{
124+
navRightList.map((item) => {
125+
return (
126+
<a
127+
key={item.label}
128+
style={{
129+
fontWeight: '600',
130+
height: '3rem',
131+
display: 'flex',
132+
alignItems: 'center',
133+
padding: '0 0.75rem',
134+
textDecoration: 'none',
135+
color: '#363636',
136+
}}
137+
href={item.href}>{item.label}
138+
</a>
139+
)
140+
})
141+
}
142+
</div>
143+
</div>
144+
)
145+
}
146+
147+
export default App

0 commit comments

Comments
 (0)