├── public
├── robots.txt
├── logo.png
├── manifest.json
└── index.html
├── README.md
├── src
├── style
│ ├── ytb.png
│ ├── index.css
│ └── App.css
├── component
│ ├── StateContext.jsx
│ ├── Header.jsx
│ ├── Footer.jsx
│ ├── TLItem.jsx
│ ├── TLMap.jsx
│ └── TLContainer.jsx
├── index.js
└── App.js
├── .gitignore
└── package.json
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EsrafilElahi/turkiyeburslari-timeline/HEAD/public/logo.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # turkiye-burslari---timeline
2 | reactjs
3 | responsive design
4 | google fonts
5 | api
6 |
7 |
--------------------------------------------------------------------------------
/src/style/ytb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EsrafilElahi/turkiyeburslari-timeline/HEAD/src/style/ytb.png
--------------------------------------------------------------------------------
/src/component/StateContext.jsx:
--------------------------------------------------------------------------------
1 | import {createContext} from 'react';
2 |
3 | export const StateContext = createContext({
4 | state:[]
5 | })
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom";
3 | import "./style/index.css";
4 | import App from "./App";
5 |
6 | ReactDOM.render(, document.getElementById("root"));
7 |
--------------------------------------------------------------------------------
/src/component/Header.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 |
3 | const Header = () => {
4 | return (
5 |
6 |
react timeline
7 | for turkiye burslari 2021 application calendar
8 |
9 | )
10 | }
11 |
12 | export default Header
13 |
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import './style/App.css'
3 | import Header from './component/Header'
4 | import TLContainer from './component/TLContainer'
5 | import Footer from './component/Footer'
6 |
7 |
8 | const App = () => {
9 |
10 | return (
11 |
12 |
13 |
14 |
15 |
16 | )
17 | }
18 |
19 | export default App;
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/src/style/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/src/component/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ytbImg from '../style/ytb.png'
3 |
4 | const Footer = () => {
5 |
6 | return (
7 |
8 |
Esrafil Elahi
9 |

10 |
2021 - TURKIYE SCHOLARSHIPS
11 |
12 | );
13 | }
14 |
15 | export default Footer;
16 |
--------------------------------------------------------------------------------
/src/component/TLItem.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import '../style/App.css'
3 |
4 |
5 | const TLItem = ({ info }) => {
6 |
7 | return (
8 |
9 |
10 |
{info.date}
11 |
{info.title}
12 |
{info.desc}
13 |
14 |
15 |
16 |
17 | )
18 | }
19 |
20 | export default TLItem
21 |
--------------------------------------------------------------------------------
/src/component/TLMap.jsx:
--------------------------------------------------------------------------------
1 | import React, { useContext } from 'react'
2 | import { StateContext } from './StateContext'
3 | import TLItem from './TLItem'
4 | import { v4 as uuidv4 } from 'uuid'
5 | import '../style/App.css'
6 |
7 | const TLMap = () => {
8 | const context = useContext(StateContext)
9 | const { state } = context
10 |
11 | return (
12 |
13 |
14 |
15 | {state.map(info => (
16 |
17 | ))}
18 |
19 |
20 |
21 | )
22 | }
23 |
24 | export default TLMap
25 |
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
11 |
12 |
13 |
14 |
15 | Turkburslari Timeline
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "turkiyeburslari-timeline",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@testing-library/jest-dom": "^5.12.0",
7 | "@testing-library/react": "^11.2.7",
8 | "@testing-library/user-event": "^12.8.3",
9 | "react": "^17.0.2",
10 | "react-dom": "^17.0.2",
11 | "react-scripts": "4.0.3",
12 | "uuid": "^8.3.2",
13 | "web-vitals": "^1.1.2"
14 | },
15 | "scripts": {
16 | "start": "react-scripts start",
17 | "build": "react-scripts build",
18 | "test": "react-scripts test",
19 | "eject": "react-scripts eject"
20 | },
21 | "eslintConfig": {
22 | "extends": [
23 | "react-app",
24 | "react-app/jest"
25 | ]
26 | },
27 | "browserslist": {
28 | "production": [
29 | ">0.2%",
30 | "not dead",
31 | "not op_mini all"
32 | ],
33 | "development": [
34 | "last 1 chrome version",
35 | "last 1 firefox version",
36 | "last 1 safari version"
37 | ]
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/component/TLContainer.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react'
2 | import { StateContext } from './StateContext'
3 | import TLMap from './TLMap'
4 |
5 |
6 | const TLContainer = () => {
7 |
8 | const [infos] = useState([
9 | { date: '01-2021', title: '1st Period Applications Open - Research', desc: 'Research Scholarships' },
10 | { date: '01-2021', title: '4th Period Announcement of Results - Research', desc: 'Research Scholarships' },
11 | { date: '10-01-2021', title: 'Applications Open - Undergraduate and Postgraduate', desc: 'Undergraduate and Postgraduate Scholarships' },
12 | { date: '20-02-2021', title: 'Applications Close - Undergraduate and Postgraduate', desc: 'Undergraduate and Postgraduate Scholarships' },
13 | { date: '02-2021', title: 'Evaluation Process - Start - Undergraduate and Postgraduate', desc: 'Undergraduate and Postgraduate Scholarships' },
14 | { date: '03-2021', title: 'Interview Period - Start - Undergraduate and Postgraduate', desc: 'Undergraduate and Postgraduate Scholarships' },
15 | { date: '03-2021', title: '1st Period Applications Close - Research', desc: 'Research Scholarships' },
16 | { date: '04-2021', title: '2nd Period Applications Open - Research', desc: 'Research Scholarships' },
17 | { date: '04-2021', title: '1st Period Announcement of Results - Research', desc: 'Research Scholarships' },
18 | { date: '05-2021', title: 'Evaluation Process - End - Undergraduate and Postgraduate', desc: 'Undergraduate and Postgraduate Scholarships' },
19 | { date: '30-06-2021', title: '2nd Period Applications Close - Research', desc: 'Research Scholarships' },
20 | { date: '06-2021', title: 'Interview Period - End - Undergraduate and Postgraduate', desc: 'Undergraduate and Postgraduate Scholarships' },
21 | { date: '07-2021', title: '3rd Period Applications Open - Research', desc: 'Research Scholarships' },
22 | { date: '07-2021', title: '2nd Period Announcement of Results - Research', desc: 'Research Scholarships' },
23 | { date: '07-2021', title: 'Announcement of Results - Undergraduate and Postgraduate', desc: 'Undergraduate and Postgraduate Scholarships' },
24 | { date: '07-2021', title: 'Scholarship Agreement and Visa Procedures - Start - Undergraduate and Postgraduate', desc: 'Undergraduate and Postgraduate Scholarships' },
25 | { date: '08-2021', title: 'Scholarship Agreement and Visa Procedures - End - Undergraduate and Postgraduate', desc: 'Undergraduate and Postgraduate Scholarships' },
26 | { date: '09-2021', title: 'Travel of New Students to Turkey / Beginning of the Academic Year - Start - Undergraduate and Postgraduate', desc: 'Undergraduate and Postgraduate Scholarships' },
27 | { date: '09-2021', title: 'Travel of New Students to Turkey / Beginning of the Academic Year - End - Undergraduate and Postgraduate', desc: 'Undergraduate and Postgraduate Scholarships' },
28 | { date: '09-2021', title: '3rd Period Applications Close - Research', desc: 'Research Scholarships' },
29 | { date: '10-2021', title: '3rd Period Announcement of Results - Research', desc: 'Research Scholarships' },
30 | { date: '10-2021', title: '4th Period Applications Open - Research', desc: 'Research Scholarships' },
31 | { date: '10-2021', title: 'Applications Open - Success', desc: 'Success Scholarships' },
32 | { date: '10-2021', title: 'Evaluation Process - Start - Success', desc: 'Success Scholarships' },
33 | { date: '11-2021', title: 'Applications Close - Success', desc: 'Success Scholarships' },
34 | { date: '11-2021', title: 'Evaluation Process - End - Success', desc: 'Success Scholarships' },
35 | { date: '11-2021', title: 'Announcement of Results - Success', desc: 'Success Scholarships' },
36 | { date: '12-2021', title: '4th Period Applications Close - Research', desc: 'Research Scholarships' }
37 | ]);
38 |
39 | return (
40 |
41 |
42 |
43 |
44 |
45 | )
46 | }
47 |
48 | export default TLContainer
49 |
--------------------------------------------------------------------------------
/src/style/App.css:
--------------------------------------------------------------------------------
1 | /* ===================== Css Reset ====================== */
2 | @import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@300&family=Roboto+Slab:wght@100&display=swap');
3 | @import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@300&family=Roboto+Slab:wght@100&display=swap');
4 |
5 | body{
6 | background-color: #f6f5f7;
7 | }
8 |
9 | #root {
10 | width: 100%;
11 | }
12 |
13 | * {
14 | box-sizing: border-box;
15 | padding: 0;
16 | margin: 0;
17 | }
18 |
19 | /* ===================== Header ====================== */
20 |
21 | .header{
22 | height: 130px;
23 | font-size: 15px;
24 | padding: 10px;
25 | text-align: center;
26 | line-height: 45px;
27 | background-color: #0275d8;
28 | color: white;
29 | text-transform: capitalize;
30 | font-family: 'Roboto Slab', serif;
31 | letter-spacing: .5px;
32 | }
33 |
34 | .header2{
35 | padding-bottom: 15px;
36 | }
37 |
38 | /* ===================== Main ====================== */
39 |
40 | .timeline-container {
41 | background-color: #f6f5f7;
42 | display: flex;
43 | position: relative;
44 | flex-direction: column;
45 | margin: 85px 0;
46 | width: 750px;
47 | padding: 0 15px;
48 | margin-left: auto;
49 | margin-right: auto;
50 | }
51 |
52 | .timeline-container::after {
53 | background-color: rgba(207, 0, 0, 0.788);
54 | position: absolute;
55 | left: calc(50% - 2px);
56 | content: "";
57 | width: 4px;
58 | height: 100%;
59 | }
60 |
61 | .timeline-item {
62 | display: flex;
63 | justify-content: flex-end;
64 | width: 50%;
65 | margin: 10px 0;
66 | padding-right: 35px;
67 | font-family: 'Roboto Slab', serif;
68 | }
69 |
70 | .timeline-item:nth-child(even) {
71 | align-self: flex-end;
72 | justify-content: flex-start;
73 | padding-left: 35px;
74 | padding-right: 0;
75 | }
76 |
77 | .timeline-content {
78 | display: flex;
79 | flex-direction: column;
80 | align-items: flex-end;
81 | width: 350px;
82 | padding: 15px;
83 | text-align: right;
84 | position: relative;
85 | box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
86 | border-radius: 5px;
87 | }
88 |
89 | .timeline-item:nth-child(even) .timeline-content{
90 | align-items: flex-start;
91 | text-align: left;
92 | }
93 |
94 | .timeline-content::after{
95 | content: '';
96 | height: 15px;
97 | width: 15px;
98 | box-shadow: 1px -1px 1px rgba(0, 0, 0, 0.2);
99 | position: absolute;
100 | background-color: #f6f5f7;
101 | transform: rotate(45deg);
102 | right: -6.5px;
103 | top: 46%;
104 | }
105 |
106 | .timeline-item:nth-child(even) .timeline-content::after{
107 | right: auto;
108 | left: -7.5px;
109 | box-shadow: -1px 1px 1px rgba(0, 0, 0, 0.2);
110 | }
111 |
112 | .circle{
113 | background-color: #f6f5f7;
114 | border: 3px solid rgba(207,0,0, 0.788);
115 | width: 20px;
116 | height: 20px;
117 | position: absolute;
118 | border-radius: 50%;
119 | top: 44.5%;
120 | right: -45px;
121 | z-index: 1;
122 | }
123 |
124 | .timeline-item:nth-child(even) .timeline-content .circle{
125 | left: -45px;
126 | }
127 |
128 | .title{
129 | padding: 15px 0;
130 | line-height: 25px;
131 | font-size: 19px;
132 | font-weight: 600;
133 | }
134 |
135 | .date{
136 | background-color: #0275d8;
137 | color: white;
138 | text-transform: uppercase;
139 | padding: 2px 3px;
140 | font-weight: bold;
141 | letter-spacing: 1px;
142 | }
143 |
144 | .desc{
145 | font-size: 17px;
146 | font-weight: 600;
147 | color: rgba(41, 42, 43, 0.664);
148 | }
149 |
150 | /* ===================== Footer ====================== */
151 |
152 | .footer{
153 | height: 180px;
154 | background-color: #0275d8;
155 | display: flex;
156 | align-items: flex-start;
157 | justify-content: space-between;
158 | flex-direction: column;
159 | padding: 15px;
160 | font-family: 'Open Sans', sans-serif;
161 | }
162 |
163 | .name{
164 | font-size: 35px;
165 | letter-spacing: 1px;
166 | color: white;
167 | }
168 |
169 | .ytb-logo{
170 | align-self: flex-end;
171 | }
172 |
173 | .subfooter{
174 | letter-spacing: .5px;
175 | font-size: 17px;
176 | color: white;
177 | }
178 |
179 | /* ===================== Media Query ====================== */
180 |
181 | @media only screen and (max-width:767px) {
182 | .header{
183 | font-size: 8px;
184 | }
185 |
186 | .timeline-item:nth-child(even){
187 | align-self: flex-start;
188 | }
189 |
190 | .timeline-item:nth-child(even) {
191 | align-self: flex-start;
192 | justify-content: flex-start;
193 | padding-left: 0;
194 | padding-right: 35px;
195 | }
196 |
197 | .timeline-item:nth-child(even) .timeline-content{
198 | align-items: flex-end;
199 | text-align: right;
200 | }
201 |
202 | .timeline-item:nth-child(even) .timeline-content::after{
203 | left: auto;
204 | right: -7.5px;
205 | box-shadow: 1px -1px 1px rgba(0, 0, 0, 0.2);
206 | }
207 |
208 | .timeline-item:nth-child(even) .timeline-content .circle{
209 | left: auto;
210 | }
211 |
212 | .name{
213 | font-size: 20px;
214 | letter-spacing: 1px;
215 | color: white;
216 | }
217 |
218 | .ytb-logo{
219 | align-self: flex-end;
220 | width: 110px;
221 | height: 50px;;
222 | }
223 |
224 | .subfooter{
225 | letter-spacing: .5px;
226 | font-size: 11px;
227 | color: white;
228 | }
229 | }
230 |
--------------------------------------------------------------------------------