diff --git a/src/components/todoStuff/todoCard.module.css b/src/components/todoStuff/todoCard.module.css
index baaf9c7..86cb918 100644
--- a/src/components/todoStuff/todoCard.module.css
+++ b/src/components/todoStuff/todoCard.module.css
@@ -3,17 +3,14 @@
border-radius: 2px;
padding: 5px;
margin: 6px 3px;
+ cursor: pointer;
}
.voted {
border: 2px solid #cf9;
}
-.clickable {
- cursor: pointer;
-}
-
-.clickable:hover {
+.card:hover {
background-color: #333;
border: 2px solid #f99;
}
diff --git a/src/components/todoStuff/todoRow.js b/src/components/todoStuff/todoRow.js
index 6714428..cba5bee 100644
--- a/src/components/todoStuff/todoRow.js
+++ b/src/components/todoStuff/todoRow.js
@@ -3,14 +3,16 @@ import React from 'react'
import styles from './todoRow.module.css'
export default function TodoRow(props) {
- const { categories, userId } = props
- const { name, description, category, votes, id } = props.rowData
+ const { categories, userId, onClick } = props
+ const { name, category, votes, id } = props.rowData
const voted = votes.includes(userId)
return (
{
+ onClick(props.rowData)
+ }}
className={`${styles.row} ${voted && styles.voted}`}
- title={description}
>
{`#${id}`}
{name}
diff --git a/src/components/todoStuff/todoRow.module.css b/src/components/todoStuff/todoRow.module.css
index 18af760..90085de 100644
--- a/src/components/todoStuff/todoRow.module.css
+++ b/src/components/todoStuff/todoRow.module.css
@@ -4,6 +4,12 @@
border-radius: 2px;
padding: 5px;
margin: 6px 3px;
+ cursor: pointer;
+}
+
+.row:hover {
+ background-color: #333;
+ border: 2px solid #f99;
}
.row > div {
diff --git a/src/components/todoStuff/todoSidebar.js b/src/components/todoStuff/todoSidebar.js
new file mode 100644
index 0000000..c57c6f2
--- /dev/null
+++ b/src/components/todoStuff/todoSidebar.js
@@ -0,0 +1,63 @@
+import React from 'react'
+
+import styles from './todoSidebar.module.css'
+
+export default function Todos({ card, userId, categories, columns, voteOn }) {
+ const { name, description, category, points, votes, id } = card
+ const voteable = columns[card.state].clickable
+
+ // TODO: hide vote button if not voteable
+ return (
+
+
+ #{id}
+ {name}
+
+ {categories[category].name}
+
+
+
+
+
+
Szavazatok:
+
{votes.length}
+
+
+ {description && (
+ <>
+
Leírás
+
+
+ >
+ )}
+
+ {voteable && (
+
{
+ voteOn(card)
+ }}
+ >
+ {votes.includes(userId) ? 'Szavazat visszavonása' : 'Szavazás'}
+
+ )}
+
+ )
+}
diff --git a/src/components/todoStuff/todoSidebar.module.css b/src/components/todoStuff/todoSidebar.module.css
new file mode 100644
index 0000000..8159b96
--- /dev/null
+++ b/src/components/todoStuff/todoSidebar.module.css
@@ -0,0 +1,54 @@
+.container {
+ display: flex;
+ flex-flow: column;
+ margin: 5px;
+}
+
+.container > hr {
+ width: 100%;
+}
+
+.title {
+ color: #99f;
+ font-size: 18px;
+}
+
+.name {
+ color: #99f;
+ font-size: 20px;
+ margin: 20px 0px;
+}
+
+.category {
+ word-break: break-all;
+ font-size: 10px;
+}
+
+.id {
+ font-size: 16px;
+ margin: 0px 3px;
+ color: #999;
+}
+
+.row {
+ display: flex;
+ justify-content: space-between;
+}
+
+.button {
+ border: 2px solid #99f;
+ border-radius: 3px;
+ text-align: center;
+ cursor: pointer;
+}
+
+.button:hover {
+ background-color: #333;
+}
+
+.votedtext {
+ color: #cf9;
+}
+.voted {
+ border: 2px solid #cf9;
+}
diff --git a/src/components/todoStuff/todoTable.js b/src/components/todoStuff/todoTable.js
index be909fa..01e7ae9 100644
--- a/src/components/todoStuff/todoTable.js
+++ b/src/components/todoStuff/todoTable.js
@@ -5,7 +5,7 @@ import TodoRow from './todoRow.js'
import styles from './todoTable.module.css'
export default function TodoBoard(props) {
- const { tables, cards, userId, categories } = props
+ const { tables, cards, userId, categories, onClick } = props
return (
@@ -23,6 +23,7 @@ export default function TodoBoard(props) {
{tableCards.map((card, i) => {
return (
{
@@ -13,11 +17,10 @@ const byVotes = (a, b) => {
export default function Todos() {
const [loaded, setLoaded] = useState(false)
const [columns, setColumns] = useState(null)
- const [boardCards, setBoardCards] = useState(null)
- const [tables, setTables] = useState(null)
- const [tableCards, setTableCards] = useState(null)
+ const [cards, setCards] = useState(null)
const [categories, setCategories] = useState(null)
const [userId, setUserId] = useState(null)
+ const [sidebarCard, setSidebarCard] = useState(null)
useEffect(() => {
console.info('Fetching todos')
@@ -36,72 +39,98 @@ export default function Todos() {
setCategories(data.todos.categories)
setUserId(data.userId)
- let bCards = []
- let tCards = []
- data.todos.cards.forEach((card) => {
- if (data.todos.columns[card.state].type === 'table') {
- tCards.push(card)
- } else {
- bCards.push(card)
- }
- })
-
- setTableCards(tCards.sort(byVotes))
- setBoardCards(bCards.sort(byVotes))
-
- let cols = {}
- let tables = {}
- Object.keys(data.todos.columns).forEach((key) => {
- const col = data.todos.columns[key]
- if (col.type !== 'table') {
- cols = {
- ...cols,
- [key]: col,
- }
- } else {
- tables = {
- ...tables,
- [key]: col,
- }
- }
- })
- setColumns(cols)
- setTables(tables)
-
+ setCards(data.todos.cards)
+ setColumns(data.todos.columns)
setLoaded(true)
}
- const onCardClick = (id) => {
- fetch(`${constants.apiUrl}voteTodo?id=${id}`, {
- credentials: 'include',
- })
- .then((resp) => {
- return resp.json()
- })
- .then((data) => {
- setTodos(data)
- })
+ const onClick = (card) => {
+ setSidebarCard(card.id)
}
if (!loaded) {
return
}
+ let bCards = []
+ let tCards = []
+ cards.forEach((card) => {
+ if (columns[card.state].type === 'table') {
+ tCards.push(card)
+ } else {
+ bCards.push(card)
+ }
+ })
+ bCards = bCards.sort(byVotes)
+ tCards = tCards.sort(byVotes)
+
+ let cols = {}
+ let tables = {}
+ Object.keys(columns).forEach((key) => {
+ const col = columns[key]
+ if (col.type !== 'table') {
+ cols = {
+ ...cols,
+ [key]: col,
+ }
+ } else {
+ tables = {
+ ...tables,
+ [key]: col,
+ }
+ }
+ })
+
return (
-
-
+ {sidebarCard && (
+
{
+ setSidebarCard(null)
+ }}
+ >
+ {
+ return card.id === sidebarCard
+ })}
+ userId={userId}
+ categories={categories}
+ columns={columns}
+ voteOn={(card) => {
+ fetch(`${constants.apiUrl}todos?id=${card.id}`, {
+ credentials: 'include',
+ })
+ .then((resp) => {
+ return resp.json()
+ })
+ .then((data) => {
+ setTodos(data)
+ })
+ }}
+ />
+
+ )}
+
+
+
+
)
}
diff --git a/src/components/todoStuff/todos.module.css b/src/components/todoStuff/todos.module.css
new file mode 100644
index 0000000..e69de29
diff --git a/src/defaultStyles.css b/src/defaultStyles.css
index 750b6f8..a187c12 100644
--- a/src/defaultStyles.css
+++ b/src/defaultStyles.css
@@ -25,6 +25,9 @@ a {
}
.sidebar {
+ display: flex;
+ flex-direction: column;
+
margin: 0;
padding: 0;
width: 200px;
@@ -52,6 +55,11 @@ a {
color: white;
}
+.userInfo {
+ margin-bottom: 15px;
+ margin-top: auto;
+}
+
.content {
margin-left: 200px;
padding: 1px 16px;
@@ -130,6 +138,17 @@ a {
width: 100%;
margin: 0 auto;
}
+
+ .rtfmImage {
+ display: flex;
+ justify-content: center;
+ width: 100%;
+ }
+
+ .manualUsage {
+ display: flex;
+ flex-direction: column;
+ }
}
.questionContainer {
@@ -198,3 +217,12 @@ a {
.donate {
background-color: #222a26;
}
+
+.rtfmImage {
+ justify-content: center;
+ margin: 0px 10px;
+}
+
+.manualUsage {
+ display: flex;
+}
diff --git a/src/pages/contribute.js b/src/pages/contribute.js
index cef3044..e560ee4 100644
--- a/src/pages/contribute.js
+++ b/src/pages/contribute.js
@@ -66,10 +66,11 @@ export default function contribute() {
Qmining - Todos | Frylabs.net
- Egy kártyára kattintva szavazhatsz. Minél több szavazat érkezik egy
- kártyára, annál magasabb lesz a pioritása. Jobb alsó szám minél több,
- annál nehezebb a feladat. Tartsd egeret kártyán részletesebb leírásért
- (ha van hozzá)
+ Egy kártyára kattintva nézheted meg a részleteket, vagy szavazhatsz.
+ Minél több szavazat érkezik egy kártyára, annál magasabb lesz a
+ pioritása. Jobb alsó szám minél több, annál nehezebb a feladat. A Done
+ oszlopban lévő feladatok kész vannak, de különböző okok miat még nem
+ lettek kiadva frissítésként. Ami az In Prod táblázatban van az van kint.
diff --git a/src/pages/manual.js b/src/pages/manual.js
index 52c4a74..e0b7201 100644
--- a/src/pages/manual.js
+++ b/src/pages/manual.js
@@ -3,7 +3,7 @@ import React from 'react'
import Sleep from '../components/sleep'
import Head from 'next/head'
-export default function Manual(props) {
+export default function Manual() {
return
{renderMaual()}
}
@@ -16,6 +16,8 @@ function renderMaual() {
Manual
+
+
Ez a userscript Moodle/Elearnig/KMOOC tesztek megoldása során segítséget
@@ -27,92 +29,103 @@ function renderMaual() {
Valószínűleg semmi baj nem lesz, de én szóltam. Ha ez iránt aggódsz,
olvasd el a kockázatok részt
+
+
Userscript használata
-
-
-
-
+
+
+
+
+ -
+ Tölts le egy userscript futtató kiegészítőt a böngésződhöz:{' '}
+
+ Tampermonkey
+
+
+ -
+
+ Weboldalról
+ {' '}
+ rakd fel a scriptet
+
+ -
+ Script majd udvariasan megkéri, hogy hagy beszélgessen a
+ szerverrel, mert mással nem tud, ezt engedélyezd.
+
+ -
+ Ezután:
-
- Tölts le egy userscript futtató kiegészítőt a böngésződhöz:{' '}
-
- Tampermonkey
-
+ Teszt oldalon a kérdésre a választ kell látnod felül egy
+ felugró ablakszerűben
-
-
- Weboldalról
- {' '}
- rakd fel a scriptet
-
- -
- Script majd udvariasan megkéri, hogy hagy beszélgessen a
- szerverrel, mert mással nem tud, ezt engedélyezd.
-
- -
- Ezután:
-
- -
- Teszt oldalon a kérdésre a választ kell látnod felül egy
- felugró ablakszerűben
-
- -
- Teszt ellenőrzés oldalon a script beküldi a szervernek a
- helyes válaszokat, az lementi az új kérdéseket, amik
- ezután azonnal elérhetők lesznek
-
-
+ Teszt ellenőrzés oldalon a script beküldi a szervernek a
+ helyes válaszokat, az lementi az új kérdéseket, amik ezután
+ azonnal elérhetők lesznek
- Egyéb fontos tudnivalók:
-
- Egyéb funkciók:
-
- -
- Ha esetleg videókat nézel, akkor spaceval lehet play/pausolni,
- és jobbra/balra gombbal ugrani a videóban.
-
-
- |
-
-
- |
-
-
-
+
+
+ Egyéb fontos tudnivalók:
+
+
Egyéb funkciók:
+
+ -
+ Ha esetleg videókat nézel, akkor spaceval lehet play/pausolni, és
+ jobbra/balra gombbal ugrani a videóban.
+
+
+
+
+

+
+
+
+
Jelszavak
+
Ha ezt olvasod valszeg már van neked egy. Azért lett bevezetve, hogy
nagyjából zárt legyen a felhasználók köre
@@ -121,19 +134,27 @@ function renderMaual() {
Elvileg elég csak 1 szer beírnod, és nem kell többet, de{' '}
mentsd le biztos helyre a jelszót, hogy később is meglegyen! Ha
többször kell akkor az bug,{' '}
-
+
és szólj
-
- Jelenleg nincs 'elfelejtett jelszó' funkció, ha elfelejted akkor az
+ Jelenleg nincs elfelejtett jelszó funkció, ha elfelejted akkor az
örökre eltűnik!
-
Ha van jelszavad akkor bizonyos határok között{' '}
-
+
te is tudsz generálni másoknak
(ncore style).
@@ -148,10 +169,13 @@ function renderMaual() {
megmaradjon
+
+
Gyakran előforduló kérdések
+
-
@@ -172,42 +196,20 @@ function renderMaual() {
amíg újra nem töltöd az oldalt, vagy másikra ugrasz.
- -
- Mi ez a ... ?
-
-
-
-
Gombok, %-ok, számok
- -
- Weboldal lementése
-
- Hogy a hibákat a saját gépemen reprodukálni tudjam, és könnyen ki
- bírjam javítani sokszor jól jön ha egy lementett weboldalt megkapok.
- Így lehet letölteni egy oldalt:
-
-
-
- Ide tudod feltölteni
-
-
- Mivel nincs hozzáférésem semmilyen egyetemi oldalhoz, így csak így
- tudom hatékonyan tesztelni a scriptet. Ezért hatalmas segítség ha
- feltöltöd azt az oldalt amin hibával találkozol.
-
+
Kockázatok
+
+
-
Bármikor észrevehetik hogy használod a scriptet
@@ -219,7 +221,7 @@ function renderMaual() {
Ha arra nem veszik a fáradságot, hogy a kérdéseket lecseréljék akkor
valószínűleg arra se hogy userscript futását detektáló kódot rakjanak
a weboldalra. A{' '}
-
+
Moodle
{' '}
egy nyílt forráskódú, valószínűleg self-hosted rendszer. Valószínűleg
@@ -240,7 +242,11 @@ function renderMaual() {
Bármikor leállhat a szerver
És akkor nem bírod megnézni a válaszokat. Erre van az{' '}
-
+
{' '}
összes kérdés TXT
@@ -252,6 +258,63 @@ function renderMaual() {
+
+
+ Egyéb
+
+
+
+
Weboldal lementése
+ Hogy a hibákat a saját gépemen reprodukálni tudjam, és könnyen ki bírjam
+ javítani sokszor jól jön ha egy lementett weboldalt megkapok. Így lehet
+ letölteni egy oldalt:
+

+
+
+ Ide tudod feltölteni
+
+
+ Mivel nincs hozzáférésem semmilyen egyetemi oldalhoz, így csak így tudom
+ hatékonyan tesztelni a scriptet. Ezért hatalmas segítség ha feltöltöd azt
+ az oldalt amin hibával találkozol.
+
+
Script újratelepítése
+ Jelenleg két helyről lehet telepíteni a scriptet: greasyforkról és a
+ weboldalamról. A greasyforkos telepítési lehetőség meg fog szűnni, így ha
+ onnan telepítetted, akkor nem lesznek frissítések elérhetők (amik nagyon
+ fontosak (de tényleg)). Ezért a következő rövid manővert kellene
+ végrehajtani, hogy minden zökkenőmentesen menjen:
+
+ - Böngésző bővítményeidnél kattints a tampermonkey-ra
+ - Válaszd ki alulról második opciót, ami dashboard néven fut
+ -
+ Ekkor új tabban felugranak telepített scriptjeid. Keresd meg a
+ Moodle/Elearning/KMOOC test help-et, és a sor végén kattints a kuka
+ gombra
+
+ - Ha megkérdezi mondd neki, hogy biztos törölni akarod
+ -
+ Ezután simán kattints{' '}
+
+ ide a script újratelepítéséhez a weboldalamról
+
+
+ -
+ Kész! Lehet megkérdezi újra, hogy elérheti-e a szervert, de azt csak
+ egyszer. Szokásos módon engedélyezd, hogy le bírja kérni a helyes
+ válaszokat
+
+
+ Ezzel semmi adat nem vész el, régi jelszó ugyanolyan jó marad (csak ne
+ felejtsd azt el)