refactors, dynamic constants (lol)

This commit is contained in:
mrfry 2023-03-29 19:12:41 +02:00
parent 755891710a
commit d4553896af
25 changed files with 323 additions and 312 deletions

16
constants.js Normal file
View file

@ -0,0 +1,16 @@
// eslint-disable-next-line no-undef
const useLocalhost = process && process.env.NODE_ENV === 'development'
const constants = {
siteUrl: !useLocalhost ? 'http://frylabs.net/' : 'http://localhost:8080/',
apiUrl: !useLocalhost
? 'http://frylabs.net/api/'
: 'http://localhost:8080/api/',
chatUrl: !useLocalhost ? 'http://frylabs.net/' : 'http://localhost:8080/',
mobileWindowWidth: 700,
maxQuestionsToRender: 250,
imageExts: ['gif', 'png', 'jpeg', 'jpg'],
videoExts: ['mp4', 'mkv', 'webm'],
}
export default constants

View file

@ -2,7 +2,7 @@ import React from 'react'
import Questions from './Questions' import Questions from './Questions'
import constants from '../constants.json' import constants from '../constants'
const countReducer = (acc, subj) => { const countReducer = (acc, subj) => {
return acc + subj.Questions.length return acc + subj.Questions.length

View file

@ -1,6 +1,6 @@
import React, { useState, useEffect } from 'react' import React, { useState, useEffect } from 'react'
import constants from '../constants.json' import constants from '../constants'
const soundCount = 7 const soundCount = 7
function GetRandom(min, max) { function GetRandom(min, max) {

View file

@ -3,7 +3,7 @@ import React, { useState } from 'react'
import Modal from './modal' import Modal from './modal'
import styles from './composer.module.css' import styles from './composer.module.css'
import constants from '../constants.json' import constants from '../constants'
export default function Composer({ onSubmit, allowFile, fileOnly }) { export default function Composer({ onSubmit, allowFile, fileOnly }) {
const [editorShowing, setEditorShowing] = useState(false) const [editorShowing, setEditorShowing] = useState(false)

View file

@ -1,7 +1,7 @@
import React, { useState, useEffect } from 'react' import React, { useState, useEffect } from 'react'
import Modal from './modal' import Modal from './modal'
import constants from '../constants.json' import constants from '../constants'
import styles from './dbSelector.module.css' import styles from './dbSelector.module.css'

View file

@ -1,7 +1,7 @@
import React, { useState } from 'react' import React, { useState } from 'react'
import styles from './feedbackArea.module.css' import styles from './feedbackArea.module.css'
import constants from '../constants.json' import constants from '../constants'
function FileUploader({ onChange }) { function FileUploader({ onChange }) {
return ( return (

View file

@ -8,7 +8,7 @@ import Header from '../components/header'
import Modal from '../components/modal' import Modal from '../components/modal'
import styles from './forum.module.css' import styles from './forum.module.css'
import constants from '../constants.json' import constants from '../constants'
const forumPostPerPage = 5 const forumPostPerPage = 5

View file

@ -7,7 +7,7 @@ const Snowfall = dynamic(() => import('react-snowfall'), { ssr: false })
import LogoutIcon from './logoutIcon' import LogoutIcon from './logoutIcon'
import Modal from './modal' import Modal from './modal'
import constants from '../constants.json' import constants from '../constants'
import BB from './b' import BB from './b'
import styles from './layout.module.css' import styles from './layout.module.css'
@ -67,36 +67,35 @@ function TopBar({
unreads, unreads,
userId, userId,
}) { }) {
return <> return (
<MenuIcon setSidebarOpen={setSidebarOpen} sidebarOpen={sidebarOpen} /> <>
<Link href="/"> <MenuIcon setSidebarOpen={setSidebarOpen} sidebarOpen={sidebarOpen} />
<Link href="/">
<img
src={`${constants.siteUrl}img/frylabs-logo_small_transparent.png`}
alt="FryLabs"
/>
</Link>
<div className={styles.topBarLinks}>
{Object.keys(topBarLinks).map((key) => {
const item = topBarLinks[key]
<img return (
src={`${constants.siteUrl}img/frylabs-logo_small_transparent.png`} <Link
alt="FryLabs" key={key}
/> href={item.href}
onClick={closeSideBar}
</Link> className={href.includes(key) ? styles.active : undefined}
<div className={styles.topBarLinks}> >
{Object.keys(topBarLinks).map((key) => { {item.text}
const item = topBarLinks[key] </Link>
)
return ( })}
(<Link </div>
key={key} <div className={'seperator'} />
href={item.href} <UserStatus onClick={closeSideBar} unreads={unreads} userId={userId} />
onClick={closeSideBar} </>
className={href.includes(key) ? styles.active : undefined}> )
{item.text}
</Link>)
);
})}
</div>
<div className={'seperator'} />
<UserStatus onClick={closeSideBar} unreads={unreads} userId={userId} />
</>;
} }
function SideBar({ sidebarOpen, closeSideBar, href, setDonateShowing }) { function SideBar({ sidebarOpen, closeSideBar, href, setDonateShowing }) {
@ -110,17 +109,16 @@ function SideBar({ sidebarOpen, closeSideBar, href, setDonateShowing }) {
} }
return ( return (
(<Link <Link
href={item.href} href={item.href}
key={key} key={key}
onClick={closeSideBar} onClick={closeSideBar}
className={href.includes(key) ? styles.active : undefined} className={href.includes(key) ? styles.active : undefined}
id={item.id || undefined}> id={item.id || undefined}
>
{item.text} {item.text}
</Link>
</Link>) )
);
})} })}
<a <a
onClick={() => { onClick={() => {
@ -132,7 +130,7 @@ function SideBar({ sidebarOpen, closeSideBar, href, setDonateShowing }) {
</a> </a>
</div> </div>
</> </>
) : null; ) : null
} }
function Donate() { function Donate() {
@ -187,11 +185,10 @@ function UserStatus({ userId, unreads, onClick }) {
href="/chat" href="/chat"
onClick={onClick} onClick={onClick}
title={`Chat${unreadCount ? ' (' + unreadCount + ' új üzenet)' : ''}`} title={`Chat${unreadCount ? ' (' + unreadCount + ' új üzenet)' : ''}`}
className={styles.unreadNotification}> className={styles.unreadNotification}
>
<span>💬</span> <span>💬</span>
{unreadCount ? <div>{unreadCount}</div> : null} {unreadCount ? <div>{unreadCount}</div> : null}
</Link> </Link>
<div <div
@ -215,7 +212,7 @@ function UserStatus({ userId, unreads, onClick }) {
<LogoutIcon size={28} /> <LogoutIcon size={28} />
</div> </div>
</div> </div>
); )
} }
function MenuIcon({ setSidebarOpen, sidebarOpen }) { function MenuIcon({ setSidebarOpen, sidebarOpen }) {

View file

@ -4,7 +4,7 @@ import ReactButton from './reactButton'
import Comments from './comments' import Comments from './comments'
import Link from 'next/link' import Link from 'next/link'
import constants from '../constants.json' import constants from '../constants'
import styles from './newsEntry.module.css' import styles from './newsEntry.module.css'
@ -95,9 +95,9 @@ export default function NewsEntry({
<Link <Link
href={`/chat?user=${user}`} href={`/chat?user=${user}`}
title={`Chat #${user}-el`} title={`Chat #${user}-el`}
className={'userId'}> className={'userId'}
>
User #{user} User #{user}
</Link> </Link>
<div className={styles.newsDate} title={dateObj.toLocaleString()}> <div className={styles.newsDate} title={dateObj.toLocaleString()}>
@ @
@ -145,5 +145,5 @@ export default function NewsEntry({
/> />
</div> </div>
</div> </div>
); )
} }

View file

@ -1,5 +1,5 @@
import React from 'react' import React from 'react'
import constants from '../constants.json' import constants from '../constants'
export default function Sleep() { export default function Sleep() {
const hours = new Date().getHours() const hours = new Date().getHours()

15
src/constants.js Normal file
View file

@ -0,0 +1,15 @@
// eslint-disable-next-line no-undef
const useLocalhost = process && process.env.NODE_ENV === 'development'
const constants = {
siteUrl: !useLocalhost ? 'http://frylabs.net/' : 'http://localhost:8080/',
apiUrl: !useLocalhost
? 'http://frylabs.net/api/'
: 'http://localhost:8080/api/',
chatUrl: !useLocalhost ? 'http://frylabs.net/' : 'http://localhost:8080/',
mobileWindowWidth: 700,
maxQuestionsToRender: 250,
imageExts: ['gif', 'png', 'jpeg', 'jpg'],
videoExts: ['mp4', 'mkv', 'webm'],
}
export default constants

View file

@ -1,8 +0,0 @@
{
"siteUrl": "http://localhost:8080/",
"apiUrl": "http://localhost:8080/",
"mobileWindowWidth": 700,
"maxQuestionsToRender": 250,
"imageExts": ["gif", "png", "jpeg", "jpg"],
"videoExts": ["mp4", "mkv", "webm"]
}

View file

@ -5,7 +5,7 @@ import Head from 'next/head'
import Layout from '../components/layout' import Layout from '../components/layout'
import '../defaultStyles.css' import '../defaultStyles.css'
import constants from '../constants.json' import constants from '../constants'
export const queryClient = new QueryClient({ export const queryClient = new QueryClient({
defaultOptions: { defaultOptions: {

View file

@ -10,7 +10,7 @@ import SearchBar from '../components/searchBar'
import styles from './allQuestions.module.css' import styles from './allQuestions.module.css'
import constants from '../constants.json' import constants from '../constants'
const countReducer = (acc, subj) => { const countReducer = (acc, subj) => {
return acc + subj.Questions.length return acc + subj.Questions.length

View file

@ -2,7 +2,7 @@ import React from 'react'
import io from 'socket.io-client' import io from 'socket.io-client'
import linkifyString from 'linkify-string' import linkifyString from 'linkify-string'
import constants from '../constants.json' import constants from '../constants'
import LoadingIndicator from '../components/LoadingIndicator' import LoadingIndicator from '../components/LoadingIndicator'
import { queryClient } from '../pages/_app' import { queryClient } from '../pages/_app'
import Header from '../components/header' import Header from '../components/header'
@ -202,7 +202,7 @@ export default class Chat extends React.Component {
return return
} }
// https://socket.io/docs/v4/handling-cors/#Configuration // https://socket.io/docs/v4/handling-cors/#Configuration
const socket = io(`${constants.apiUrl}`, { const socket = io(`${constants.chatUrl}`, {
withCredentials: true, withCredentials: true,
extraHeaders: { extraHeaders: {
'qmining-chat': 'qmining-chat', 'qmining-chat': 'qmining-chat',

View file

@ -3,7 +3,7 @@ import Link from 'next/link'
import Header from '../components/header' import Header from '../components/header'
import FeedbackArea from '../components/feedbackArea' import FeedbackArea from '../components/feedbackArea'
import constants from '../constants.json' import constants from '../constants'
import LoadingIndicator from '../components/LoadingIndicator' import LoadingIndicator from '../components/LoadingIndicator'
import styles from './contact.module.css' import styles from './contact.module.css'
@ -62,13 +62,10 @@ export default function Contact({ globalState, setGlobalState }) {
<div className={styles.container}> <div className={styles.container}>
{contacts ? ( {contacts ? (
<> <>
<div> <div className={styles.text}>
<div className={'subtitle'}>Alternatív módok</div> Figyelem! A szerver üzemeltetőjének kontaktját a
<div className={styles.text}> <Link href="/p2pinfo">{'"P2P infó"'}</Link>
TODO: remove this Az alábbi módokat is nyugodtan használhatod, a részlegen találod!
nevedet, e-mail címedet, illetve semmilyen egyéb adatot nem adok
ki harmadik fél számára. (egyedül én fogom látni)
</div>
</div> </div>
<div className={styles.contactsContainer}> <div className={styles.contactsContainer}>
{Object.keys(contacts).map((key) => { {Object.keys(contacts).map((key) => {
@ -78,8 +75,7 @@ export default function Contact({ globalState, setGlobalState }) {
<div>{description}</div> <div>{description}</div>
{href ? ( {href ? (
<a target="blank" rel="noreferrer" href={href}> <a target="blank" rel="noreferrer" href={href}>
{' '} {value}
{value}{' '}
</a> </a>
) : ( ) : (
<div>{value}</div> <div>{value}</div>

View file

@ -3,7 +3,7 @@ import Link from 'next/link'
import Header from '../components/header' import Header from '../components/header'
import constants from '../constants.json' import constants from '../constants'
import styles from './faq.module.css' import styles from './faq.module.css'
function PasswordSection() { function PasswordSection() {
@ -90,11 +90,7 @@ function FAQSection() {
(így nicknevek sem kellenek), és még IP cím sincs sehol letárolva (így nicknevek sem kellenek), és még IP cím sincs sehol letárolva
szerver oldalon. szerver oldalon.
<br /> <br />
Több infó a{' '} Több infó a <Link href="/faq?tab=risk">kockázatok résznél</Link>.
<Link href="/faq?tab=risk">
kockázatok résznél
</Link>
.
</li> </li>
<li> <li>
<b>Ki és miért csinálja ezt a weboldalt?</b> <b>Ki és miért csinálja ezt a weboldalt?</b>
@ -108,130 +104,130 @@ function FAQSection() {
</li> </li>
</ul> </ul>
</div> </div>
); )
} }
function RiskSection() { function RiskSection() {
return <> return (
Itt {'"én"'} alatt a szerver, weboldal és script egyedüli üzemeltetője <>
értendő, az egyetlen személy, aki hozzáfér akármilyen szolgáltatással Itt {'"én"'} alatt a szerver, weboldal és script egyedüli üzemeltetője
kapcsolatos adathoz, pl.: szerver statisztikák, szerver operációs értendő, az egyetlen személy, aki hozzáfér akármilyen szolgáltatással
rendszere, beküldött fájlok. A weboldalon a felhasználó azonosítója:{' '} kapcsolatos adathoz, pl.: szerver statisztikák, szerver operációs
<i>#1</i> rendszere, beküldött fájlok. A weboldalon a felhasználó azonosítója:{' '}
<ul> <i>#1</i>
<li> <ul>
<b>Beküldött fájlok kezelése</b>A beküldött fájlokban szerepelhet <li>
személyes adat, pl.: név. Ha ilyen információval találkozok, akkor azt <b>Beküldött fájlok kezelése</b>A beküldött fájlokban szerepelhet
ki szoktam törölni. Ezekhez a fájlokhoz és információkhoz csak én személyes adat, pl.: név. Ha ilyen információval találkozok, akkor azt
férek hozzá, és sehova sincs kiadva. Ezek az információk nincsenek ki szoktam törölni. Ezekhez a fájlokhoz és információkhoz csak én
sehol gyűjtve. férek hozzá, és sehova sincs kiadva. Ezek az információk nincsenek
</li> sehol gyűjtve.
<li> </li>
<b> <li>
Ha esetleg {'"'}lebukik{'"'} a szerver, és tárolt személyes infók <b>
</b> Ha esetleg {'"'}lebukik{'"'} a szerver, és tárolt személyes infók
Semmi személyes információ nincs eltárolva szerveren. Egyedüli </b>
információ amit egyáltalán ki tudnék deríteni az amúgy is az IP címed, Semmi személyes információ nincs eltárolva szerveren. Egyedüli
de az nincs letárolva. Ha nagyon gonosz lennék, akkor a script el információ amit egyáltalán ki tudnék deríteni az amúgy is az IP címed,
tudná küldeni a neved és talán még 1-2 adatot a szervernek, de ezt nem de az nincs letárolva. Ha nagyon gonosz lennék, akkor a script el
teszi. tudná küldeni a neved és talán még 1-2 adatot a szervernek, de ezt nem
<p /> teszi.
Bizonyíték? A script, weboldal és szerver teljesen nyílt forráskódú,{' '} <p />
<Link href="/contribute#gitrepo"> Bizonyíték? A script, weboldal és szerver teljesen nyílt forráskódú,{' '}
ezek repository-ja publikus <Link href="/contribute#gitrepo">
</Link>{' '} ezek repository-ja publikus
(contribute oldal alja), és akármikor felülvizsgálható. A script a te </Link>{' '}
böngésződben fut, tampermonkey bővítmény menüjében megtekinthető (contribute oldal alja), és akármikor felülvizsgálható. A script a te
milyen kód fut pontosan. böngésződben fut, tampermonkey bővítmény menüjében megtekinthető
</li> milyen kód fut pontosan.
<li> </li>
<b>Bármikor észrevehetik hogy használod a scriptet</b>A weboldalt már <li>
kevésbé, de úgy nem menti el a kérdéseket a script, mert nem fut.{' '} <b>Bármikor észrevehetik hogy használod a scriptet</b>A weboldalt már
<a kevésbé, de úgy nem menti el a kérdéseket a script, mert nem fut.{' '}
href={`${constants.siteUrl}dataeditor`} <a
target="_blank" href={`${constants.siteUrl}dataeditor`}
rel="noreferrer" target="_blank"
> rel="noreferrer"
Manuálisan is be lehet küldeni kérdés-válaszokat. >
</a> Manuálisan is be lehet küldeni kérdés-válaszokat.
<p /> </a>
A script shadow-root hoz teszi hozzá az összes megjelenített <p />
elementet, így ezeket szinte lehetetlen detektálni. A moodle A script shadow-root hoz teszi hozzá az összes megjelenített
semmiféleképpen nem látja, hogy milyen más oldalak vannak megnyitva a elementet, így ezeket szinte lehetetlen detektálni. A moodle
böngésződben. Nem látja az XMLHttp requesteket se, amit a script semmiféleképpen nem látja, hogy milyen más oldalak vannak megnyitva a
végez. Egy Matomo nevű script látja hogy milyen oldalakra navigálsz a böngésződben. Nem látja az XMLHttp requesteket se, amit a script
moodle-ről, de a script nem linkekkel irányít át, hanem javascript végez. Egy Matomo nevű script látja hogy milyen oldalakra navigálsz a
eseménnyel, amit nem tud nyomon követni. moodle-ről, de a script nem linkekkel irányít át, hanem javascript
<p /> eseménnyel, amit nem tud nyomon követni.
Aztán ki tudja ténylegesen hogy lehet <p />
</li> Aztán ki tudja ténylegesen hogy lehet
<li> </li>
<b>Bármikor leállhat a szerver</b> <li>
És akkor nem bírod megnézni a válaszokat. Erre van az{' '} <b>Bármikor leállhat a szerver</b>
<a És akkor nem bírod megnézni a válaszokat. Erre van az{' '}
href="http://qmining.frylabs.net/allqr.txt?man" <a
target="_blank" href="http://qmining.frylabs.net/allqr.txt?man"
rel="noreferrer" target="_blank"
> rel="noreferrer"
összes kérdés TXT >
</a> összes kérdés TXT
</li> </a>
<li> </li>
<b>Akármelyik válasz rossz lehet</b> <li>
Pl.: ha a script rosszul menti le, vagy rossz kérdésre ad választ <b>Akármelyik válasz rossz lehet</b>
</li> Pl.: ha a script rosszul menti le, vagy rossz kérdésre ad választ
</ul> </li>
</>; </ul>
</>
)
} }
function WebsiteSaveSection() { function WebsiteSaveSection() {
return <> return (
<p> <>
Ha hibát találsz, kérlek jelents. Hogy a hibákat a saját gépemen <p>
reprodukálni tudjam, és könnyen ki bírjam javítani, sokszor jól jön, ha Ha hibát találsz, kérlek jelents. Hogy a hibákat a saját gépemen
egy lementett weboldalt megkapok, amin a hiba történik. Így lehet reprodukálni tudjam, és könnyen ki bírjam javítani, sokszor jól jön, ha
menteni egy oldalt: egy lementett weboldalt megkapok, amin a hiba történik. Így lehet
</p> menteni egy oldalt:
<ul> </p>
<li> <ul>
Lementett oldalon jobb klikk, oldal mentése <li>
<br /> Lementett oldalon jobb klikk, oldal mentése
<img <br />
src="img/faq/sitesave-1.jpg" <img
alt="img" src="img/faq/sitesave-1.jpg"
className={'manual_img'} alt="img"
/> className={'manual_img'}
</li> />
<li> </li>
A lementett oldal egy fájlból és mappából áll. <li>
<br /> A lementett oldal egy fájlból és mappából áll.
<img <br />
src="img/faq/sitesave-2.jpg" <img
alt="img" src="img/faq/sitesave-2.jpg"
className={'manual_img'} alt="img"
/> className={'manual_img'}
</li> />
<li> </li>
A fájlt nyisd meg szövegszerkesztővel (notepad), és keress a <li>
nevedre, majd (csak a neved, ne a sort) töröld ki, és mentsd el. Nem A fájlt nyisd meg szövegszerkesztővel (notepad), és keress a
szoktam megnézni a neveket, nem is tudok velük mit kezdeni, és nem is nevedre, majd (csak a neved, ne a sort) töröld ki, és mentsd el. Nem
adom ki soha. Amit beküldesz, azt csak én látom.{' '} szoktam megnézni a neveket, nem is tudok velük mit kezdeni, és nem is
<Link href="/faq?tab=risk"> adom ki soha. Amit beküldesz, azt csak én látom.{' '}
Több infó itt <Link href="/faq?tab=risk">Több infó itt</Link>{' '}
</Link>{' '} </li>
</li> <li>
<li> <Link href="/contact">Ide tudod feltölteni</Link>{' '}
<Link href="/contact"> </li>
Ide tudod feltölteni </ul>
</Link>{' '} <p>
</li> Mivel nincs hozzáférésem semmilyen egyetemi oldalhoz, így csak így tudom
</ul> hatékonyan tesztelni a scriptet. Ezért hatalmas segítség ha feltöltöd
<p> azt az oldalt amin hibával találkozol.
Mivel nincs hozzáférésem semmilyen egyetemi oldalhoz, így csak így tudom </p>
hatékonyan tesztelni a scriptet. Ezért hatalmas segítség ha feltöltöd </>
azt az oldalt amin hibával találkozol. )
</p>
</>;
} }
function ScriptSection() { function ScriptSection() {
@ -240,9 +236,7 @@ function ScriptSection() {
<ul> <ul>
<li> <li>
<b>Hogy kell a scriptet telepíteni, és milyen oldalakon működik? </b> <b>Hogy kell a scriptet telepíteni, és milyen oldalakon működik? </b>
<Link href="/script"> <Link href="/script">Ezen az oldalon van leírva</Link>{' '}
Ezen az oldalon van leírva
</Link>{' '}
</li> </li>
<li> <li>
<b>Hogyan működik a script?</b> <b>Hogyan működik a script?</b>
@ -258,10 +252,7 @@ function ScriptSection() {
</li> </li>
<li> <li>
Más felhasználóknak köszönhetően már valószínűleg lesznek Más felhasználóknak köszönhetően már valószínűleg lesznek
megoldások a tesztjeidhez.{' '} megoldások a tesztjeidhez. <Link href="/allQuestions">Itt</Link>{' '}
<Link href="/allQuestions">
Itt
</Link>{' '}
meg tudod tekinteni, hogy vannak-e válaszok a tárgyadhoz. meg tudod tekinteni, hogy vannak-e válaszok a tárgyadhoz.
</li> </li>
<li> <li>
@ -378,77 +369,74 @@ function ScriptSection() {
</li> </li>
</ul> </ul>
</div> </div>
); )
} }
function AddSite() { function AddSite() {
return <> return (
Jelenleg az, hogy a script melyik oldalakon fut bele van égetve a script <>
forráskódjába. Ez itt látható:{' '} Jelenleg az, hogy a script melyik oldalakon fut bele van égetve a script
<a forráskódjába. Ez itt látható:{' '}
rel="noreferrer" <a
target="_blank" rel="noreferrer"
href="https://gitlab.com/MrFry/moodle-test-userscript/-/blob/master/stable.user.js#L52" target="_blank"
> href="https://gitlab.com/MrFry/moodle-test-userscript/-/blob/master/stable.user.js#L52"
stable.user.js#L52 >
</a> stable.user.js#L52
{'. '} </a>
Ez azért van így, hogy biztos csak olyan oldalakon fusson a script amit {'. '}
támogat is. Ez azért van így, hogy biztos csak olyan oldalakon fusson a script amit
<p /> támogat is.
Ehhez persze kézzel hozzá lehet adni ideiglenesen bármilyen oldalt, hogy <p />
kipróbáld ott működik-e. Akár működik, akár nem kérlek szólj, és frissítem Ehhez persze kézzel hozzá lehet adni ideiglenesen bármilyen oldalt, hogy
a scriptet hogy azon a domainen is fusson és működjön alapból. kipróbáld ott működik-e. Akár működik, akár nem kérlek szólj, és frissítem
<p /> a scriptet hogy azon a domainen is fusson és működjön alapból.
Egyetem moodle oldalának hozzáadása a scripthez kézzel: <p />
<ul> Egyetem moodle oldalának hozzáadása a scripthez kézzel:
<li> <ul>
<Link href="/script"> <li>
Először telepítsd a scriptet rendesen <Link href="/script">Először telepítsd a scriptet rendesen</Link>{' '}
</Link>{' '} </li>
</li> <li>
<li> Böngészőben nyisd meg a Tampermonkey bővítményt <br />
Böngészőben nyisd meg a Tampermonkey bővítményt <br /> <img className={'manual_img'} src={`img/faq/siteadd-1.png`} />
<img className={'manual_img'} src={`img/faq/siteadd-1.png`} /> <br />
<br /> Itt kattints a Dashboard-ra.
Itt kattints a Dashboard-ra. </li>
</li> <li>
<li> Keresd meg a scriptet, majd kattints :
Keresd meg a scriptet, majd kattints : <br />
<br /> <img className={'manual_img'} src={`img/faq/siteadd-2.png`} />
<img className={'manual_img'} src={`img/faq/siteadd-2.png`} /> </li>
</li> <li>
<li> A felugró szerkesztőben keresd meg a következő sorokat:
A felugró szerkesztőben keresd meg a következő sorokat: <br />
<br /> <img className={'manual_img'} src={`img/faq/siteadd-3.png`} />
<img className={'manual_img'} src={`img/faq/siteadd-3.png`} /> </li>
</li> <li>
<li> Itt az egyik <i>@match ...</i> sor után egy új sorban írd be az
Itt az egyik <i>@match ...</i> sor után egy új sorban írd be az egyetemed moodle oldalának címét. Ha ez a cím pl.:{' '}
egyetemed moodle oldalának címét. Ha ez a cím pl.:{' '} <i>https://moodle.egyetem.hu/main/akármi</i>, akkor a következőre írd
<i>https://moodle.egyetem.hu/main/akármi</i>, akkor a következőre írd át: <i>https://moodle.egyetem.hu/*</i>. Fenti képen látsz néhány
át: <i>https://moodle.egyetem.hu/*</i>. Fenti képen látsz néhány példát. <i>A {'"*"'} a végén fontos!</i>
példát. <i>A {'"*"'} a végén fontos!</i> </li>
</li> <li>
<li> Ezután mentsd el (ctrl + s, vagy file {'->'} save). Ha minden jól
Ezután mentsd el (ctrl + s, vagy file {'->'} save). Ha minden jól ment, akkor elég frissíteni a moodle oldalát, és a script futni fog
ment, akkor elég frissíteni a moodle oldalát, és a script futni fog rajta. Ezek után azon az oldalon amit beírtál meg kell jelennie a
rajta. Ezek után azon az oldalon amit beírtál meg kell jelennie a Tampermonkey menüjében is:
Tampermonkey menüjében is: <br />
<br /> <img className={'manual_img'} src={`img/faq/siteadd-4.png`} />
<img className={'manual_img'} src={`img/faq/siteadd-4.png`} /> </li>
</li> <li>
<li> Ha a tesztek közben mégsem megy, akkor ellenőrizd, hogy a beírt moodle
Ha a tesztek közben mégsem megy, akkor ellenőrizd, hogy a beírt moodle cím egyezik-e a teszt közbenivel. Ha kell egy kis segítség, kérdésed
cím egyezik-e a teszt közbenivel. Ha kell egy kis segítség, kérdésed van, nem működik valami, vagy éppen működik, de alapból nincs
van, nem működik valami, vagy éppen működik, de alapból nincs hozzáadva: <Link href="/contact">írj a kapcsolat oldalon!</Link>
hozzáadva:{' '} </li>
<Link href="/contact"> </ul>
írj a kapcsolat oldalon! </>
</Link> )
</li>
</ul>
</>;
} }
const pages = { const pages = {

View file

@ -9,7 +9,7 @@ import Composer from '../components/composer'
import Modal from '../components/modal' import Modal from '../components/modal'
import styles from './memes.module.css' import styles from './memes.module.css'
import constants from '../constants.json' import constants from '../constants'
const forumPostPerPage = 5 const forumPostPerPage = 5
const frontpageForumName = 'memes' const frontpageForumName = 'memes'

View file

@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react'
import Link from 'next/link' import Link from 'next/link'
import Header from '../components/header' import Header from '../components/header'
import constants from '../constants.json' import constants from '../constants'
import LoadingIndicator from '../components/LoadingIndicator' import LoadingIndicator from '../components/LoadingIndicator'
import styles from './p2pinfo.module.css' import styles from './p2pinfo.module.css'
@ -36,15 +36,15 @@ const infos = [
key: 'questionCount', key: 'questionCount',
type: 'number', type: 'number',
}, },
{
title: 'Script version',
key: 'scriptVersion',
},
{ {
title: 'Szerver build time', title: 'Szerver build time',
key: 'serverBuildTime', key: 'serverBuildTime',
type: 'date', type: 'date',
}, },
{
title: 'Script version',
key: 'scriptVersion',
},
{ {
title: 'Weboldal build time', title: 'Weboldal build time',
key: 'qminingPageBuildTime', key: 'qminingPageBuildTime',
@ -116,10 +116,17 @@ export default function P2PInfo({ globalState, setGlobalState }) {
</div> </div>
<div className={styles.container}> <div className={styles.container}>
<Header title={'P2P infó'} /> <Header title={'P2P infó'} />
A weboldal peer to peer (p2p) megoldást implementál, így több szerverrel <div style={{ textAlign: 'center' }}>
együtt tud működni, és a más szerveren hozzáadott adatokat időközönként A weboldal peer to peer (p2p) megoldást implementál, folyamatosan
elkéri, és hozzáadja a helyileg tárolt adatokhoz. Vagy valami ilyesmi megosztja az új kérdéseket a lent megadott regisztrált szerverekkel,
TODO: normális duma és hozzáadja a kapott új kérdéseket a helyi adatbázishoz.
<p />
Ha az egyik szerver kiesne, a script a megadott szerverek közül
választ egy újat. A felhasználók is szinkronizálva vannak, így a
jelenlegi jelszavaddal bármelyik másik oldalra be tudsz lépni
<p />A szervert akár te is hostolhatod, érdeklődj a lentebb megadott
kontakton
</div>
<hr /> <hr />
<div className={styles.title}>Szerver P2P információja:</div> <div className={styles.title}>Szerver P2P információja:</div>
<br /> <br />
@ -166,6 +173,11 @@ export default function P2PInfo({ globalState, setGlobalState }) {
</div> </div>
) )
})} })}
{p2pInfo.myPeers.length === 0 && (
<div className={styles.peerContainer}>
Ennél a szervernél jelenleg nincs peer regisztrálva
</div>
)}
</div> </div>
</> </>
) )

View file

@ -4,7 +4,7 @@ import Link from 'next/link'
import Header from '../components/header' import Header from '../components/header'
import styles from './pwRequest.module.css' import styles from './pwRequest.module.css'
import constants from '../constants.json' import constants from '../constants'
function fetchAvailablePWS() { function fetchAvailablePWS() {
return new Promise((resolve) => { return new Promise((resolve) => {
@ -107,10 +107,7 @@ export default function PwRequest({ globalData, globalState, setGlobalState }) {
Minden felhasználó egyedi jelszót kap. Ne használjatok többen egy Minden felhasználó egyedi jelszót kap. Ne használjatok többen egy
jelszót, mert egy idő után -biztonsági okokból- kidob a rendszer, jelszót, mert egy idő után -biztonsági okokból- kidob a rendszer,
ha ugyan az a felhasználó több helyen is belépve marad. A ha ugyan az a felhasználó több helyen is belépve marad. A
jelszavakról bővebben a{' '} jelszavakról bővebben a <Link href="/faq?tab=pw">GYIK</Link>{' '}
<Link href="/faq?tab=pw">
GYIK
</Link>{' '}
vonatkozó részében olvashatsz. vonatkozó részében olvashatsz.
</p> </p>
</div> </div>
@ -191,5 +188,5 @@ export default function PwRequest({ globalData, globalState, setGlobalState }) {
</div> </div>
</center> </center>
</div> </div>
); )
} }

View file

@ -4,7 +4,7 @@ import Header from '../components/header'
import LoadingIndicator from '../components/LoadingIndicator' import LoadingIndicator from '../components/LoadingIndicator'
import styles from './ranklist.module.css' import styles from './ranklist.module.css'
import constants from '../constants.json' import constants from '../constants'
const selectOptions = { const selectOptions = {
newQuestions: { name: 'Beküldött új kérdések' }, newQuestions: { name: 'Beküldött új kérdések' },

View file

@ -4,7 +4,7 @@ import { useQuery } from 'react-query'
import Header from '../components/header' import Header from '../components/header'
import Link from 'next/link' import Link from 'next/link'
import constants from '../constants.json' import constants from '../constants'
import ExternalLinkIcon from '../components/externalLinkIcon' import ExternalLinkIcon from '../components/externalLinkIcon'
import styles from './script.module.css' import styles from './script.module.css'
@ -102,13 +102,9 @@ export default function Script() {
<li> <li>
Ha be vagy jelentkezve, akkor a teszt oldalakon a megoldásokat Ha be vagy jelentkezve, akkor a teszt oldalakon a megoldásokat
kellene látnod egy felugró ablakban felül. Ha nem, akkor{' '} kellene látnod egy felugró ablakban felül. Ha nem, akkor{' '}
<Link href="/faq"> <Link href="/faq">GYIK</Link>
GYIK
</Link>
-be olvass bele, vagy{' '} -be olvass bele, vagy{' '}
<Link href="/contact"> <Link href="/contact">írj üzenetet mi nem működik</Link>
írj üzenetet mi nem működik
</Link>
</li> </li>
</ol> </ol>
<b>Példa felugró ablakokra:</b> <b>Példa felugró ablakokra:</b>
@ -161,5 +157,5 @@ export default function Script() {
</ul> </ul>
</div> </div>
</div> </div>
); )
} }

View file

@ -1,6 +1,6 @@
import React from 'react' import React from 'react'
import styles from './thanks.module.css' import styles from './thanks.module.css'
import constants from '../constants.json' import constants from '../constants'
import Head from 'next/head' import Head from 'next/head'
export default function Thanks() { export default function Thanks() {

View file

@ -8,7 +8,7 @@ import UpDownVote from '../components/upDownVote'
import Header from '../components/header' import Header from '../components/header'
import styles from './userfiles.module.css' import styles from './userfiles.module.css'
import constants from '../constants.json' import constants from '../constants'
function vote(to, item) { function vote(to, item) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -382,7 +382,11 @@ export default function UserFiles({
<div className={`${styles.tableContainer} ${styles.rows}`}> <div className={`${styles.tableContainer} ${styles.rows}`}>
{currDir && ( {currDir && (
<div <div
style={{ height: 40, justifyContent: "center", display: "flex" }} style={{
height: 40,
justifyContent: 'center',
display: 'flex',
}}
onClick={() => { onClick={() => {
goBack() goBack()
}} }}
@ -482,13 +486,14 @@ export default function UserFiles({
onClick={(e) => { onClick={(e) => {
e.stopPropagation() e.stopPropagation()
}} }}
className={'userId'}> className={'userId'}
>
{`#${user}`} {`#${user}`}
</Link> </Link>
))} ))}
</div> </div>
</div> </div>
); )
})} })}
</> </>
) : ( ) : (
@ -513,7 +518,7 @@ export default function UserFiles({
<LoadingIndicator /> <LoadingIndicator />
)} )}
</div> </div>
); )
} }
return ( return (
@ -535,10 +540,8 @@ export default function UserFiles({
vállalás nincs. vállalás nincs.
</b>{' '} </b>{' '}
Ha valami nem idevalót látsz, azt a{' '} Ha valami nem idevalót látsz, azt a{' '}
<Link href="/contact"> <Link href="/contact">Kapcsolat</Link> oldalon jelezd kérlek. Tudatos
Kapcsolat károkozásért ban jár.
</Link>{' '}
oldalon jelezd kérlek. Tudatos károkozásért ban jár.
</div> </div>
)} )}
<hr /> <hr />
@ -602,5 +605,5 @@ export default function UserFiles({
</Modal> </Modal>
)} )}
</div> </div>
); )
} }

View file

@ -3,7 +3,7 @@ import React, { useState, useEffect } from 'react'
import Header from '../components/header' import Header from '../components/header'
import styles from './validation.module.css' import styles from './validation.module.css'
import constants from '../constants.json' import constants from '../constants'
function fetchValidation() { function fetchValidation() {
return new Promise((resolve) => { return new Promise((resolve) => {
@ -37,8 +37,7 @@ export default function Validation() {
<center> <center>
<div className={styles.descrip}> <div className={styles.descrip}>
Különböző okokból kellhet, hogy bizonyítsd hogy az oldalhoz van Különböző okokból kellhet, hogy bizonyítsd hogy az oldalhoz van
hozzáférésed. Ebben az esetben ezzel a tokennel tudod: TODO: normális hozzáférésed. Ebben az esetben ezzel a tokennel tudod:
duma
</div> </div>
{token && <div className={styles.tokenContainer}>{token}</div>} {token && <div className={styles.tokenContainer}>{token}</div>}
</center> </center>