added subject download button, fixed all questions display on allquestions

This commit is contained in:
mrfry 2023-04-30 18:54:05 +02:00
parent 2e12f3275d
commit 055a732733
5 changed files with 161 additions and 48 deletions

View file

@ -98,7 +98,13 @@ function TopBar({
)
}
function SideBar({ sidebarOpen, closeSideBar, href, setDonateShowing }) {
function SideBar({
sidebarOpen,
closeSideBar,
href,
setDonateShowing,
setReposShowing,
}) {
return sidebarOpen ? (
<>
<div id="sideBarLinks" className={styles.sidebarLinks}>
@ -120,6 +126,14 @@ function SideBar({ sidebarOpen, closeSideBar, href, setDonateShowing }) {
</Link>
)
})}
<a
onClick={() => {
closeSideBar()
setReposShowing(true)
}}
>
Project Git linkek
</a>
<a
onClick={() => {
closeSideBar()
@ -133,6 +147,54 @@ function SideBar({ sidebarOpen, closeSideBar, href, setDonateShowing }) {
) : 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() {
return (
<div>
@ -233,6 +295,7 @@ function MenuIcon({ setSidebarOpen, sidebarOpen }) {
export default function Layout({ children, router, globalData }) {
const [sidebarOpen, setSidebarOpen] = useState(true)
const [donateShowing, setDonateShowing] = useState(false)
const [reposShowing, setReposShowing] = useState(false)
const userId = globalData.userId
const unreads = globalData.unreads
@ -279,8 +342,18 @@ export default function Layout({ children, router, globalData }) {
closeSideBar={closeSideBar}
href={href}
setDonateShowing={setDonateShowing}
setReposShowing={setReposShowing}
/>
</div>
{reposShowing ? (
<Modal
closeClick={() => {
setReposShowing(false)
}}
>
<Repos />
</Modal>
) : null}
{donateShowing ? (
<Modal
closeClick={() => {

View file

@ -211,8 +211,8 @@ export default function AllQuestions({ router, globalState, setGlobalState }) {
// FIXME: active item is all then no highlight
const key = dbs.findIndex((x) => x.path === item.path)
setData(null)
setSelectedDb(key === 'all' ? 'all' : key)
if (key === 'all') {
setSelectedDb(key === -1 ? 'all' : key)
if (key === -1) {
router.replace(
`${router.pathname}?question=${encodeURIComponent(
searchTerm
@ -267,7 +267,32 @@ export default function AllQuestions({ router, globalState, setGlobalState }) {
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>
<hr />
<Subject subj={currSubj} />

View file

@ -12,6 +12,10 @@ function PasswordSection() {
<div className={'manualBody'}>
<ul>
<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
</li>
<li>Elvileg elég csak egyszer beírnod, és többet nem kell, de </li>
<li>
Mentsd le biztos helyre a jelszót, hogy később is meglegyen!
@ -77,14 +81,6 @@ function FAQSection() {
<br />
Több infó a <Link href="/faq?tab=risk">kockázatok résznél</Link>.
</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>
<b>Hogyan tudok a projektben segíteni?</b>
Szinte mindig végtelen javítanivaló és tennivaló a projekttel
@ -110,10 +106,9 @@ function RiskSection() {
<li>
<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)
szerepelhet személyes adat, pl.: név. Ha ilyen információval
találkozok, akkor azt ki szoktam törölni. Ezekhez a fájlokhoz és
információkhoz csak én férek hozzá, és sehova sincs kiadva. Ezek az
információk nincsenek sehol gyűjtve.
szerepelhet személyes adat, pl.: név. Ezekhez a fájlokhoz és
információkhoz csak az admin fér hozzá. Ezek az információk nincsenek
sehol gyűjtve.
</li>
<li>
<b>
@ -126,18 +121,17 @@ function RiskSection() {
teszi.
<p />
Bizonyíték? A script, weboldal és szerver teljesen nyílt forráskódú,{' '}
TODO: ADD CONTRIBUTE TAB
<Link href="/contribute#gitrepo">
ezek repository-ja publikus
</Link>{' '}
(contribute oldal alja), és akármikor felülvizsgálható. A script a te
böngésződben fut, tampermonkey bővítmény menüjében megtekinthető
milyen kód fut pontosan.
ezek repository-ja publikus, és akármikor felülvizsgálható. A script a
te böngésződben fut, tampermonkey bővítmény menüjében megtekinthető
milyen kód fut pontosan, és frissítéseknél megtekinthetőek a
változások.
<p />A projeckt git repókhoz vezető linkek megtalálhatók az
oldalsávban
</li>
<li>
<b>Bármikor észrevehetik hogy használod a scriptet</b> Vannak
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
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.
@ -147,8 +141,8 @@ function RiskSection() {
át, hanem javascript eseménnyel, amit nem tud nyomon követni.
<p />
Aztán ki tudja ténylegesen hogy lehet, ezért{' '}
<b>csak saját felelősségre használd a scriptet!</b>
<p />A kérdésekre a válaszokat
<i>csak saját felelősségre használd a scriptet!</i>
<p />A kérdésekre a válaszokat{' '}
<a
href={`${constants.siteUrl}dataeditor`}
target="_blank"
@ -157,7 +151,8 @@ function RiskSection() {
manuálisan is be lehet küldeni
</a>
, é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>
<b>Bármikor leállhat a szerver</b>
@ -177,8 +172,8 @@ function RiskSection() {
<b>Akármelyik válasz rossz lehet</b>
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
előfordulhat hogy logikailag nem helyes a válasz, de a tanárok azt
jelölték be helyesnek.
ritkán előfordulhat hogy logikailag nem helyes a válasz, de a tanárok
azt jelölték be helyesnek.
</li>
</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ő
gombbal.
</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>
<b>Script felugró ablakon szereplő adatok és gombok értelmezése</b>
<img
@ -448,13 +451,14 @@ function AddSite() {
function P2PSection() {
return (
<>
<p>
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 a fontosabb adatokat, így az összes szerveren ugyanazok az adatok
érhetőek el.
</p>
Szinkronizált adatok:
ha több szerver fut egyszerre, akkor azok meg tudják osztani egymás között
a fontosabb adatokat, így az összes szerveren ugyanazok az adatok érhetőek
el.
<p />
Ha az egyik szerver kiesne, a script a megadott szerverek közül választ
egy újat.
<p />A következő adatok a szerverek között azonnal szinkronizálva vannak:
<ul>
<li>
<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>Motd (motto of the day)</li>
</ul>
A szinkronizált adatok frissessége több mindenen múlik: a szerver adminja
szinkronizál-e rendesein, illetve a két szerver között működik-e a
felhasználó szinkronizálás (van-e publick key megoszva a kettő között)
<h4>Peerek kezelése scriptnél:</h4>
Ha nincs alapértelmezett peer, akkor ez az ablak fog megjelenni:
<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 />
Egy szerverhez beérkező új kérdések automatikusan tovább vannak küldve a
szervernél regisztrált peerekhez, így az új kérdések azonnal elérhetők
mindenhol máshol.
<img src="img/scriptimg/script-1.jpg" alt="img" />
<br />
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
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

View file

@ -149,12 +149,8 @@ export default function P2PInfo({ globalState, setGlobalState }) {
<Header title={'P2P infó'} />
<div style={{ textAlign: 'center' }}>
A weboldal peer to peer (p2p) megoldást implementál, folyamatosan
megosztja az új kérdéseket a lent megadott regisztrált szerverekkel,
é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
megosztja az új kérdéseket és felhasználókat a lent megadott
regisztrált szerverekkel
<p />A szervert akár te is hostolhatod, érdeklődj a lentebb megadott
kontakton
</div>

View file

@ -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
jelszavakról bővebben a <Link href="/faq?tab=pw">GYIK</Link>{' '}
vonatkozó részében olvashatsz.
<p />A jelszavak automatikusan és azonnal szinkronizálva vannak
peerek között. Egy jelszó minden peer-hez
</p>
</div>
<div className={styles.text}>