├── .gitignore
├── README.md
├── _redirects
├── images
├── s1.PNG
└── s2.PNG
├── package-lock.json
├── package.json
├── public
├── Akshat_logo.jpg
├── _redirects
├── favicon.ico
├── index.html
├── logo192.png
├── logo512.png
├── manifest.json
└── robots.txt
└── src
├── App.css
├── App.js
├── App.test.js
├── components
├── ChooseBatch.jsx
├── ChooseOpenElective.jsx
├── ChooseProfessionalElectiveB.jsx
├── ChooseProfessionalElectiveD.jsx
├── Footer.jsx
├── MobileNavigation.jsx
├── Navigation.jsx
└── Timetable.jsx
├── css
├── Footer.css
├── MobileNavigation.css
├── Navigation.css
└── Timetable.css
├── index.css
├── index.js
├── reportWebVitals.js
├── setupTests.js
└── timetable
├── batch1.json
├── batch2.json
├── openelectives.json
└── professionalelectives.json
/.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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
Welcome to SRM-TimeTable Web-App 👋
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | > A simple Web-App displaying the time slots of respective subjects with their joining meet link.
13 |
14 | ## PREVIEW
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | ## Install
23 |
24 | ```sh
25 | npm install
26 | ```
27 |
28 | ## Usage
29 |
30 | ```sh
31 | npm start
32 | ```
33 |
34 | ## Run tests
35 |
36 | ```sh
37 | npm run test
38 | ```
39 |
40 |
41 | ## Author
42 |
43 | 👤 **Akshat Sachan**
44 |
45 | * Website: sachan.netlify.com
46 | * Twitter: [SachanAK36](https://twitter.com/sachanaks36)
47 | * Github: [CryptocoderAS](https://github.com/CryptocoderAS)
48 | * LinkedIn: [Akshat Sachan](https://www.linkedin.com/in/akshat-sachan-58b2921ab/)
49 |
50 | ## Show your support
51 |
52 | Give a ⭐️ if this project helped you!
53 |
54 | ## 📝 License
55 | Original Repo [Md. Muazam](https://github.com/mmuazam98/mytimetable)
56 | Copyright © 2021 [Akshat Sachan](https://github.com/CryptocoderAS).
57 | This project is [Open Source](none) licensed.
58 |
59 |
--------------------------------------------------------------------------------
/_redirects:
--------------------------------------------------------------------------------
1 | /* /index.html 200
--------------------------------------------------------------------------------
/images/s1.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CRYPTOcoderAS/SRM-TimeTable/f486f38deae976f75ebbae51a861b5816678dc90/images/s1.PNG
--------------------------------------------------------------------------------
/images/s2.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CRYPTOcoderAS/SRM-TimeTable/f486f38deae976f75ebbae51a861b5816678dc90/images/s2.PNG
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "timetable",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@material-ui/core": "^4.12.2",
7 | "@material-ui/icons": "^4.11.2",
8 | "@testing-library/jest-dom": "^5.14.1",
9 | "@testing-library/react": "^11.2.7",
10 | "@testing-library/user-event": "^12.8.3",
11 | "jquery": "^3.6.0",
12 | "react": "^17.0.2",
13 | "react-dom": "^17.0.2",
14 | "react-router-dom": "^5.2.0",
15 | "react-scripts": "4.0.3",
16 | "web-vitals": "^1.1.2"
17 | },
18 | "scripts": {
19 | "start": "react-scripts start",
20 | "build": "react-scripts build",
21 | "test": "react-scripts test",
22 | "eject": "react-scripts eject"
23 | },
24 | "eslintConfig": {
25 | "extends": [
26 | "react-app",
27 | "react-app/jest"
28 | ]
29 | },
30 | "browserslist": {
31 | "production": [
32 | ">0.2%",
33 | "not dead",
34 | "not op_mini all"
35 | ],
36 | "development": [
37 | "last 1 chrome version",
38 | "last 1 firefox version",
39 | "last 1 safari version"
40 | ]
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/public/Akshat_logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CRYPTOcoderAS/SRM-TimeTable/f486f38deae976f75ebbae51a861b5816678dc90/public/Akshat_logo.jpg
--------------------------------------------------------------------------------
/public/_redirects:
--------------------------------------------------------------------------------
1 | /* /index.html 200
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CRYPTOcoderAS/SRM-TimeTable/f486f38deae976f75ebbae51a861b5816678dc90/public/favicon.ico
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Time Table
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CRYPTOcoderAS/SRM-TimeTable/f486f38deae976f75ebbae51a861b5816678dc90/public/logo192.png
--------------------------------------------------------------------------------
/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CRYPTOcoderAS/SRM-TimeTable/f486f38deae976f75ebbae51a861b5816678dc90/public/logo512.png
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "Akshat_logo.jpg",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "Akshat_logo.jpg",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "Akshat_logo.jpg",
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/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/src/App.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CRYPTOcoderAS/SRM-TimeTable/f486f38deae976f75ebbae51a861b5816678dc90/src/App.css
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
3 | import Navigation from "./components/Navigation";
4 | import MobileNavigation from "./components/MobileNavigation";
5 | import Timetable from "./components/Timetable";
6 | import Footer from "./components/Footer";
7 | const App = () => {
8 | return (
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | );
20 | };
21 |
22 | export default App;
23 |
--------------------------------------------------------------------------------
/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render();
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/src/components/ChooseBatch.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import { makeStyles } from "@material-ui/core/styles";
3 | import InputLabel from "@material-ui/core/InputLabel";
4 | import MenuItem from "@material-ui/core/MenuItem";
5 | import FormControl from "@material-ui/core/FormControl";
6 | import Select from "@material-ui/core/Select";
7 |
8 | const useStyles = makeStyles((theme) => ({
9 | formControl: {
10 | margin: theme.spacing(1),
11 | minWidth: 120,
12 | },
13 | selectEmpty: {
14 | marginTop: theme.spacing(2),
15 | },
16 | }));
17 | const ChooseBatch = (props) => {
18 | const classes = useStyles();
19 | const currBatch = localStorage.getItem("batch") || 1;
20 | const [batch, setBatch] = useState(parseInt(currBatch));
21 |
22 | const handleChange = (event) => {
23 | setBatch(event.target.value);
24 | localStorage.setItem("batch", event.target.value);
25 | props.showTimetable();
26 | };
27 | return (
28 |
29 | Batch
30 |
34 |
35 | );
36 | };
37 |
38 | export default ChooseBatch;
39 |
--------------------------------------------------------------------------------
/src/components/ChooseOpenElective.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { makeStyles } from "@material-ui/core/styles";
3 | import InputLabel from "@material-ui/core/InputLabel";
4 | import MenuItem from "@material-ui/core/MenuItem";
5 | import FormControl from "@material-ui/core/FormControl";
6 | import Select from "@material-ui/core/Select";
7 | import ope from "../timetable/openelectives.json";
8 | const useStyles = makeStyles((theme) => ({
9 | formControl: {
10 | margin: theme.spacing(1),
11 | minWidth: 120,
12 | },
13 | selectEmpty: {
14 | marginTop: theme.spacing(2),
15 | },
16 | }));
17 | const ChooseOpenElective = (props) => {
18 | const classes = useStyles();
19 | const [electives, setElectives] = useState([]);
20 | const currPE1 = localStorage.getItem("currOE") || "18NTO308T";
21 | const [oe, setOE] = useState(currPE1);
22 |
23 | const handleChange = (event) => {
24 | setOE(event.target.value);
25 | localStorage.setItem("currOE", event.target.value);
26 | props.showTimetable();
27 | };
28 | useEffect(() => {
29 | setElectives(ope);
30 | }, []);
31 | return (
32 |
33 | G slot
34 |
43 |
44 | );
45 | };
46 |
47 | export default ChooseOpenElective;
48 |
--------------------------------------------------------------------------------
/src/components/ChooseProfessionalElectiveB.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { makeStyles } from "@material-ui/core/styles";
3 | import InputLabel from "@material-ui/core/InputLabel";
4 | import MenuItem from "@material-ui/core/MenuItem";
5 | import FormControl from "@material-ui/core/FormControl";
6 | import Select from "@material-ui/core/Select";
7 | import pe from "../timetable/professionalelectives.json";
8 | const useStyles = makeStyles((theme) => ({
9 | formControl: {
10 | margin: theme.spacing(1),
11 | minWidth: 120,
12 | },
13 | selectEmpty: {
14 | marginTop: theme.spacing(2),
15 | },
16 | }));
17 | const ChooseProfessionalElective = (props) => {
18 | const classes = useStyles();
19 | const [electives, setElectives] = useState([]);
20 | const currPE1 = localStorage.getItem("currPE1") || "18CSE355T";
21 | const [pe1, setPe1] = useState(currPE1);
22 |
23 | const handleChange = (event) => {
24 | setPe1(event.target.value);
25 | localStorage.setItem("currPE1", event.target.value);
26 | props.showTimetable();
27 | };
28 | useEffect(() => {
29 | setElectives(pe);
30 | }, []);
31 | return (
32 |
33 | B slot
34 |
45 |
46 | );
47 | };
48 |
49 | export default ChooseProfessionalElective;
50 |
--------------------------------------------------------------------------------
/src/components/ChooseProfessionalElectiveD.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { makeStyles } from "@material-ui/core/styles";
3 | import InputLabel from "@material-ui/core/InputLabel";
4 | import MenuItem from "@material-ui/core/MenuItem";
5 | import FormControl from "@material-ui/core/FormControl";
6 | import Select from "@material-ui/core/Select";
7 | import pe from "../timetable/professionalelectives.json";
8 | const useStyles = makeStyles((theme) => ({
9 | formControl: {
10 | margin: theme.spacing(1),
11 | minWidth: 120,
12 | },
13 | selectEmpty: {
14 | marginTop: theme.spacing(2),
15 | },
16 | }));
17 | const ChooseProfessionalElective = (props) => {
18 | const classes = useStyles();
19 | const [electives, setElectives] = useState([]);
20 | const currPE1 = localStorage.getItem("currPE2") || "18CSE352T";
21 | const [pe2, setPe2] = useState(currPE1);
22 |
23 | const handleChange = (event) => {
24 | setPe2(event.target.value);
25 | localStorage.setItem("currPE2", event.target.value);
26 | props.showTimetable();
27 | };
28 | useEffect(() => {
29 | setElectives(pe);
30 | }, []);
31 | return (
32 |
33 | D slot
34 |
45 |
46 | );
47 | };
48 |
49 | export default ChooseProfessionalElective;
50 |
--------------------------------------------------------------------------------
/src/components/Footer.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import GitHubIcon from "@material-ui/icons/GitHub";
3 | import "../css/Footer.css";
4 | const Footer = () => {
5 | return (
6 |
11 | );
12 | };
13 |
14 | export default Footer;
15 |
--------------------------------------------------------------------------------
/src/components/MobileNavigation.jsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import { Link, useLocation } from "react-router-dom";
3 |
4 | import "../css/MobileNavigation.css";
5 | const MobileNavigation = () => {
6 | const location = useLocation();
7 |
8 | useEffect(() => {
9 | let list = document.querySelectorAll(".list");
10 |
11 | let currPage = location.pathname;
12 | currPage = parseInt(currPage[1]) || 1;
13 | list.forEach((e, index) => {
14 | if (index + 1 === currPage) {
15 | e.classList.add("active");
16 | }
17 | });
18 | for (let i = 0; i < list.length; i++) {
19 | list[i].onclick = (e) => {
20 | let j = 0;
21 | while (j < list.length) {
22 | list[j++].className = "list";
23 | }
24 | list[i].className = "list active";
25 | };
26 | }
27 | // eslint-disable-next-line
28 | }, []);
29 | return (
30 |
31 |
32 |
33 | -
34 |
35 | 1
36 | Day Order 1
37 |
38 |
39 | -
40 |
41 | 2
42 | Day Order 2
43 |
44 |
45 | -
46 |
47 | 3
48 | Day Order 3
49 |
50 |
51 | -
52 |
53 | 4
54 | Day Order 4
55 |
56 |
57 | -
58 |
59 | 5
60 | Day Order 5
61 |
62 |
63 |
64 |
65 |
66 |
67 | );
68 | };
69 |
70 | export default MobileNavigation;
71 |
--------------------------------------------------------------------------------
/src/components/Navigation.jsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import "../css/Navigation.css";
3 | import { Link, useLocation } from "react-router-dom";
4 | import $ from "jquery";
5 |
6 | const Navigation = () => {
7 | const location = useLocation();
8 | useEffect(() => {
9 | const setActivePage = () => {
10 | let tabsNewAnim = $("#navbarSupportedContent");
11 | // let selectorNewAnim = $("#navbarSupportedContent").find("li").length;
12 | const links = document.querySelectorAll(".nav-item");
13 | let currPage = location.pathname;
14 | currPage = parseInt(currPage[1]) || 1;
15 | links.forEach((e, index) => {
16 | if (index + 1 === currPage) {
17 | e.classList.add("active");
18 | }
19 | });
20 | let activeItemNewAnim = tabsNewAnim.find(".active");
21 | let activeWidthNewAnimHeight = activeItemNewAnim.innerHeight();
22 | let activeWidthNewAnimWidth = activeItemNewAnim.innerWidth();
23 | let itemPosNewAnimTop = activeItemNewAnim.position();
24 | let itemPosNewAnimLeft = activeItemNewAnim.position();
25 | $(".hori-selector").css({
26 | top: itemPosNewAnimTop.top + "px",
27 | left: itemPosNewAnimLeft.left + "px",
28 | height: activeWidthNewAnimHeight + "px",
29 | width: activeWidthNewAnimWidth + "px",
30 | });
31 | $("#navbarSupportedContent").on("click", "li", function (e) {
32 | $("#navbarSupportedContent ul li").removeClass("active");
33 | $(this).addClass("active");
34 | let activeWidthNewAnimHeight = $(this).innerHeight();
35 | let activeWidthNewAnimWidth = $(this).innerWidth();
36 | let itemPosNewAnimTop = $(this).position();
37 | let itemPosNewAnimLeft = $(this).position();
38 | $(".hori-selector").css({
39 | top: itemPosNewAnimTop.top + "px",
40 | left: itemPosNewAnimLeft.left + "px",
41 | height: activeWidthNewAnimHeight + "px",
42 | width: activeWidthNewAnimWidth + "px",
43 | });
44 | });
45 | };
46 | $(document).ready(function () {
47 | setTimeout(function () {
48 | setActivePage();
49 | }, 0);
50 | });
51 | $(window).on("resize", function () {
52 | setTimeout(function () {
53 | setActivePage();
54 | }, 500);
55 | });
56 | $(".navbar-toggler").click(function () {
57 | setTimeout(function () {
58 | setActivePage();
59 | });
60 | });
61 | // eslint-disable-next-line
62 | }, []);
63 | return (
64 | <>
65 |
66 |
101 |
102 | >
103 | );
104 | };
105 |
106 | export default Navigation;
107 |
--------------------------------------------------------------------------------
/src/components/Timetable.jsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import "../css/Timetable.css";
3 | import batch1 from "../timetable/batch1.json";
4 | import batch2 from "../timetable/batch2.json";
5 | import ChooseBatch from "./ChooseBatch";
6 | import ChooseProfessionalElectiveB from "./ChooseProfessionalElectiveB";
7 | import ChooseProfessionalElectiveD from "./ChooseProfessionalElectiveD";
8 | import peb from "../timetable/professionalelectives.json";
9 | import ped from "../timetable/professionalelectives.json";
10 | import oe from "../timetable/openelectives.json";
11 | import ChooseOpenElective from "./ChooseOpenElective";
12 | import { makeStyles } from "@material-ui/core/styles";
13 | import Card from "@material-ui/core/Card";
14 | import CardActions from "@material-ui/core/CardActions";
15 | import CardContent from "@material-ui/core/CardContent";
16 | import Button from "@material-ui/core/Button";
17 | import Typography from "@material-ui/core/Typography";
18 | import { useLocation } from "react-router-dom";
19 | import GitHubIcon from "@material-ui/icons/GitHub";
20 |
21 | const useStyles = makeStyles({
22 | root: {
23 | minWidth: 275,
24 | maxWidth: 800,
25 | },
26 |
27 | title: {
28 | fontSize: 14,
29 | },
30 | teacher: {
31 | marginBottom: 12,
32 | },
33 | space: {
34 | marginLeft: 5,
35 | },
36 | });
37 | const Timetable = () => {
38 | let location = useLocation();
39 | const [timetable, setTimeTable] = useState([]);
40 | const showTimetable = () => {
41 | const bslot = localStorage.getItem("currPE1") || "18CSE355T";
42 | const dslot = localStorage.getItem("currPE2") || "18CSE352T";
43 | const gslot = localStorage.getItem("currOE") || "18NTO308T";
44 | const pe1 = peb.filter((p) => {
45 | return p.subjectCode === bslot;
46 | });
47 | const pe2 = ped.filter((p) => {
48 | return p.subjectCode === dslot;
49 | });
50 | const oe1 = oe.filter((o) => {
51 | return o.subjectCode === gslot;
52 | });
53 | const batch = parseInt(localStorage.getItem("batch")) || 1;
54 | const dayOrder = parseInt(location.pathname[1]) || 1;
55 | console.log(bslot, dslot, pe2);
56 | if (batch === 1) {
57 | const Timetable = batch1[dayOrder - 1].concat();
58 | Timetable.forEach((e, index) => {
59 | if (e.subjectSlot === "B") {
60 | const updatedSlot = { ...e, ...pe1[0] };
61 | Timetable[index] = updatedSlot;
62 | }
63 | if (e.subjectSlot === "D") {
64 | const updatedSlot = { ...e, ...pe2[0] };
65 | Timetable[index] = updatedSlot;
66 | }
67 | if (e.subjectSlot === "G") {
68 | const updatedSlot = { ...e, ...oe1[0] };
69 | Timetable[index] = updatedSlot;
70 | }
71 | });
72 | console.log(timetable);
73 | setTimeTable(Timetable);
74 | } else {
75 | const Timetable = batch2[dayOrder - 1].concat();
76 | Timetable.forEach((e, index) => {
77 | if (e.subjectSlot === "B") {
78 | const updatedSlot = { ...e, ...pe1[0] };
79 | Timetable[index] = updatedSlot;
80 | }
81 | if (e.subjectSlot === "D") {
82 | const updatedSlot = { ...e, ...pe2[0] };
83 | Timetable[index] = updatedSlot;
84 | }
85 | if (e.subjectSlot === "G") {
86 | const updatedSlot = { ...e, ...oe1[0] };
87 | Timetable[index] = updatedSlot;
88 | }
89 | });
90 | console.log(timetable);
91 | setTimeTable(Timetable);
92 | }
93 | };
94 | useEffect(() => {
95 | showTimetable();
96 | // eslint-disable-next-line
97 | }, [location]);
98 |
99 | const classes = useStyles();
100 | return (
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
114 | {console.log(timetable)}
115 | {timetable.map((tt, index) => {
116 | return (
117 |
118 |
119 |
120 | Slot: {tt.slot}
121 |
122 |
123 | {tt.subjectName}
124 | ({tt.subjectCode})
125 |
126 |
127 | {tt.teacher} ({tt.teacherCode})
128 |
129 |
130 | {tt.category}
131 | {tt.type}
132 |
133 |
134 | {tt.subjectSlot}
135 |
136 |
137 |
138 |
141 |
142 |
143 | );
144 | })}
145 |
146 |
147 | );
148 | };
149 |
150 | export default Timetable;
151 |
--------------------------------------------------------------------------------
/src/css/Footer.css:
--------------------------------------------------------------------------------
1 | footer {
2 | width: 100%;
3 | background-color: #022f36;
4 | padding: 20px;
5 | text-align: center;
6 | box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.3);
7 | font-size: 12px;
8 | }
9 | footer a {
10 | margin-left: 10px;
11 | }
12 | footer svg {
13 | width: 0.9em !important;
14 | fill: #6aaeb9 !important;
15 | }
16 | @media (max-width: 767px) {
17 | footer {
18 | display: none;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/css/MobileNavigation.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css2?family=Tourney:wght@500;600&display=swap");
2 | .bottom-nav {
3 | display: none;
4 | position: fixed;
5 | left: 50%;
6 | transform: translateX(-50%);
7 | bottom: 10px;
8 | }
9 | .navigation {
10 | position: relative;
11 | width: 350px;
12 | height: 70px;
13 | border-radius: 40px;
14 | background-color: #fff;
15 | box-shadow: rgba(50, 50, 93, 0.35) 0px 0px 12px -2px, rgba(0, 0, 0, 0.3) 0px 3px 7px -3px;
16 | transition: all 0.3s;
17 | }
18 |
19 | .navigation ul {
20 | position: absolute;
21 | top: 0;
22 | left: 0;
23 | width: 100%;
24 | display: flex;
25 | }
26 | .navigation ul li {
27 | position: relative;
28 | list-style: none;
29 | width: 70px;
30 | height: 70px;
31 | z-index: 1;
32 | }
33 | .navigation ul li a {
34 | text-decoration: none;
35 | position: relative;
36 | display: flex;
37 | justify-content: center;
38 | align-items: center;
39 | width: 100%;
40 | text-align: center;
41 | color: #333;
42 | font-weight: 500;
43 | font-family: "Tourney", cursive;
44 | }
45 | .navigation ul li a .icon {
46 | position: relative;
47 | display: block;
48 | line-height: 70px;
49 | text-align: center;
50 | transition: 0.5s;
51 | font-weight: 600;
52 | }
53 | .navigation ul li.active a .icon {
54 | color: #fff;
55 | }
56 | .navigation ul li a .icon {
57 | font-size: 20px;
58 | }
59 | .navigation ul li a .title {
60 | font-family: "Roboto", sans-serif;
61 |
62 | position: absolute;
63 | top: -40px;
64 | left: 50%;
65 | transform: translate(-50%, 15%);
66 | width: 120px;
67 | background: #fff;
68 | padding: 5px 10px;
69 | border-radius: 7px;
70 | transition: 0.5s;
71 | opacity: 0;
72 | box-shadow: rgba(0, 0, 0, 0.16) 0px 3px 6px, rgba(0, 0, 0, 0.23) 0px 3px 6px;
73 | visibility: hidden;
74 | }
75 | .navigation ul li:hover a .title {
76 | opacity: 1;
77 | visibility: visible;
78 | transform: translate(-50%, 50%);
79 | }
80 | .navigation ul li a .title::before {
81 | content: "";
82 | position: absolute;
83 | width: 12px;
84 | height: 12px;
85 | background-color: #fff;
86 | bottom: -8px;
87 | left: 48%;
88 | transform: rotate(45deg) translateX(-50%);
89 | border-radius: 2px;
90 | }
91 | .navigation ul .indicator {
92 | position: absolute;
93 | left: 0;
94 | width: 70px;
95 | height: 70px;
96 | transition: all 0.5s;
97 | }
98 | .navigation ul .indicator::before {
99 | content: "";
100 | position: absolute;
101 | top: 50%;
102 | left: 50%;
103 | transform: translate(-50%, -50%);
104 | background-color: #333;
105 | width: 50px;
106 | height: 50px;
107 | border-radius: 50%;
108 | transition: 0.5s;
109 | }
110 | .navigation ul li:nth-child(1).active ~ .indicator {
111 | transform: translateX(calc(70px * 0));
112 | }
113 | .navigation ul li:nth-child(2).active ~ .indicator {
114 | transform: translateX(calc(70px * 1));
115 | }
116 | .navigation ul li:nth-child(3).active ~ .indicator {
117 | transform: translateX(calc(70px * 2));
118 | }
119 | .navigation ul li:nth-child(4).active ~ .indicator {
120 | transform: translateX(calc(70px * 3));
121 | }
122 | .navigation ul li:nth-child(5).active ~ .indicator {
123 | transform: translateX(calc(70px * 4));
124 | }
125 |
126 | .navigation ul li.active ~ .indicator::before {
127 | background-color: var(--nav);
128 | }
129 | @media (max-width: 767px) {
130 | .bottom-nav {
131 | display: block !important;
132 | }
133 | }
134 | @media (max-width: 550px) {
135 | .navigation {
136 | transform: scale(0.85);
137 | }
138 | }
139 |
--------------------------------------------------------------------------------
/src/css/Navigation.css:
--------------------------------------------------------------------------------
1 | .top-nav nav i {
2 | margin-right: 10px;
3 | }
4 | .top-nav .navbar-logo {
5 | padding: 15px;
6 | color: #fff;
7 | }
8 | .top-nav .navbar-mainbg {
9 | background-color: var(--nav);
10 | padding: 0px;
11 | }
12 | .top-nav #navbarSupportedContent {
13 | overflow: hidden;
14 | position: relative;
15 | }
16 | .top-nav #navbarSupportedContent ul {
17 | padding: 0px;
18 | margin: 0px;
19 | }
20 | .top-nav #navbarSupportedContent ul li a i {
21 | margin-right: 10px;
22 | }
23 | .top-nav #navbarSupportedContent li {
24 | list-style-type: none;
25 | float: left;
26 | }
27 | .top-nav #navbarSupportedContent ul li a {
28 | color: rgba(255, 255, 255, 0.5);
29 | text-decoration: none;
30 | font-size: 15px;
31 | display: block;
32 | padding: 20px 20px;
33 | transition-duration: 0.6s;
34 | transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
35 | position: relative;
36 | }
37 | .top-nav #navbarSupportedContent > ul > li.active > a {
38 | color: var(--nav);
39 | background-color: transparent;
40 | transition: all 0.7s;
41 | }
42 | .top-nav #navbarSupportedContent a:not(:only-child):after {
43 | content: "\f105";
44 | position: absolute;
45 | right: 20px;
46 | top: 10px;
47 | font-size: 14px;
48 | font-family: "Font Awesome 5 Free";
49 | display: inline-block;
50 | padding-right: 3px;
51 | vertical-align: middle;
52 | font-weight: 900;
53 | transition: 0.5s;
54 | }
55 | .top-nav #navbarSupportedContent .active > a:not(:only-child):after {
56 | transform: rotate(90deg);
57 | }
58 | .top-nav #navbarSupportedContent ul li i {
59 | display: none;
60 | }
61 | .top-nav .hori-selector {
62 | display: inline-block;
63 | position: absolute;
64 | height: 100%;
65 | top: 0px;
66 | left: 0px;
67 | transition-duration: 0.6s;
68 | transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
69 | background-color: #f8f7ff;
70 | border-top-left-radius: 15px;
71 | border-top-right-radius: 15px;
72 | margin-top: 10px;
73 | }
74 | .top-nav .hori-selector .right,
75 | .top-nav .hori-selector .left {
76 | position: absolute;
77 | width: 25px;
78 | height: 25px;
79 | background-color: #f8f7ff;
80 | bottom: 10px;
81 | }
82 | .top-nav .hori-selector .right {
83 | right: -25px;
84 | }
85 | .top-nav .hori-selector .left {
86 | left: -25px;
87 | }
88 | .top-nav .hori-selector .right:before,
89 | .top-nav .hori-selector .left:before {
90 | content: "";
91 | position: absolute;
92 | width: 50px;
93 | height: 50px;
94 | border-radius: 50%;
95 | background-color: var(--nav);
96 | }
97 | .top-nav .hori-selector .right:before {
98 | bottom: 0;
99 | right: -25px;
100 | }
101 | .top-nav .hori-selector .left:before {
102 | bottom: 0;
103 | left: -25px;
104 | }
105 | @media (max-width: 992px) {
106 | .top-nav #navbarSupportedContent ul li a {
107 | padding: 20px 20px;
108 | }
109 | }
110 | @media (min-width: 767px) {
111 | .top-nav .navbar-expand-custom {
112 | -ms-flex-flow: row nowrap;
113 | flex-flow: row nowrap;
114 | -ms-flex-pack: start;
115 | justify-content: flex-start;
116 | }
117 | .top-nav .navbar-expand-custom .navbar-nav {
118 | -ms-flex-direction: row;
119 | flex-direction: row;
120 | }
121 | .top-nav .navbar-expand-custom .navbar-toggler {
122 | display: none;
123 | }
124 | .top-nav .navbar-expand-custom .navbar-collapse {
125 | display: -ms-flexbox !important;
126 | display: flex !important;
127 | -ms-flex-preferred-size: auto;
128 | flex-basis: auto;
129 | }
130 | }
131 | @media (max-width: 766px) {
132 | .top-nav {
133 | display: none;
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/src/css/Timetable.css:
--------------------------------------------------------------------------------
1 | .timetable .container {
2 | margin: 100px auto 50px;
3 | max-width: 900px;
4 | background: repeating-linear-gradient(45deg, black, transparent 100px);
5 |
6 | }
7 | .timetable .container .options {
8 | display: flex;
9 | justify-content: center;
10 | align-items: center;
11 | flex-wrap: wrap;
12 | display: flex;
13 | justify-content: center;
14 | align-items: center;
15 | flex-wrap: wrap;
16 | background: linear-gradient( 45deg, #b0b793, transparent);
17 | box-shadow: rgb(52 144 22) 1.95px 1.95px 2.6px;
18 | position: relative;
19 | margin-top: 20px;
20 | border-radius: 10px;
21 | padding: 5px 10px 15px 10px;
22 | box-shadow: rgb(52 144 22) 1.95px 1.95px 2.6px;
23 | margin: 20px auto 0;
24 | border: none;
25 | background: linear-gradient( 45deg, #b0b793, transparent);
26 | }
27 | .timetable .container .subject-details {
28 | margin: 0 8px;
29 | margin-left: 0;
30 | font-size: 12px;
31 | border: 1px solid #777;
32 | padding: 5px 8px;
33 | border-radius: 12px;
34 | color: #666;
35 | }
36 | .timetable .container .MuiPaper-rounded {
37 | /* position: relative;
38 | margin-top: 20px;
39 | border-radius: 10px;
40 | padding: 5px 10px 15px 10px;
41 | box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px;
42 | margin: 20px auto 0;
43 | border: none; */
44 |
45 | position: relative;
46 | margin-top: 20px;
47 | border-radius: 10px;
48 | padding: 5px 10px 15px 10px;
49 | box-shadow: rgb(52 144 22) 1.95px 1.95px 2.6px;
50 | margin: 20px auto 0;
51 | border: none;
52 | background: linear-gradient(45deg, #b0b793, transparent);
53 | }
54 | .timetable button {
55 | position: relative;
56 | left: 10px;
57 | background-color: var(--nav);
58 | color: white;
59 | }
60 | .timetable button:hover {
61 | background-color: var(--nav);
62 | }
63 | .timetable .MuiTypography-h5 {
64 | line-height: normal;
65 | max-width: 480px;
66 | }
67 | .timetable .github {
68 | display: none;
69 | position: absolute;
70 | right: 10px;
71 | top: 10px;
72 | padding: 4px 5px 5px;
73 | border-radius: 50%;
74 | background: var(--nav);
75 | }
76 | .timetable .github svg {
77 | fill: #fff !important;
78 | }
79 | .timetable .slot {
80 | position: absolute;
81 | color: #1aa7bd;
82 | right: 30px;
83 | top: 20px;
84 | font-size: 40px;
85 | }
86 | @media (max-width: 767px) {
87 | .timetable .container {
88 | margin-top: 20px;
89 | margin-bottom: 80px;
90 | background: repeating-linear-gradient(45deg, black, transparent 100px);
91 | }
92 | .timetable .slot {
93 | right: 30px;
94 | top: 10px;
95 | font-size: 30px;
96 | }
97 | .timetable .github {
98 | display: block;
99 | }
100 | }
101 | @media (max-width: 450px) {
102 | .timetable .MuiTypography-h5 {
103 | font-size: 1.3rem;
104 | }
105 | .timetable .slot {
106 | right: 25px;
107 | top: 13px;
108 | font-size: 25px;
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @import url("https://fonts.googleapis.com/css?family=Roboto");
2 |
3 | * {
4 | margin: 0;
5 | padding: 0;
6 | box-sizing: border-box;
7 | }
8 | body {
9 | font-family: "Roboto", sans-serif;
10 | /* background: #f8f7ff; */
11 | background: rgb(0 0 0 / 14%);
12 | /* overflow: auto !important; */
13 | }
14 | :root {
15 | --nav: #022f36;
16 | background: linear-gradient(260deg, #000000, transparent);
17 | }
18 | .MuiFormLabel-root {
19 | background-color: #f8f7ff;
20 | white-space: nowrap;
21 | text-overflow: ellipsis;
22 | max-width: 200px;
23 | }
24 | .MuiInputBase-formControl {
25 | min-width: 200px;
26 | max-width: 200px;
27 | }
28 | @media (max-width: 576px) {
29 | .MuiInputBase-formControl {
30 | max-width: 170px;
31 | min-width: 170px;
32 | }
33 | .MuiFormLabel-root {
34 | max-width: 120px;
35 | }
36 | }
37 | @media (max-width: 420px) {
38 | .MuiInputBase-formControl {
39 | max-width: 130px;
40 | min-width: 130px;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root')
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/src/timetable/batch1.json:
--------------------------------------------------------------------------------
1 | [
2 | [
3 | {
4 | "slot": "9:00 - 10:40",
5 | "subjectName": "Computer Networks",
6 | "subjectCode": "18CSC302J",
7 | "subjectSlot": "A",
8 | "teacher": "Dr.P.Madhavan ",
9 | "teacherCode": 102469,
10 | "category": "Professional Core",
11 | "type": "Lab Based Theory",
12 | "link": "https://meet.google.com/lookup/d2kmiwtfvz?authuser=1&hs=179"
13 | },
14 | {
15 | "slot": "10:50 - 12:30",
16 | "subjectName": "Formal Language and Automata",
17 | "subjectCode": "18CSC301T",
18 | "subjectSlot": "F",
19 | "teacher": "R.Renuka Devi",
20 | "teacherCode": 102256,
21 | "category": "Professional Core",
22 | "type": "Theory",
23 | "link": "https://meet.google.com/lookup/dy6jrjghww?authuser=1&hs=179"
24 | },
25 | {
26 | "slot": "2:10 - 3:50",
27 | "subjectName": "Computer Networks",
28 | "subjectCode": "18CSC302J",
29 | "subjectSlot": "P1 - P2",
30 | "teacher": "Dr.P.Madhavan ",
31 | "teacherCode": 102469,
32 | "category": "Professional Core",
33 | "type": "Lab Based Theory",
34 | "link": "https://meet.google.com/lookup/e6ym5nqraj?authuser=1&hs=179"
35 | }
36 | ],
37 | [
38 | {
39 | "slot": "9:00 - 10:40",
40 | "subjectSlot": "B"
41 | },
42 | {
43 | "slot": "10:50 - 12:30",
44 |
45 | "subjectSlot": "G"
46 | },
47 | {
48 | "slot": "1:20 - 2:10",
49 |
50 | "subjectSlot": "D"
51 | },
52 | {
53 | "slot": "2:10 - 3:50",
54 | "subjectName": "Discrete Mathematics for Engineers",
55 | "subjectCode": "18MAB302T",
56 | "subjectSlot": "C",
57 | "teacher": "Dr. D.K.Sheena Christy",
58 | "teacherCode": 101180,
59 | "category": "Basic Science",
60 | "type": "Theory",
61 | "link": "https://meet.google.com/lookup/cs2l4444sb?authuser=1&hs=179"
62 | }
63 | ],
64 | [
65 | {
66 | "slot": "10:50 - 11:40",
67 | "subjectName": "Computer Networks",
68 | "subjectCode": "18CSC302J",
69 | "teacher": "Dr.P.Madhavan ",
70 | "subjectSlot": "A",
71 | "teacherCode": 102469,
72 | "category": "Professional Core",
73 | "type": "Lab Based Theory",
74 | "link": "https://meet.google.com/lookup/d2kmiwtfvz?authuser=1&hs=179"
75 | },
76 | {
77 | "slot": "11:40 - 12:30",
78 | "subjectName": "Indian Traditional Knowledge",
79 | "subjectCode": "18LEM109T",
80 | "subjectSlot": "D1",
81 | "teacher": "Dr.P.Madhavan ",
82 | "teacherCode": 102469,
83 | "category": "Mandatory",
84 | "type": "Theory",
85 | "link": "https://meet.google.com/lookup/heytdpxsaj?authuser=1&hs=179"
86 | },
87 | {
88 | "slot": "1:20 - 2:10",
89 | "subjectSlot": "B"
90 | }
91 | ],
92 | [
93 | {
94 | "slot": "9:00 - 10:40",
95 |
96 | "subjectSlot": "D"
97 | },
98 | {
99 | "slot": "10:50 - 11:40",
100 | "subjectSlot": "B"
101 | },
102 | {
103 | "slot": "12:30 - 2:10",
104 |
105 |
106 | "subjectName": "Embedded System Design Raspberry Pi",
107 | "subjectCode": "18ECO109J",
108 | "subjectSlot": "G-Lab",
109 | "teacher": "Dr. Ruhan B",
110 | "teacherCode": 100255,
111 | "category": "Open Elective",
112 | "type": "Practical",
113 | "link": "https://meet.google.com/lookup/e4y3atbnll?authuser=1&hs=179"
114 |
115 |
116 | },
117 | {
118 | "slot": "2:10 - 3:00",
119 | "subjectName": "Discrete Mathematics for Engineers",
120 | "subjectCode": "18MAB302T",
121 | "subjectSlot": "C",
122 | "teacher": "Dr. D.K.Sheena Christy",
123 | "teacherCode": 101180,
124 | "category": "Basic Science",
125 | "type": "Theory",
126 | "link": "https://meet.google.com/lookup/cs2l4444sb?authuser=1&hs=179"
127 | },
128 | {
129 | "slot": "3:00 - 3:50",
130 | "subjectName": "MOOC/Seminar/IT",
131 | "subjectCode": "18CSP101L",
132 | "subjectSlot": "P14",
133 | "teacher": "Dr.P.Madhavan ",
134 | "teacherCode": 102469,
135 | "category": "Project Course",
136 | "type": "Practical",
137 | "link": "https://meet.google.com/lookup/d2kmiwtfvz?authuser=1&hs=179"
138 | }
139 | ],
140 | [
141 | {
142 | "slot": "9:00 - 10:40",
143 | "subjectName": "Analytical and Logical Thinking Skills",
144 | "subjectCode": "18PDM301L",
145 | "subjectSlot": "E",
146 | "teacher": "Mr. K. Murali",
147 | "teacherCode": 102289,
148 | "category": "Mandatory",
149 | "type": "Practical",
150 | "link": "https://meet.google.com/lookup/cqzizvfq7j?authuser=1&hs=179"
151 | },
152 | {
153 | "slot": "10:50 - 11:40",
154 | "subjectName": "Discrete Mathematics for Engineers",
155 | "subjectCode": "18MAB302T",
156 | "subjectSlot": "C",
157 | "teacher": "Dr. D.K.Sheena Christy ",
158 | "teacherCode": 101180,
159 | "category": "Basic Science",
160 | "type": "Theory",
161 | "link": "https://meet.google.com/lookup/cs2l4444sb?authuser=1&hs=179"
162 | },
163 | {
164 | "slot": "11:40 - 12:30",
165 | "subjectName": "Formal Language and Automata",
166 | "subjectCode": "18CSC301T",
167 | "subjectSlot": "F",
168 | "teacher": "R.Renuka Devi ",
169 | "teacherCode": 102256,
170 | "category": "Professional Core",
171 | "type": "Theory",
172 | "link": "https://meet.google.com/lookup/dy6jrjghww?authuser=1&hs=179"
173 | },
174 | {
175 | "slot": "1:20 - 2:10",
176 | "subjectName": "Computer Networks",
177 | "subjectCode": "18CSC302J",
178 | "subjectSlot": "A",
179 | "teacher": "Dr.P.Madhavan ",
180 | "teacherCode": 102469,
181 | "category": "Project Course",
182 | "type": "Practical",
183 | "link": "https://meet.google.com/lookup/d2kmiwtfvz?authuser=1&hs=179"
184 | }
185 |
186 | ]
187 | ]
188 |
--------------------------------------------------------------------------------
/src/timetable/batch2.json:
--------------------------------------------------------------------------------
1 | [
2 | [
3 | {
4 | "slot": "9:00 - 10:40",
5 | "subjectName": "Computer Networks",
6 | "subjectCode": "18CSC302J",
7 | "subjectSlot": "A",
8 | "teacher": "Dr.S.Babu",
9 | "teacherCode": 102457,
10 | "category": "Professional Core",
11 | "type": "Lab Based Theory",
12 | "link": "https://meet.google.com/lookup/he7cvd2dbq?authuser=1&hs=179"
13 | },
14 | {
15 | "slot": "10:50 - 12:30",
16 | "subjectName": "Formal Language and Automata",
17 | "subjectCode": "18CSC301T",
18 | "subjectSlot": "F",
19 | "teacher": "Dr.P.Velmurugan",
20 | "teacherCode": 102679,
21 | "category": "Professional Core",
22 | "type": "Theory",
23 | "link": "https://meet.google.com/lookup/goeofogs45?authuser=1&hs=179"
24 | }
25 | ],
26 | [
27 | {
28 | "slot": "9:00 - 10:40",
29 | "subjectSlot": "B"
30 | },
31 | {
32 | "slot": "10:50 - 12:30",
33 |
34 | "subjectSlot": "G"
35 | },
36 | {
37 | "slot": "1:20 - 2:10",
38 |
39 | "subjectSlot": "D"
40 | },
41 | {
42 | "slot": "2:10 - 3:50",
43 | "subjectName": "Discrete Mathematics for Engineers",
44 | "subjectCode": "18MAB302T",
45 | "subjectSlot": "C",
46 | "teacher": "Dr.G.Vijayalakshmi",
47 | "teacherCode": 100881,
48 | "category": "Basic Science",
49 | "type": "Theory",
50 | "link": "https://meet.google.com/lookup/glq7j45ejj"
51 | }
52 | ],
53 | [
54 | {
55 | "slot": "10:50 - 11:40",
56 | "subjectName": "Computer Networks",
57 | "subjectCode": "18CSC302J",
58 | "teacher": "Dr.S.Babu",
59 | "subjectSlot": "A",
60 | "teacherCode": 102457,
61 | "category": "Professional Core",
62 | "type": "Lab Based Theory",
63 | "link": "https://meet.google.com/lookup/he7cvd2dbq"
64 | },
65 | {
66 | "slot": "11:40 - 12:30",
67 | "subjectName": "Indian Traditional Knowledge",
68 | "subjectCode": "18LEM109T",
69 | "subjectSlot": "D1",
70 | "teacher": "Dr.S.Babu",
71 | "teacherCode": 102457,
72 | "category": "Mandatory",
73 | "type": "Theory",
74 | "link": "https://meet.google.com/lookup/bwws63kzrt"
75 | },
76 | {
77 | "slot": "1:20 - 2:10",
78 | "subjectSlot": "B"
79 | },
80 | {
81 | "slot": "2:10 - 3:50",
82 | "subjectName": "Computer Networks",
83 | "subjectCode": "18CSC302J",
84 | "subjectSlot": "P1 - P2",
85 | "teacher": "Dr.S.Babu",
86 | "teacherCode": 102457,
87 | "category": "Professional Core",
88 | "type": "Lab Based Theory",
89 | "link": "https://meet.google.com/lookup/chckb6cu3w?authuser=1&hs=179"
90 | }
91 | ],
92 | [
93 | {
94 | "slot": "9:00 - 10:40",
95 | "subjectSlot": "D"
96 | },
97 | {
98 | "slot": "10:50 - 11:40",
99 | "subjectSlot": "B"
100 | },
101 | {
102 | "slot": "1:20 - 2:10",
103 | "subjectSlot": "G"
104 | },
105 | {
106 | "slot": "2:10 - 3:00",
107 | "subjectName": "Discrete Mathematics for Engineers",
108 | "subjectCode": "18MAB302T",
109 | "subjectSlot": "C",
110 | "teacher": "Dr.G.Vijayalakshmi",
111 | "teacherCode": 100881,
112 | "category": "Basic Science",
113 | "type": "Theory",
114 | "link": "https://meet.google.com/lookup/glq7j45ejj"
115 | },
116 | {
117 | "slot": "3:00 - 3:50",
118 | "subjectName": "MOOC/Seminar/IT",
119 | "subjectCode": "18CSP101L",
120 | "subjectSlot": "P14",
121 | "teacher": "Dr.S.Babu",
122 | "teacherCode": 102457,
123 | "category": "Project Course",
124 | "type": "Practical",
125 | "link": "https://meet.google.com/efazmcotvg"
126 | }
127 | ],
128 | [
129 | {
130 | "slot": "9:00 - 10:40",
131 | "subjectName": "Analytical and Logical Thinking Skills",
132 | "subjectCode": "18PDM301L",
133 | "subjectSlot": "E",
134 | "teacher": "Dr. M. Sneha Latha",
135 | "teacherCode": 102287,
136 | "category": "Mandatory",
137 | "type": "Practical",
138 | "link": "https://meet.google.com/lookup/ewzd6sdk4c"
139 | },
140 | {
141 | "slot": "10:50 - 11:40",
142 | "subjectName": "Discrete Mathematics for Engineers",
143 | "subjectCode": "18MAB302T",
144 | "subjectSlot": "C",
145 | "teacher": "Dr.G.Vijayalakshmi",
146 | "teacherCode": 100881,
147 | "category": "Basic Science",
148 | "type": "Theory",
149 | "link": "https://meet.google.com/lookup/glq7j45ejj"
150 | },
151 | {
152 | "slot": "11:40 - 12:30",
153 | "subjectName": "Formal Language and Automata",
154 | "subjectCode": "18CSC301T",
155 | "subjectSlot": "F",
156 | "teacher": "Dr.P.Velmurugan",
157 | "teacherCode": 102679,
158 | "category": "Professional Core",
159 | "type": "Theory",
160 | "link": "https://meet.google.com/lookup/goeofogs45"
161 | }
162 | ]
163 | ]
164 |
--------------------------------------------------------------------------------
/src/timetable/openelectives.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "subjectName": "Smart Sensor Systems",
4 | "subjectCode": "18NTO308T",
5 | "subjectSlot": "G",
6 | "teacher": "Dr.M.Renilkumar",
7 | "teacherCode": 102507,
8 | "category": "Open Elective",
9 | "type": "Theory",
10 | "link": "https://meet.google.com/e3riecd3ev"
11 | },
12 | {
13 | "subjectName": "Total Engineering Quality Management",
14 | "subjectCode": "18MBO401T",
15 | "subjectSlot": "G",
16 | "teacher": "Mr.V.Suresh",
17 | "teacherCode": 17000054,
18 | "category": "Open Elective",
19 | "type": "Theory",
20 | "link": "https://meet.google.com/ahgdotwwaf"
21 | },
22 |
23 | {
24 | "subjectName": "B2B Marketing",
25 | "subjectCode": "18MBO406T",
26 | "subjectSlot": "G",
27 | "teacher": "Dr.Densingh Joshua",
28 | "teacherCode": 17000100,
29 | "category": "Open Elective",
30 | "type": "Theory",
31 | "link": "https://meet.google.com/fmmhjsuipj"
32 | },
33 | {
34 | "subjectName": "Fundamentals of Biomedical Engineering",
35 | "subjectCode": "18BMO121T",
36 | "subjectSlot": "G",
37 | "teacher": "Dr.A.K.Jayanthy",
38 | "teacherCode": 101255,
39 | "category": "Open Elective",
40 | "type": "Theory",
41 | "link": "https://meet.google.com/khf-motg-tdu"
42 | },
43 |
44 | {
45 | "subjectName": "Embedded System Design Raspberry Pi",
46 | "subjectCode": "18ECO109J",
47 | "subjectSlot": "G",
48 | "teacher": "Mrs.V.Padmajothi",
49 | "teacherCode": 100255,
50 | "category": "Open Elective",
51 | "type": "Theory",
52 | "link": "https://meet.google.com/lookup/g6e2otytqg?authuser=1&hs=179"
53 | },
54 |
55 |
56 | {
57 | "subjectName": "Financial Services",
58 | "subjectCode": "18MBO408T",
59 | "subjectSlot": "G",
60 | "teacher": "Mr.Velmurugan T",
61 | "teacherCode": 17000063,
62 | "category": "Open Elective",
63 | "type": "Theory",
64 | "link": "https://meet.google.com/drhoiutbqw"
65 | }
66 | ]
67 |
--------------------------------------------------------------------------------
/src/timetable/professionalelectives.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "subjectName": "Data Mining and Analytics",
4 | "subjectCode": "18CSE355T",
5 | "subjectSlot": "B",
6 | "teacher": "Ms.Abirami ",
7 | "teacherCode": 101533,
8 | "category": "Professional Elective",
9 | "type": "Theory",
10 | "link": "https://meet.google.com/lookup/hzjctpaveg?authuser=1&hs=179"
11 | },
12 | {
13 | "subjectName": "Digital Image Processing",
14 | "subjectCode": "18CSE353J",
15 | "subjectSlot": "B",
16 | "teacher": "Ms.C.Jayavarthini",
17 | "teacherCode": 101537,
18 | "category": "Professional Elective",
19 | "type": "Theory",
20 | "link": "https://meet.google.com/lookup/hkhj4slgjo"
21 | },
22 | {
23 | "subjectName": "Neuro Fuzzy and Genetic Programming",
24 | "subjectCode": "18CSE352T",
25 | "subjectSlot": "D",
26 | "teacher": "Ms.M.Harini",
27 | "teacherCode": 102230,
28 | "category": "Professional Elective",
29 | "type": "Theory",
30 | "link": "https://meet.google.com/lookup/bk3idakpko"
31 | },
32 | {
33 | "subjectName": "Information Storage & Management",
34 | "subjectCode": "18CSE360T",
35 | "subjectSlot": "D",
36 | "teacher": "Saravanan",
37 | "teacherCode": 100507,
38 | "category": "Professional Elective",
39 | "type": "Theory",
40 | "link": "https://meet.google.com/lookup/gh6mc5ppr6?authuser=1&hs=179"
41 | }
42 | ]
43 |
--------------------------------------------------------------------------------