Added user questions

This commit is contained in:
MrFry 2020-03-08 12:01:10 +01:00
parent 261e04a0eb
commit b7dcc360bc
4 changed files with 116 additions and 139 deletions

View file

@ -30,7 +30,12 @@ export default function Layout (props) {
<Link href='/allQuestions' > <Link href='/allQuestions' >
<a <a
className={currPageName === 'allQuestions' ? 'active' : ''} className={currPageName === 'allQuestions' ? 'active' : ''}
>manual</a> >AllQuestions</a>
</Link>
<Link href='/userQuestions' >
<a
className={currPageName === 'userQuestions' ? 'active' : ''}
>userQuestions</a>
</Link> </Link>
</div> </div>
<div className='content'> <div className='content'>

View file

@ -1,94 +1,69 @@
import React, { PureComponent } from 'react' import React, { useState, useEffect } from 'react'
import fetch from 'unfetch' import fetch from 'unfetch'
import LoadingIndicator from '../components/LoadingIndicator.js' import LoadingIndicator from '../components/LoadingIndicator.js'
import Subject from '../components/Subject.js' import Subject from '../components/Subject.js'
import SubjectSelector from '../components/SubjectSelector.js' import SubjectSelector from '../components/SubjectSelector.js'
import constants from '../constants.json'
import Layout from '../components/layout' import Layout from '../components/layout'
class AllQuestions extends PureComponent { import constants from '../constants.json'
constructor (props) {
super(props)
this.state = { export default function AllQuestions (props) {
loaded: false, const [data, setData] = useState(null)
activeSubjName: '', const [loaded, setLoaded] = useState(false)
searchTerm: '' const [activeSubjName, setActiveSubjName] = useState('')
} const [searchTerm, setSearchTerm] = useState('')
// TODO: fetches twice
useEffect(() => {
console.info('Fetching data') console.info('Fetching data')
fetch(`${constants.serverUrl}data.json`) // eslint-disable-line fetch(`${constants.serverUrl}data.json`)
.then((resp) => { .then((resp) => {
return resp.json() return resp.json()
}) })
.then((data) => { .then((data) => {
this.data = data setData(data)
this.setState({ setLoaded(true)
loaded: true
})
}) })
} }, [loaded])
onSubjSelect (name) { if (loaded) {
this.setState({ let currSubj = data.Subjects.find((subj) => {
activeSubjName: name return subj.Name === activeSubjName
}) })
}
searchBarOnChange (e) { return (
let text = e.target.value <Layout currPageName='allQuestions' >
this.setState({ <div>
searchTerm: text
})
}
render () {
const { loaded, activeSubjName, searchTerm } = this.state
if (loaded) {
let currSubj = this.data.Subjects.find((subj) => {
return subj.Name === activeSubjName
})
return (
<Layout currPageName='allQuestions' >
<div> <div>
<div> <input
<input placeholder='Keresés...'
placeholder='Keresés...' className='searchBar'
className='searchBar' type='text'
type='text' value={searchTerm}
value={searchTerm} onChange={(e) => { setSearchTerm(e.target.value) }}
onChange={this.searchBarOnChange.bind(this)}
/>
</div>
<SubjectSelector
data={this.data}
activeSubjName={activeSubjName}
searchTerm={searchTerm}
onSubjSelect={this.onSubjSelect.bind(this)}
/> />
<hr />
<div>
<Subject
subj={currSubj}
/>
</div>
</div> </div>
</Layout> <SubjectSelector
) data={data}
} else { activeSubjName={activeSubjName}
return ( searchTerm={searchTerm}
<Layout currPageName='allQuestions' > onSubjSelect={(subjName) => { setActiveSubjName(subjName) }}
<LoadingIndicator /> />
</Layout> <hr />
) <div>
} <Subject
subj={currSubj}
/>
</div>
</div>
</Layout>
)
} else {
return (
<Layout currPageName='allQuestions' >
<LoadingIndicator />
</Layout>
)
} }
} }
export default AllQuestions

View file

@ -63,57 +63,61 @@ másnak a legfrissebb adatok állnak rendelkezésre.</b>
</center> </center>
<hr /> <hr />
<table style={{ tableLayout: 'fixed', verticalAlign: 'top', width: '100%' }}> <table style={{ tableLayout: 'fixed', verticalAlign: 'top', width: '100%' }}>
<td> <tbody>
<p /> Először is tölts le egy userscript futtató kiegészítőt a böngésződhöz. Én <a <tr>
href='https://www.tampermonkey.net/'>Tampermonkeyt</a> használok, és ezzel van tesztelve a <td>
<p /> Először is tölts le egy userscript futtató kiegészítőt a böngésződhöz. Én <a
href='https://www.tampermonkey.net/'>Tampermonkeyt</a> használok, és ezzel van tesztelve a
userscript is, ezért ez ajánlott. Más is működhet (violentmonkey, etc), de az nem garantált. userscript is, ezért ez ajánlott. Más is működhet (violentmonkey, etc), de az nem garantált.
Majd a <a href='http://qmining.frylabs.net/install'>weboldalról</a> egy kattintással elvileg Majd a <a href='http://qmining.frylabs.net/install'>weboldalról</a> egy kattintással elvileg
le tudod tölteni a scriptet, és elvileg kész is. Script majd udvariasan megkéri, hogy le tudod tölteni a scriptet, és elvileg kész is. Script majd udvariasan megkéri, hogy
hagy beszélgessen a szerverrel, mert mással nem tud. hagy beszélgessen a szerverrel, mert mással nem tud.
<p /> <p />
<p /> Teszt közben még több dolog történhet: <p /> Teszt közben még több dolog történhet:
<p /> <p />
<ul> <ul>
<li><b>Nem kérdésre ad választ a script:</b> Ilyenkor az van, hogy nincs meg a <li><b>Nem kérdésre ad választ a script:</b> Ilyenkor az van, hogy nincs meg a
kérdés, vagy több hasonló kérdés/válasz van. Ilyenkor a jobbra/balra gombbal kérdés, vagy több hasonló kérdés/válasz van. Ilyenkor a jobbra/balra gombbal
váltogathatsz azok a kérdés/válasz combók közül, amit talált a script</li> váltogathatsz azok a kérdés/válasz combók közül, amit talált a script</li>
<li><b>Több teszt kérdés van egy oldalon:</b> Fel le gombbal váltogathatsz a kérdések között. <li><b>Több teszt kérdés van egy oldalon:</b> Fel le gombbal váltogathatsz a kérdések között.
Ilyenkor is működik az előbb említett funkció. Az indexek, amit kiír a bal felső sarokban: Ilyenkor is működik az előbb említett funkció. Az indexek, amit kiír a bal felső sarokban:
aktuális kérdés száma / aktuális találat száma.</li> aktuális kérdés száma / aktuális találat száma.</li>
<li><b>Nem jelenik meg semmi, vagy nem működik a script:</b> Megesik az ilyesmi. Ha <li><b>Nem jelenik meg semmi, vagy nem működik a script:</b> Megesik az ilyesmi. Ha
a webszerver még elérhető akkor ott meg bírod nézni a kérdéseket, és ott lehet a webszerver még elérhető akkor ott meg bírod nézni a kérdéseket, és ott lehet
keresgélni Ctrl + F -el Ha az sincs, akkor lehet hogy jól jön ha van egy keresgélni Ctrl + F -el Ha az sincs, akkor lehet hogy jól jön ha van egy
lementett kérdés gyűjteményed.</li> lementett kérdés gyűjteményed.</li>
</ul> </ul>
<p /> Egyéb funkciók: <p /> Egyéb funkciók:
<ul> <ul>
<li> <li>
Ha esetleg videókat nézel, akkor spaceval lehet play/pausolni, és jobbra/balra Ha esetleg videókat nézel, akkor spaceval lehet play/pausolni, és jobbra/balra
gombbal ugrani a videóban. gombbal ugrani a videóban.
</li> </li>
<li> <li>
Ha bármikor nem kell a script, akkor a menü gomb alatt bekapcsolhatod a passzív Ha bármikor nem kell a script, akkor a menü gomb alatt bekapcsolhatod a passzív
módot, ami nem piszkálja a szervert. Vagy kikapcsolhatod magát a scriptet módot, ami nem piszkálja a szervert. Vagy kikapcsolhatod magát a scriptet
tampermonkey-ban. Ha bármiért is el akarod tüntetni a következő oldalig az éppen tampermonkey-ban. Ha bármiért is el akarod tüntetni a következő oldalig az éppen
megjelenő script ablakot, akkor középső egér gombbal kattintva rajta ezt megjelenő script ablakot, akkor középső egér gombbal kattintva rajta ezt
megteheted. megteheted.
</li> </li>
</ul> </ul>
<p /> <b>Ha 2.0 előttről jöttél, és rettenetesen össze vagy zavarodva:</b> <p /> <b>Ha 2.0 előttről jöttél, és rettenetesen össze vagy zavarodva:</b>
<p /> <p />
2.0 előtt a script az egész adatbázist leszedte, beolvasta, és onnan keresett. Ez a 2.0 előtt a script az egész adatbázist leszedte, beolvasta, és onnan keresett. Ez a
keresés most szerver oldalon van megvalósítva, és a script csak a kérdést, hozzá tartózó keresés most szerver oldalon van megvalósítva, és a script csak a kérdést, hozzá tartózó
egyéb infót (pl kép nevek) és a tárgy nevét küldi el szervernek. Ezután az visszaküldi a egyéb infót (pl kép nevek) és a tárgy nevét küldi el szervernek. Ezután az visszaküldi a
helyes válaszokat. helyes válaszokat.
</td> </td>
<td width='20%'> <td width='20%'>
<img style={{ maxWidth: '100%', maxHeight: '100%' }} src='img/rtfm.jpg' alt='img' /> <img style={{ maxWidth: '100%', maxHeight: '100%' }} src='img/rtfm.jpg' alt='img' />
</td> </td>
</tr>
</tbody>
</table> </table>
<center> <center>
<h3>Eddigi teszt kérdések:</h3> <h3>Eddigi teszt kérdések:</h3>

View file

@ -1,65 +1,58 @@
import React, { PureComponent } from 'react' import React, { useState, useEffect } from 'react'
import LoadingIndicator from '../LoadingIndicator' import LoadingIndicator from '../components/LoadingIndicator'
import Layout from '../components/layout'
import constants from '../../constants.json' import constants from '../constants.json'
class UserQuestions extends PureComponent { export default function UserQuestions (props) {
constructor (props) { const [loaded, setLoaded] = useState(false)
super(props) const [qa, setQa] = useState(null)
this.state = {
loaded: false
}
useEffect(() => {
console.info('Fetching qa.json') console.info('Fetching qa.json')
fetch(`${constants.serverUrl}qa.json`) // eslint-disable-line fetch(`${constants.serverUrl}qa.json`) // eslint-disable-line
.then((resp) => { .then((resp) => {
return resp.json() return resp.json()
}) })
.then((data) => { .then((data) => {
this.qa = data setQa(data)
setLoaded(true)
this.setState({
loaded: true
})
}) })
} }, [loaded])
render () { if (loaded) {
const { loaded } = this.state let questions = Object.keys(qa).map((key, i) => {
let q = qa[key]
if (loaded) { return (
let questions = Object.keys(this.qa).map((key, i) => { <div key={key} className='uquestioncontainer'>
let q = this.qa[key] <div >
return ( <div className='uquestionnumber'>
<div key={key} className='uquestioncontainer'> {key}:
<div >
<div className='uquestionnumber'>
{key}:
</div>
<div className='uquestion'>
{q.q}
</div>
</div> </div>
<div className='uanswer'> <div className='uquestion'>
{q.a} {q.q}
</div> </div>
</div> </div>
) <div className='uanswer'>
}).reverse() {q.a}
</div>
</div>
)
}).reverse()
return ( return (
<Layout currPageName='UserQuestions' >
<div className='uquestionscontainer'> <div className='uquestionscontainer'>
{questions} {questions}
</div> </div>
) </Layout>
} else { )
return ( } else {
return (
<Layout currPageName='UserQuestions' >
<LoadingIndicator /> <LoadingIndicator />
) </Layout>
} )
} }
} }
export default UserQuestions