Added: layout.module.css, donate modal, contribute feedback modal, contacts

This commit is contained in:
mrfry 2021-03-26 16:57:17 +01:00
parent 6fd9beb464
commit 47a2227f87
9 changed files with 204 additions and 93 deletions

View file

@ -9,12 +9,39 @@ import tabs from '../data/tabs.json'
import constants from '../constants.json' import constants from '../constants.json'
import BB from './b.js' import BB from './b.js'
import styles from './layout.module.css'
const renderSnow = () => { const renderSnow = () => {
const date = new Date() const date = new Date()
// if its december, and date is more than 5 // if its december, and date is more than 5
return date.getMonth() === 11 && date.getDate() > 5 return date.getMonth() === 11 && date.getDate() > 5
} }
function Donate() {
return (
<div>
<div>
Paypalon és Patreonon látszódik a neved, de Patreonon könnyen meg lehet
változtatni. Ha név nélkül szeretnél adakozni, akkor írd át egy
nickname-ra. De akárhova adakozol, a neved sehova se lesz kiadva, és nem
látja 3. személy.
</div>
<div className={styles.donateLogoContainer}>
<a
href={`${constants.siteUrl}patreon`}
target="_blank"
rel="noreferrer"
>
<img src={`${constants.siteUrl}img/patreon-logo.png`} />
</a>
<a href={`${constants.siteUrl}donate`} target="_blank" rel="noreferrer">
<img src={`${constants.siteUrl}img/paypal-logo.png`} />
</a>
</div>
</div>
)
}
function MessageButton({ function MessageButton({
userSpecificMotd, userSpecificMotd,
setShowMotdModal, setShowMotdModal,
@ -62,11 +89,10 @@ function MessageButton({
export default function Layout({ export default function Layout({
children, children,
route, router,
globalData, globalData,
refetchGlobalData, refetchGlobalData,
}) { }) {
let href = route
const [sidebarOpen, setSidebarOpen] = useState(true) const [sidebarOpen, setSidebarOpen] = useState(true)
const [windowSize, setWindowSize] = useState([100, 200]) const [windowSize, setWindowSize] = useState([100, 200])
const [showMotdModal, setShowMotdModal] = useState(false) const [showMotdModal, setShowMotdModal] = useState(false)
@ -76,6 +102,11 @@ export default function Layout({
const userId = globalData.userId const userId = globalData.userId
const userSpecificMotd = globalData.userSpecificMotd const userSpecificMotd = globalData.userSpecificMotd
useEffect(() => {
setDonateShowing(!!router.query.donate)
}, [router.query.donate])
let href = router.route
if (href === '/' || href === '') { if (href === '/' || href === '') {
href = 'index' href = 'index'
} }
@ -130,9 +161,7 @@ export default function Layout({
<a> <a>
<img <img
style={{ maxWidth: '100%' }} style={{ maxWidth: '100%' }}
src={`${ src={`${constants.siteUrl}img/frylabs-logo_small_transparent.png`}
constants.siteUrl
}img/frylabs-logo_small_transparent.png`}
alt="FryLabs" alt="FryLabs"
/> />
</a> </a>
@ -141,14 +170,14 @@ export default function Layout({
</div> </div>
{sidebarOpen ? ( {sidebarOpen ? (
<> <>
<div id="sideBarLinks" className="sidebarLinks"> <div id="sideBarLinks" className={styles.sidebarLinks}>
{Object.keys(tabs).map((key) => { {Object.keys(tabs).map((key) => {
const item = tabs[key] const item = tabs[key]
return ( return (
<Link href={item.href} key={key}> <Link href={item.href} key={key}>
<a <a
onClick={closeSideBar} onClick={closeSideBar}
className={href.includes(key) ? 'active' : undefined} className={href.includes(key) ? styles.active : undefined}
id={item.id || undefined} id={item.id || undefined}
> >
{item.text} {item.text}
@ -158,7 +187,6 @@ export default function Layout({
})} })}
<a <a
onClick={() => { onClick={() => {
console.log('AAAAAAAAA')
closeSideBar() closeSideBar()
setDonateShowing(true) setDonateShowing(true)
}} }}
@ -202,7 +230,7 @@ export default function Layout({
setDonateShowing(false) setDonateShowing(false)
}} }}
> >
<div>hi</div> <Donate />
</Modal> </Modal>
) : null} ) : null}
{showMotdModal ? ( {showMotdModal ? (
@ -215,7 +243,6 @@ export default function Layout({
<div dangerouslySetInnerHTML={{ __html: userSpecificMotd.msg }} /> <div dangerouslySetInnerHTML={{ __html: userSpecificMotd.msg }} />
</Modal> </Modal>
) : null} ) : null}
<div className="content">{children}</div>
{userSpecificMotd && !userSpecificMotd.seen && showNewMsgModal ? ( {userSpecificMotd && !userSpecificMotd.seen && showNewMsgModal ? (
<Modal <Modal
closeClick={() => { closeClick={() => {
@ -225,6 +252,7 @@ export default function Layout({
Új üzeneted van, kattints a 📬-ra bal alul a megtekintéséhez! Új üzeneted van, kattints a 📬-ra bal alul a megtekintéséhez!
</Modal> </Modal>
) : null} ) : null}
<div className="content">{children}</div>
<BB /> <BB />
</div> </div>
) )

View file

@ -0,0 +1,43 @@
.donateLogoContainer {
display: flex;
justify-content: center;
}
.donateLogoContainer img {
max-width: 100px;
margin: 5px;
border-radius: 5px;
}
.sidebarLinks > * {
display: block;
text-align: center;
color: black;
font-size: 108%;
padding: 14px;
margin-top: 4px;
margin-bottom: 4px;
text-decoration: none;
color: var(--bright-color);
transition: width 0.5s, height 0.5s, ease-in 0.5s;
cursor: pointer;
}
.sidebarLinks a:hover {
transition: width 0.5s, height 0.5s, ease-out 0.5s;
}
.sidebarLinks a.active {
border: 0.5px solid var(--text-color);
color: white;
text-shadow: 2px 2px 8px black;
font-weight: bold;
}
.sidebarLinks a:hover:not(.active) {
background-color: var(--text-color);
color: black;
font-weight: bold;
text-shadow: 2px 2px 8px black;
transition: width 0.5s, height 0.5s, ease-out 0.5s;
}

View file

@ -12,7 +12,7 @@ body {
font-family: 'Kameron', serif; font-family: 'Kameron', serif;
font-family: 'Overpass Mono', monospace; font-family: 'Overpass Mono', monospace;
color: #999999; color: #999999;
cursor: default; /* cursor: default; */
} }
li { li {
@ -75,38 +75,6 @@ input:focus {
padding: 1px 15px; padding: 1px 15px;
} }
.sidebarLinks a {
display: block;
text-align: center;
color: black;
font-size: 108%;
padding: 14px;
margin-top: 4px;
margin-bottom: 4px;
text-decoration: none;
color: var(--bright-color);
transition: width 0.5s, height 0.5s, ease-in 0.5s;
}
.sidebarLinks a:hover {
transition: width 0.5s, height 0.5s, ease-out 0.5s;
}
.sidebarLinks a.active {
border: 0.5px solid var(--text-color);
color: white;
text-shadow: 2px 2px 8px black;
font-weight: bold;
}
.sidebarLinks a:hover:not(.active) {
background-color: var(--text-color);
color: black;
font-weight: bold;
text-shadow: 2px 2px 8px black;
transition: width 0.5s, height 0.5s, ease-out 0.5s;
}
.menuicon div { .menuicon div {
height: 5px; height: 5px;
background-color: var(--bright-color); background-color: var(--bright-color);
@ -332,7 +300,7 @@ input:focus {
} }
.msgs { .msgs {
font-size: 15px; font-size: 15px;
} }
.uid { .uid {
@ -451,7 +419,8 @@ select:hover {
margin: 6px 0px; margin: 6px 0px;
} }
.selectContainer > select:hover, .selectContainer > select:active { .selectContainer > select:hover,
.selectContainer > select:active {
border: 2px solid var(--text-color); border: 2px solid var(--text-color);
} }

View file

@ -40,7 +40,7 @@ function MyApp({ Component, pageProps, router }) {
return ( return (
<Layout <Layout
route={router.route} router={router}
globalData={globalData} globalData={globalData}
refetchGlobalData={getGlobalProps} refetchGlobalData={getGlobalProps}
> >

View file

@ -1,28 +1,32 @@
import React from 'react' import React, { useState, useEffect } from 'react'
import Head from 'next/head' import Head from 'next/head'
import FeedbackArea from '../components/feedbackArea' import FeedbackArea from '../components/feedbackArea'
import constants from '../constants.json'
import LoadingIndicator from '../components/LoadingIndicator'
import styles from './contact.module.css' import styles from './contact.module.css'
const contactMethods = {
irc: {
title: 'IRC chat',
description: 'irc real time chat',
onClick: () => {
console.log('IRC')
},
},
email: {
title: 'E-mail',
description: 'email',
onClick: () => {
console.log('email')
},
},
}
export default function Contact() { export default function Contact() {
const [contacts, setContacts] = useState()
useEffect(() => {
fetch(constants.apiUrl + 'contacts.json', {
method: 'GET',
credentials: 'include',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
})
.then((res) => {
return res.json()
})
.then((res) => {
setContacts(res)
})
}, [])
return ( return (
<div> <div>
<Head> <Head>
@ -33,18 +37,40 @@ export default function Contact() {
</div> </div>
<br /> <br />
<br /> <br />
<div className={styles.text}>
<div>Üzenet küldése</div>
<div>Weboldalon keresztül üzenet küldése adminnak</div>
</div>
<FeedbackArea from={'contact'} /> <FeedbackArea from={'contact'} />
<div className={styles.contactsContainer}> <div className={styles.container}>
<div>Itt vannak hogy hogy lehet kontaktolni</div> {contacts ? (
{Object.keys(contactMethods).map((key) => { <>
const { onClick, title, description } = contactMethods[key] <div className={styles.text}>
return ( <div>Alternatív módok</div>
<div key={key} onClick={onClick}> <div>Valami duma, hogy nem adom ki az adatokat</div>
<div>{title}</div>
<div>{description}</div>
</div> </div>
) <div className={styles.contactsContainer}>
})} {Object.keys(contacts).map((key) => {
const { description, value, href } = contacts[key]
return (
<div key={key}>
<div>{description}</div>
{href ? (
<a target="blank" rel="noreferrer" href={href}>
{' '}
{value}{' '}
</a>
) : (
<div>{value}</div>
)}
</div>
)
})}
</div>
</>
) : (
<LoadingIndicator />
)}
</div> </div>
</div> </div>
) )

View file

@ -1,25 +1,42 @@
.container {
display: flex;
flex-flow: column;
align-items: center;
}
.contactsContainer { .contactsContainer {
margin: 5px; margin: 5px;
max-width: 900px;
} }
.contactsContainer > div:first-child { .contactsContainer > * {
display: flex; text-decoration: none;
justify-content: center;
padding: 5px;
/* ide az a menő stílus a headernek mint a ranklistnél van */
}
.contactsContainer > div {
display: flex; display: flex;
} }
.contactsContainer > div > div { .contactsContainer > * > * {
padding: 5px; padding: 5px;
} }
.contactsContainer > div > div:nth-child(1) { .contactsContainer > *:hover {
flex: 0 150px; background-color: var(--hoover-color);
} }
.contactsContainer > div > div:nth-child(2) {
.contactsContainer > * > *:nth-child(1) {
flex: 1; flex: 1;
} }
.contactsContainer > * > *:nth-child(2) {
flex: 0 150px;
}
.text {
display: flex;
flex-flow: column;
align-items: center;
}
.text > div:nth-child(1) {
font-size: 20px;
color: var(--text-color);
}

View file

@ -1,15 +1,18 @@
import React from 'react' import React, { useState } from 'react'
import Head from 'next/head' import Head from 'next/head'
import Sleep from '../components/sleep' import Sleep from '../components/sleep'
import Todos from '../components/todoStuff/todos' import Todos from '../components/todoStuff/todos'
import FeedbackArea from '../components/feedbackArea' import FeedbackArea from '../components/feedbackArea'
import Modal from '../components/modal'
import constants from '../constants.json' import constants from '../constants.json'
import styles from './contribute.module.css' import styles from './contribute.module.css'
import repos from '../data/repos.json' import repos from '../data/repos.json'
export default function contribute() { export default function contribute() {
const [showFeedback, setShowFeedback] = useState(false)
return ( return (
<div> <div>
<Head> <Head>
@ -25,16 +28,18 @@ export default function contribute() {
</p> </p>
<p> <p>
Emellet ha hozzáértő vagy, adott feladatok megvalósításában is Emellet ha hozzáértő vagy, adott feladatok megvalósításában is
segíthetsz. (lásd: lentebb)<br /> Ha egy kártyára kattintasz, a segíthetsz. (lásd: lentebb)
megjelenő abalkban láthatod annak részleteit, illetve{' '} <br /> Ha egy kártyára kattintasz, a megjelenő abalkban láthatod annak
részleteit, illetve{' '}
<b> <b>
<i>szavazhatsz</i> <i>szavazhatsz</i>
</b>{' '} </b>{' '}
is a feladatra, annak érdekében, hogy minél hamarabb megvalósulhasson. is a feladatra, annak érdekében, hogy minél hamarabb megvalósulhasson.
Minél több szavazat érkezik egy kártyára, annál magasabb lesz a Minél több szavazat érkezik egy kártyára, annál magasabb lesz a
prioritása. (értsd: a legtöbb szavazatot kapó kártya teendője lesz prioritása. (értsd: a legtöbb szavazatot kapó kártya teendője lesz
legelőször megvalósítva)<br /> A kurzort az oszlopcímekre mozgatva, legelőször megvalósítva)
további információkat olvashatsz a kategóriák tulajdonságairól. <br /> A kurzort az oszlopcímekre mozgatva, további információkat
olvashatsz a kategóriák tulajdonságairól.
</p> </p>
{ {
'Ha olyan teendőt látsz, amiben tudnál és szeretnél is segíteni, akkor írj ' 'Ha olyan teendőt látsz, amiben tudnál és szeretnél is segíteni, akkor írj '
@ -48,7 +53,17 @@ export default function contribute() {
</a> </a>
-n és megbeszéljük. -n és megbeszéljük.
</div> </div>
<FeedbackArea from={'contribute'} /> <center>
<div className={`buttonContainer ${styles.newTaskButton}`}>
<div
onClick={() => {
setShowFeedback(true)
}}
>
Új feladat
</div>
</div>
</center>
<hr /> <hr />
<Todos /> <Todos />
<Sleep /> <Sleep />
@ -73,6 +88,15 @@ export default function contribute() {
src={`${constants.siteUrl}img/bug.png`} src={`${constants.siteUrl}img/bug.png`}
/> />
</div> </div>
{showFeedback && (
<Modal
closeClick={() => {
setShowFeedback(false)
}}
>
<FeedbackArea from={'contribute'} />
</Modal>
)}
</div> </div>
) )
} }

View file

@ -23,3 +23,7 @@
.repos a { .repos a {
margin: 0px 5px; margin: 0px 5px;
} }
.newTaskButton {
width: 40%;
}

View file

@ -252,7 +252,7 @@ export default function FAQ() {
<title>GYIK - Qmining | Frylabs.net</title> <title>GYIK - Qmining | Frylabs.net</title>
</Head> </Head>
<div className={'pageHeader'}> <div className={'pageHeader'}>
<h1>GYakran Ismételt Kérdések</h1> <h1>Gyakran Ismételt Kérdések</h1>
</div> </div>
<br /> <br />
<br /> <br />