mirror of
https://gitlab.com/MrFry/qmining-page
synced 2025-04-01 20:23:44 +02:00
added subject download button, fixed all questions display on allquestions
This commit is contained in:
parent
2e12f3275d
commit
055a732733
5 changed files with 161 additions and 48 deletions
|
@ -98,7 +98,13 @@ function TopBar({
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function SideBar({ sidebarOpen, closeSideBar, href, setDonateShowing }) {
|
function SideBar({
|
||||||
|
sidebarOpen,
|
||||||
|
closeSideBar,
|
||||||
|
href,
|
||||||
|
setDonateShowing,
|
||||||
|
setReposShowing,
|
||||||
|
}) {
|
||||||
return sidebarOpen ? (
|
return sidebarOpen ? (
|
||||||
<>
|
<>
|
||||||
<div id="sideBarLinks" className={styles.sidebarLinks}>
|
<div id="sideBarLinks" className={styles.sidebarLinks}>
|
||||||
|
@ -120,6 +126,14 @@ function SideBar({ sidebarOpen, closeSideBar, href, setDonateShowing }) {
|
||||||
</Link>
|
</Link>
|
||||||
)
|
)
|
||||||
})}
|
})}
|
||||||
|
<a
|
||||||
|
onClick={() => {
|
||||||
|
closeSideBar()
|
||||||
|
setReposShowing(true)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Project Git linkek
|
||||||
|
</a>
|
||||||
<a
|
<a
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
closeSideBar()
|
closeSideBar()
|
||||||
|
@ -133,6 +147,54 @@ function SideBar({ sidebarOpen, closeSideBar, href, setDonateShowing }) {
|
||||||
) : null
|
) : null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function Repos() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<div className={styles.modalHead}>Project Git repository-k</div>
|
||||||
|
<div style={{ textAlign: 'justify', margin: '8px' }}>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
rel="noreferrer"
|
||||||
|
target="_blank"
|
||||||
|
href="https://gitlab.com/MrFry/mrfrys-node-server"
|
||||||
|
>
|
||||||
|
Szerver
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
rel="noreferrer"
|
||||||
|
target="_blank"
|
||||||
|
href="https://gitlab.com/MrFry/moodle-test-userscript"
|
||||||
|
>
|
||||||
|
Userscript
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
rel="noreferrer"
|
||||||
|
target="_blank"
|
||||||
|
href="https://gitlab.com/MrFry/qmining-page"
|
||||||
|
>
|
||||||
|
Frontend
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
rel="noreferrer"
|
||||||
|
target="_blank"
|
||||||
|
href="https://gitlab.com/MrFry/qmining-data-editor"
|
||||||
|
>
|
||||||
|
Data editor frontend
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
function Donate() {
|
function Donate() {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
@ -233,6 +295,7 @@ function MenuIcon({ setSidebarOpen, sidebarOpen }) {
|
||||||
export default function Layout({ children, router, globalData }) {
|
export default function Layout({ children, router, globalData }) {
|
||||||
const [sidebarOpen, setSidebarOpen] = useState(true)
|
const [sidebarOpen, setSidebarOpen] = useState(true)
|
||||||
const [donateShowing, setDonateShowing] = useState(false)
|
const [donateShowing, setDonateShowing] = useState(false)
|
||||||
|
const [reposShowing, setReposShowing] = useState(false)
|
||||||
|
|
||||||
const userId = globalData.userId
|
const userId = globalData.userId
|
||||||
const unreads = globalData.unreads
|
const unreads = globalData.unreads
|
||||||
|
@ -279,8 +342,18 @@ export default function Layout({ children, router, globalData }) {
|
||||||
closeSideBar={closeSideBar}
|
closeSideBar={closeSideBar}
|
||||||
href={href}
|
href={href}
|
||||||
setDonateShowing={setDonateShowing}
|
setDonateShowing={setDonateShowing}
|
||||||
|
setReposShowing={setReposShowing}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
{reposShowing ? (
|
||||||
|
<Modal
|
||||||
|
closeClick={() => {
|
||||||
|
setReposShowing(false)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Repos />
|
||||||
|
</Modal>
|
||||||
|
) : null}
|
||||||
{donateShowing ? (
|
{donateShowing ? (
|
||||||
<Modal
|
<Modal
|
||||||
closeClick={() => {
|
closeClick={() => {
|
||||||
|
|
|
@ -211,8 +211,8 @@ export default function AllQuestions({ router, globalState, setGlobalState }) {
|
||||||
// FIXME: active item is all then no highlight
|
// FIXME: active item is all then no highlight
|
||||||
const key = dbs.findIndex((x) => x.path === item.path)
|
const key = dbs.findIndex((x) => x.path === item.path)
|
||||||
setData(null)
|
setData(null)
|
||||||
setSelectedDb(key === 'all' ? 'all' : key)
|
setSelectedDb(key === -1 ? 'all' : key)
|
||||||
if (key === 'all') {
|
if (key === -1) {
|
||||||
router.replace(
|
router.replace(
|
||||||
`${router.pathname}?question=${encodeURIComponent(
|
`${router.pathname}?question=${encodeURIComponent(
|
||||||
searchTerm
|
searchTerm
|
||||||
|
@ -267,7 +267,32 @@ export default function AllQuestions({ router, globalState, setGlobalState }) {
|
||||||
setActiveSubjName(subjName)
|
setActiveSubjName(subjName)
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
{currSubj && (
|
||||||
|
<>
|
||||||
|
{selectedDb !== 'all' ? (
|
||||||
|
<div className={'buttonContainer'}>
|
||||||
|
<a
|
||||||
|
onClick={() => {
|
||||||
|
window.open(
|
||||||
|
`${constants.apiUrl}allqr.txt?db=${dbs[selectedDb].name}&subj=${currSubj.Name}`,
|
||||||
|
'_blank'
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{'Tárgy kérdéseinek letöltése'}
|
||||||
|
<ExternalLinkIcon size={15} />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<div style={{ textAlign: 'center' }}>
|
||||||
|
<i>
|
||||||
|
Tárgy letöltéséhez válaszd ki a pontos DB-t az{' '}
|
||||||
|
{'"Összes kérdés"'} helyett!
|
||||||
|
</i>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
<div>
|
<div>
|
||||||
<hr />
|
<hr />
|
||||||
<Subject subj={currSubj} />
|
<Subject subj={currSubj} />
|
||||||
|
|
|
@ -12,6 +12,10 @@ function PasswordSection() {
|
||||||
<div className={'manualBody'}>
|
<div className={'manualBody'}>
|
||||||
<ul>
|
<ul>
|
||||||
<li>Minden felhasználónak más jelszava van.</li>
|
<li>Minden felhasználónak más jelszava van.</li>
|
||||||
|
<li>
|
||||||
|
A jelszavak automatikusan és azonnal szinkronizálva vannak peerek
|
||||||
|
között. Egy jelszó minden peer-hez jó
|
||||||
|
</li>
|
||||||
<li>Elvileg elég csak egyszer beírnod, és többet nem kell, de </li>
|
<li>Elvileg elég csak egyszer beírnod, és többet nem kell, de </li>
|
||||||
<li>
|
<li>
|
||||||
Mentsd le biztos helyre a jelszót, hogy később is meglegyen!
|
Mentsd le biztos helyre a jelszót, hogy később is meglegyen!
|
||||||
|
@ -77,14 +81,6 @@ function FAQSection() {
|
||||||
<br />
|
<br />
|
||||||
Több infó a <Link href="/faq?tab=risk">kockázatok résznél</Link>.
|
Több infó a <Link href="/faq?tab=risk">kockázatok résznél</Link>.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<b>Peer váltás után nem tudok bejelentkezni!</b>
|
|
||||||
Peer (vagy másnéven host) váltás után ha még nem kapcsolódtál a
|
|
||||||
megadott host-hoz engedélyezned kell a scriptnek hogy csatlakozzon
|
|
||||||
hozzá. Ez a felugró ablak nem minding azonnal jelenik meg, néha
|
|
||||||
előfordulhat hogy frissíteni kell az oldalt. Ha ezután sem működik
|
|
||||||
ellenőrizd hogy elérhető-e a host
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<b>Hogyan tudok a projektben segíteni?</b>
|
<b>Hogyan tudok a projektben segíteni?</b>
|
||||||
Szinte mindig végtelen javítanivaló és tennivaló a projekttel
|
Szinte mindig végtelen javítanivaló és tennivaló a projekttel
|
||||||
|
@ -110,10 +106,9 @@ function RiskSection() {
|
||||||
<li>
|
<li>
|
||||||
<b>Adminnak küldött fájlok kezelése</b>A beküldött fájlokban
|
<b>Adminnak küldött fájlok kezelése</b>A beküldött fájlokban
|
||||||
(adminnnak chat-en küldött, vagy kapcsolat oldalon küldött fájlok)
|
(adminnnak chat-en küldött, vagy kapcsolat oldalon küldött fájlok)
|
||||||
szerepelhet személyes adat, pl.: név. Ha ilyen információval
|
szerepelhet személyes adat, pl.: név. Ezekhez a fájlokhoz és
|
||||||
találkozok, akkor azt ki szoktam törölni. Ezekhez a fájlokhoz és
|
információkhoz csak az admin fér hozzá. Ezek az információk nincsenek
|
||||||
információkhoz csak én férek hozzá, és sehova sincs kiadva. Ezek az
|
sehol gyűjtve.
|
||||||
információk nincsenek sehol gyűjtve.
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>
|
<b>
|
||||||
|
@ -126,18 +121,17 @@ function RiskSection() {
|
||||||
teszi.
|
teszi.
|
||||||
<p />
|
<p />
|
||||||
Bizonyíték? A script, weboldal és szerver teljesen nyílt forráskódú,{' '}
|
Bizonyíték? A script, weboldal és szerver teljesen nyílt forráskódú,{' '}
|
||||||
TODO: ADD CONTRIBUTE TAB
|
ezek repository-ja publikus, és akármikor felülvizsgálható. A script a
|
||||||
<Link href="/contribute#gitrepo">
|
te böngésződben fut, tampermonkey bővítmény menüjében megtekinthető
|
||||||
ezek repository-ja publikus
|
milyen kód fut pontosan, és frissítéseknél megtekinthetőek a
|
||||||
</Link>{' '}
|
változások.
|
||||||
(contribute oldal alja), és akármikor felülvizsgálható. A script a te
|
<p />A projeckt git repókhoz vezető linkek megtalálhatók az
|
||||||
böngésződben fut, tampermonkey bővítmény menüjében megtekinthető
|
oldalsávban
|
||||||
milyen kód fut pontosan.
|
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>Bármikor észrevehetik hogy használod a scriptet</b> Vannak rá
|
<b>Bármikor észrevehetik hogy használod a scriptet</b> Vannak rá
|
||||||
módszerek, hogy a weboldalon érzékeljék hogy fut-e userscript, de ez
|
módszerek, hogy a weboldalon érzékeljék hogy fut-e userscript, de ez
|
||||||
ellen minden ismert módon védekezik a script. <p />
|
ellen védekezik a script. <p />
|
||||||
A script shadow-root hoz teszi hozzá az összes megjelenített
|
A script shadow-root hoz teszi hozzá az összes megjelenített
|
||||||
elementet, így ezeket lehetetlen detektálni. A moodle semmiféleképpen
|
elementet, így ezeket lehetetlen detektálni. A moodle semmiféleképpen
|
||||||
nem látja, hogy milyen más oldalak vannak megnyitva a böngésződben.
|
nem látja, hogy milyen más oldalak vannak megnyitva a böngésződben.
|
||||||
|
@ -147,8 +141,8 @@ function RiskSection() {
|
||||||
át, hanem javascript eseménnyel, amit nem tud nyomon követni.
|
át, hanem javascript eseménnyel, amit nem tud nyomon követni.
|
||||||
<p />
|
<p />
|
||||||
Aztán ki tudja ténylegesen hogy lehet, ezért{' '}
|
Aztán ki tudja ténylegesen hogy lehet, ezért{' '}
|
||||||
<b>csak saját felelősségre használd a scriptet!</b>
|
<i>csak saját felelősségre használd a scriptet!</i>
|
||||||
<p />A kérdésekre a válaszokat
|
<p />A kérdésekre a válaszokat{' '}
|
||||||
<a
|
<a
|
||||||
href={`${constants.siteUrl}dataeditor`}
|
href={`${constants.siteUrl}dataeditor`}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
|
@ -157,7 +151,8 @@ function RiskSection() {
|
||||||
manuálisan is be lehet küldeni
|
manuálisan is be lehet küldeni
|
||||||
</a>
|
</a>
|
||||||
, és teszt kitöltés közben helyes válaszokat a weboldalon is meg lehet
|
, és teszt kitöltés közben helyes válaszokat a weboldalon is meg lehet
|
||||||
keresni.
|
keresni. Ez viszont azért lehet veszélyes, mert a moodle figyelheti
|
||||||
|
mikor veszíti el a fókuszt a weboldal.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>Bármikor leállhat a szerver</b>
|
<b>Bármikor leállhat a szerver</b>
|
||||||
|
@ -177,8 +172,8 @@ function RiskSection() {
|
||||||
<b>Akármelyik válasz rossz lehet</b>
|
<b>Akármelyik válasz rossz lehet</b>
|
||||||
Pl.: ha a script rosszul menti le, vagy rossz kérdésre ad választ. A
|
Pl.: ha a script rosszul menti le, vagy rossz kérdésre ad választ. A
|
||||||
script minding a moodle szerint helyesnek vélt választ menti le, így
|
script minding a moodle szerint helyesnek vélt választ menti le, így
|
||||||
előfordulhat hogy logikailag nem helyes a válasz, de a tanárok azt
|
ritkán előfordulhat hogy logikailag nem helyes a válasz, de a tanárok
|
||||||
jelölték be helyesnek.
|
azt jelölték be helyesnek.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</>
|
</>
|
||||||
|
@ -303,6 +298,14 @@ function ScriptSection() {
|
||||||
áttetszőségét, vagy be tudod zárni jobb felül X-el, vagy egér középső
|
áttetszőségét, vagy be tudod zárni jobb felül X-el, vagy egér középső
|
||||||
gombbal.
|
gombbal.
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<b>Peer váltás után nem tudok bejelentkezni a scripten keresztül!</b>
|
||||||
|
Peer (vagy másnéven host) váltás után ha még nem kapcsolódtál a
|
||||||
|
megadott host-hoz engedélyezned kell a scriptnek hogy csatlakozzon
|
||||||
|
hozzá. Ez a felugró ablak nem minding azonnal jelenik meg, néha
|
||||||
|
előfordulhat hogy frissíteni kell az oldalt. Ha ezután sem működik
|
||||||
|
ellenőrizd hogy elérhető-e a host
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>Script felugró ablakon szereplő adatok és gombok értelmezése</b>
|
<b>Script felugró ablakon szereplő adatok és gombok értelmezése</b>
|
||||||
<img
|
<img
|
||||||
|
@ -448,13 +451,14 @@ function AddSite() {
|
||||||
function P2PSection() {
|
function P2PSection() {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<p>
|
A szerverben peer to peer (p2p) funkcionalitás is implementálva van, így
|
||||||
A szerverben peer to peer (p2p) funkcionalitás is implementálva van, így
|
ha több szerver fut egyszerre, akkor azok meg tudják osztani egymás között
|
||||||
ha több szerver fut egyszerre, akkor azok meg tudják osztani egymás
|
a fontosabb adatokat, így az összes szerveren ugyanazok az adatok érhetőek
|
||||||
között a fontosabb adatokat, így az összes szerveren ugyanazok az adatok
|
el.
|
||||||
érhetőek el.
|
<p />
|
||||||
</p>
|
Ha az egyik szerver kiesne, a script a megadott szerverek közül választ
|
||||||
Szinkronizált adatok:
|
egy újat.
|
||||||
|
<p />A következő adatok a szerverek között azonnal szinkronizálva vannak:
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<i>Felhasználók</i>: egy jelszóval az összes oldalra be tudsz lépni
|
<i>Felhasználók</i>: egy jelszóval az összes oldalra be tudsz lépni
|
||||||
|
@ -470,13 +474,26 @@ function P2PSection() {
|
||||||
<li>Fórum</li>
|
<li>Fórum</li>
|
||||||
<li>Motd (motto of the day)</li>
|
<li>Motd (motto of the day)</li>
|
||||||
</ul>
|
</ul>
|
||||||
A szinkronizált adatok frissessége több mindenen múlik: a szerver adminja
|
<h4>Peerek kezelése scriptnél:</h4>
|
||||||
szinkronizál-e rendesein, illetve a két szerver között működik-e a
|
Ha nincs alapértelmezett peer, akkor ez az ablak fog megjelenni:
|
||||||
felhasználó szinkronizálás (van-e publick key megoszva a kettő között)
|
<br />
|
||||||
|
<img src="img/scriptimg/script-5.jpg" alt="img" />
|
||||||
|
<br />
|
||||||
|
Itt a szerver domain-jét kell megadni a következő példa formátumban:
|
||||||
|
{" 'qmining.com'"}, {"'https://'"} és {"'/'"}-ek nélkül
|
||||||
<p />
|
<p />
|
||||||
Egy szerverhez beérkező új kérdések automatikusan tovább vannak küldve a
|
<img src="img/scriptimg/script-1.jpg" alt="img" />
|
||||||
szervernél regisztrált peerekhez, így az új kérdések azonnal elérhetők
|
<br />
|
||||||
mindenhol máshol.
|
Ennél az ablaknál a legördülő menüben ki lehet választani egy másik peert,
|
||||||
|
vagy újat lehet hozzáadni. Ha olyan peer-hez próbál a script kapcsolódni,
|
||||||
|
amihez még előtte nem kapcsolódott, akkor engedélyezned kell a felugró
|
||||||
|
ablakban a tampermonkey-nak, hogy csatlakozhasson a domain-hez.
|
||||||
|
<br />
|
||||||
|
<img
|
||||||
|
style={{ width: '70%' }}
|
||||||
|
src="img/scriptimg/script-6.jpg"
|
||||||
|
alt="img"
|
||||||
|
/>
|
||||||
<p />A szervereknek 1-1 adminja van, akik belelátnak minden szerveren
|
<p />A szervereknek 1-1 adminja van, akik belelátnak minden szerveren
|
||||||
tárolt adatba, a szervereken ők a <i>#1</i> számú felhasználók. Errő
|
tárolt adatba, a szervereken ők a <i>#1</i> számú felhasználók. Errő
|
||||||
többet a <Link href="/faq?tab=risk">kockázatok résznél</Link> tudtok
|
többet a <Link href="/faq?tab=risk">kockázatok résznél</Link> tudtok
|
||||||
|
|
|
@ -149,12 +149,8 @@ export default function P2PInfo({ globalState, setGlobalState }) {
|
||||||
<Header title={'P2P infó'} />
|
<Header title={'P2P infó'} />
|
||||||
<div style={{ textAlign: 'center' }}>
|
<div style={{ textAlign: 'center' }}>
|
||||||
A weboldal peer to peer (p2p) megoldást implementál, folyamatosan
|
A weboldal peer to peer (p2p) megoldást implementál, folyamatosan
|
||||||
megosztja az új kérdéseket a lent megadott regisztrált szerverekkel,
|
megosztja az új kérdéseket és felhasználókat a lent megadott
|
||||||
és hozzáadja a kapott új kérdéseket a helyi adatbázishoz.
|
regisztrált szerverekkel
|
||||||
<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
|
<p />A szervert akár te is hostolhatod, érdeklődj a lentebb megadott
|
||||||
kontakton
|
kontakton
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -109,6 +109,8 @@ export default function PwRequest({ globalData, globalState, setGlobalState }) {
|
||||||
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 <Link href="/faq?tab=pw">GYIK</Link>{' '}
|
jelszavakról bővebben a <Link href="/faq?tab=pw">GYIK</Link>{' '}
|
||||||
vonatkozó részében olvashatsz.
|
vonatkozó részében olvashatsz.
|
||||||
|
<p />A jelszavak automatikusan és azonnal szinkronizálva vannak
|
||||||
|
peerek között. Egy jelszó minden peer-hez jó
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.text}>
|
<div className={styles.text}>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue