From 00db828d3cd893bca2d550ab2be125c576053756 Mon Sep 17 00:00:00 2001 From: Ref-Bit Date: Mon, 18 May 2020 14:35:17 +0300 Subject: [PATCH] Gregorian Calender with today highlight --- debug.log | 1 + package-lock.json | 96 +++++++++++++++++++++ package.json | 1 + public/favicon.ico | Bin 3150 -> 17331 bytes public/logo512.png | Bin 0 -> 17331 bytes src/App.js | 20 ++++- src/api/index.js | 33 ++++++++ src/assets/css/main.css | 115 +++++++++++++++++++++++++- src/assets/css/tailwind.css | 100 +++++++++++++++++++++- src/components/index.js | 5 ++ src/components/layout/Footer.js | 13 +++ src/components/layout/Master.js | 91 ++++++++++++++++++++ src/components/layout/NavBar.js | 24 ++++++ src/components/layout/NotFoundPage.js | 79 ++++++++++++++++++ src/components/layout/Spinner.js | 9 ++ src/data/months.json | 14 ++++ 16 files changed, 598 insertions(+), 3 deletions(-) create mode 100644 debug.log create mode 100644 public/logo512.png create mode 100644 src/api/index.js create mode 100644 src/components/index.js create mode 100644 src/components/layout/Footer.js create mode 100644 src/components/layout/Master.js create mode 100644 src/components/layout/NavBar.js create mode 100644 src/components/layout/NotFoundPage.js create mode 100644 src/components/layout/Spinner.js create mode 100644 src/data/months.json diff --git a/debug.log b/debug.log new file mode 100644 index 0000000..9c543f6 --- /dev/null +++ b/debug.log @@ -0,0 +1 @@ +[0518/140216.260:WARNING:minidump_to_upload_parameters.cc(36)] duplicate key guid, discarding value 795e6597-3360-43bc-a0b5-a4fdfcddf62b diff --git a/package-lock.json b/package-lock.json index 36663e4..6701e77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6296,6 +6296,19 @@ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, + "history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -6306,6 +6319,14 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "hosted-git-info": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", @@ -8217,6 +8238,15 @@ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz", "integrity": "sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=" }, + "mini-create-react-context": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz", + "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==", + "requires": { + "@babel/runtime": "^7.5.5", + "tiny-warning": "^1.0.3" + } + }, "mini-css-extract-plugin": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", @@ -11105,6 +11135,52 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", + "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.4.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "react-router-dom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", + "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, "react-scripts": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.1.tgz", @@ -11539,6 +11615,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" }, + "resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -13087,6 +13168,16 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, + "tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -13458,6 +13549,11 @@ "spdx-expression-parse": "^3.0.0" } }, + "value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/package.json b/package.json index c1aa884..90d1adb 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "postcss-cli": "^7.1.1", "react": "^16.13.1", "react-dom": "^16.13.1", + "react-router-dom": "^5.2.0", "react-scripts": "3.4.1", "tailwindcss": "^1.4.6" }, diff --git a/public/favicon.ico b/public/favicon.ico index bcd5dfd67cd0361b78123e95c2dd96031f27f743..7ab4ef473e9055ad29e8c85d464254ee695fc0e5 100644 GIT binary patch literal 17331 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 MDeX2GIKR{Qf5okjU;qFB diff --git a/public/logo512.png b/public/logo512.png new file mode 100644 index 0000000000000000000000000000000000000000..7ab4ef473e9055ad29e8c85d464254ee695fc0e5 GIT binary patch literal 17331 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 vw}YXpy_e5@kB5+tkB`6;7e`Oq`)&^fTs + + +
+
+ + + + +
+
+
+
); } diff --git a/src/api/index.js b/src/api/index.js new file mode 100644 index 0000000..193f270 --- /dev/null +++ b/src/api/index.js @@ -0,0 +1,33 @@ +import axios from 'axios' + +const apiURL = 'http://api.aladhan.com/v1/' + +export const getPrayerTimesCalendar = async (city, country, month, year) => { + let changeURL = `${apiURL}calendarByCity?city=${city}&country=${country}&method=3&month=${month}&year=${year}` + + try { + const { data: { data } } = await axios.get(changeURL); + + if(data !== null || data.length !== 0){ + return data + }else{ + return [] + } + } catch (error) { + console.log(error) + } +} + +export const getCityCountry = async () => { + try { + const { data } = await axios.get('https://freegeoip.app/json/') + + if(data !== null || data.length !== 0){ + return data + }else{ + return [] + } + } catch (error) { + console.log(error) + } +} diff --git a/src/assets/css/main.css b/src/assets/css/main.css index 7ddea94..0c29ca0 100644 --- a/src/assets/css/main.css +++ b/src/assets/css/main.css @@ -14297,6 +14297,119 @@ video { @import url('https://fonts.googleapis.com/css?family=Jost:300,400,500,600,700,900&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Philosopher:wght@400;700&display=swap'); + +/* Custom Styles */ + +:root{ + --scroll-color: #434190; +} + +::-webkit-scrollbar { + width: 7px; + position: relative; +} + +::-webkit-scrollbar-thumb { + background-color: var(--scroll-color); + border-radius: 3px; +} + +html, body{ + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Jost", sans-serif; +} + +button:focus { + outline: none; + box-shadow: none; +} + +footer{ + position: absolute; + bottom: 0; + width: 100%; + height: 2.5rem; +} + +#search::placeholder{ + color: white; +} + +#logo{ + font-family: 'Philosopher', sans-serif; +} + +.content-wrap{ + padding-bottom: 2.5rem; +} + +.today{ + background-color: tomato; + font-weight: 500; + color: white; + text-align: center; +} + +/* Spinner */ + +.loading{ + width: 125px; + height: 125px; + box-sizing: border-box; + border-radius: 50%; + border-top: 10px solid #333333; + position: relative; + animation: a1 2s linear infinite; +} + +.loading::before,.loading::after{ + content: ''; + width: 125px; + height: 125px; + position: absolute; + left: 0; + top: -10px; + box-sizing: border-box; + border-radius: 50%; +} + +.loading::before{ + border-top: 10px solid #434190; + transform: rotate(120deg); +} + +.loading::after{ + border-top: 10px solid tomato; + transform: rotate(240deg); +} + +.loading span{ + position: absolute; + width: 125px; + height: 125px; + color: black; + text-align: center; + line-height: 125px; + font-size: 16px; + font-weight: 500; + animation: a2 2s linear infinite; +} + +@keyframes a1 { + to{ + transform: rotate(360deg); + } +} + +@keyframes a2 { + to{ + transform: rotate(-360deg); + } +} + @media (min-width: 640px) { .sm\:space-y-0 > :not(template) ~ :not(template) { --space-y-reverse: 0; @@ -69059,4 +69172,4 @@ video { .xl\:delay-1000 { transition-delay: 1000ms; } -} \ No newline at end of file +} diff --git a/src/assets/css/tailwind.css b/src/assets/css/tailwind.css index 88be29e..1601e35 100644 --- a/src/assets/css/tailwind.css +++ b/src/assets/css/tailwind.css @@ -1,4 +1,102 @@ @import 'tailwindcss/base'; @import 'tailwindcss/components'; @import 'tailwindcss/utilities'; -@import url('https://fonts.googleapis.com/css?family=Jost:300,400,500,600,700,900&display=swap'); \ No newline at end of file +@import url('https://fonts.googleapis.com/css?family=Jost:300,400,500,600,700,900&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Philosopher:wght@400;700&display=swap'); + +/* Custom Styles */ +:root{ + --scroll-color: #434190; +} +::-webkit-scrollbar { + width: 7px; + position: relative; +} +::-webkit-scrollbar-thumb { + background-color: var(--scroll-color); + border-radius: 3px; +} +html, body{ + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Jost", sans-serif; +} +button:focus { + outline: none; + box-shadow: none; +} +footer{ + position: absolute; + bottom: 0; + width: 100%; + height: 2.5rem; +} + +#search::placeholder{ + color: white; +} +#logo{ + font-family: 'Philosopher', sans-serif; +} + +.content-wrap{ + padding-bottom: 2.5rem; +} +.today{ + background-color: tomato; + font-weight: 500; + color: white; + text-align: center; +} + +/* Spinner */ +.loading{ + width: 125px; + height: 125px; + box-sizing: border-box; + border-radius: 50%; + border-top: 10px solid #333333; + position: relative; + animation: a1 2s linear infinite; +} +.loading::before,.loading::after{ + content: ''; + width: 125px; + height: 125px; + position: absolute; + left: 0; + top: -10px; + box-sizing: border-box; + border-radius: 50%; +} +.loading::before{ + border-top: 10px solid #434190; + transform: rotate(120deg); + +} +.loading::after{ + border-top: 10px solid tomato; + transform: rotate(240deg); +} +.loading span{ + position: absolute; + width: 125px; + height: 125px; + color: black; + text-align: center; + line-height: 125px; + font-size: 16px; + font-weight: 500; + animation: a2 2s linear infinite; +} +@keyframes a1 { + to{ + transform: rotate(360deg); + } +} +@keyframes a2 { + to{ + transform: rotate(-360deg); + } +} diff --git a/src/components/index.js b/src/components/index.js new file mode 100644 index 0000000..6d089fb --- /dev/null +++ b/src/components/index.js @@ -0,0 +1,5 @@ +export { default as Index } from './layout/Master' +export { default as NavBar } from './layout/NavBar' +export { default as Footer } from './layout/Footer' +export { default as Spinner } from './layout/Spinner' +export { default as NotFoundPage } from './layout/NotFoundPage' \ No newline at end of file diff --git a/src/components/layout/Footer.js b/src/components/layout/Footer.js new file mode 100644 index 0000000..ba7f9f2 --- /dev/null +++ b/src/components/layout/Footer.js @@ -0,0 +1,13 @@ +import React from 'react' + +export default () => { + return ( + +
+

Prayer Act | Created by + Ref-Bit +

+
+
+ ) +} diff --git a/src/components/layout/Master.js b/src/components/layout/Master.js new file mode 100644 index 0000000..3fbff2f --- /dev/null +++ b/src/components/layout/Master.js @@ -0,0 +1,91 @@ +import React, { useState, useEffect } from 'react'; +import { getPrayerTimesCalendar, getCityCountry } from '../../api' +import { Spinner } from '..'; +import months from '../../data/months.json' + +export default () => { + const [ city, setCity] = useState('') + const [ country, setCountry ] = useState('') + const [ today, setToday ] = useState(0) + const [ month, setMonth ] = useState(0) + const [ year, setYear ] = useState(0) + const [ calender, setCalender ] = useState([]) + + useEffect(() => { + let date = new Date() + + setMonth(date.getUTCMonth()) + setYear(date.getUTCFullYear()) + setToday(date.getDate()) + + getCityCountry().then(( data ) => { + setCity(data.city) + setCountry(data.country_name) + + if(city !== '' && country !== ''){ + getPrayerTimesCalendar(city, country, month+1, year).then((data) => { + console.log(data) + setCalender(data) + + let row = document.querySelector(`.row-${today}`) + today === date.getDate() ? row.className = 'today' : row.className = '' + row.scrollIntoView({ behavior: 'smooth', block: 'center'}) + + }).catch( err => console.log(err) ) + }else{ + return + } + }).catch( err => console.log(err) ) + + }, [city, country, today, month, year]) + + if(calender === null || calender === undefined || calender.length === 0) return + + else{ + return ( +
+
+

Gregorian Calender For {months[month]}

+
+ + + + + + + + + + + + + + + + + { + calender.map((item, i) => + + + + + + + + + + + + + + + ) + } + +
DayDateImsakFajrSunriseDhuhrAsrMaghribIshaMidnight
{item.date.gregorian.weekday.en}
({item.date.hijri.weekday.en})
{item.date.readable}{item.timings.Imsak.slice(0, 5)}{item.timings.Fajr.slice(0, 5)}{item.timings.Sunrise.slice(0, 5)}{item.timings.Dhuhr.slice(0, 5)}{item.timings.Asr.slice(0, 5)}{item.timings.Maghrib.slice(0, 5)}{item.timings.Isha.slice(0, 5)}{item.timings.Midnight.slice(0, 5)}
+
+
+
+ ) + } +} \ No newline at end of file diff --git a/src/components/layout/NavBar.js b/src/components/layout/NavBar.js new file mode 100644 index 0000000..aee9115 --- /dev/null +++ b/src/components/layout/NavBar.js @@ -0,0 +1,24 @@ +import React from 'react' +import { Link } from 'react-router-dom' + +export default () => { + + return ( + + + + ) +} diff --git a/src/components/layout/NotFoundPage.js b/src/components/layout/NotFoundPage.js new file mode 100644 index 0000000..b59722a --- /dev/null +++ b/src/components/layout/NotFoundPage.js @@ -0,0 +1,79 @@ +import React from 'react' +// import { Link } from 'react-router-dom' + +export default () => { + return ( +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 404 Page not found + + + {/*  Back to Home */} + +
+ ) +} diff --git a/src/components/layout/Spinner.js b/src/components/layout/Spinner.js new file mode 100644 index 0000000..400ec7a --- /dev/null +++ b/src/components/layout/Spinner.js @@ -0,0 +1,9 @@ +import React from 'react' + +export default () => { + return( +
+ Loading... +
+ ) +} \ No newline at end of file diff --git a/src/data/months.json b/src/data/months.json new file mode 100644 index 0000000..145e314 --- /dev/null +++ b/src/data/months.json @@ -0,0 +1,14 @@ +{ + "0": "January", + "1": "February", + "2": "March", + "3": "April", + "4": "May", + "5": "June", + "6": "July", + "7": "August", + "8": "September", + "9": "October", + "10": "Novmber", + "11": "December" +}