Compare commits
12 Commits
3110d315e6
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
479044d4ea
|
|||
|
fd58f130a0
|
|||
|
4dcf065501
|
|||
|
75413b2c5e
|
|||
|
453f62cfae
|
|||
|
fde246ecb7
|
|||
|
46cc0237ce
|
|||
|
3506af77bf
|
|||
|
647e02d28e
|
|||
|
5bd5237bfa
|
|||
|
f829fb08d1
|
|||
|
d77439bafd
|
3
.gitignore
vendored
3
.gitignore
vendored
@@ -126,7 +126,6 @@ dist
|
|||||||
|
|
||||||
# vuepress v2.x temp and cache directory
|
# vuepress v2.x temp and cache directory
|
||||||
.temp
|
.temp
|
||||||
.cache
|
|
||||||
|
|
||||||
# Docusaurus cache and generated files
|
# Docusaurus cache and generated files
|
||||||
.docusaurus
|
.docusaurus
|
||||||
@@ -155,5 +154,7 @@ dist
|
|||||||
|
|
||||||
# custom
|
# custom
|
||||||
|
|
||||||
|
database/data.db
|
||||||
|
|
||||||
#
|
#
|
||||||
.idea
|
.idea
|
||||||
13
README.md
13
README.md
@@ -1,11 +1,8 @@
|
|||||||
# GiacPoints
|
# GiacPoints
|
||||||
|
|
||||||
A system for keeping track of house chores completed and attributing points to the activities.
|
A system for keeping track of house chores completed and attributing points to the activities.
|
||||||
|
# Installation
|
||||||
# Functionality
|
`Note: Linux only`
|
||||||
|
1. Clone this repo
|
||||||
Webpage - Login, add chores/activities (admin), tick of chores (user), log of completed chores (all)
|
2. rename `database/example.db` to `database/data.db`
|
||||||
|
3. Execute `main`
|
||||||
API layer - /loginUser, /getTasks, /completeTask, /getHistory?filter, /addTask
|
|
||||||
|
|
||||||
Backend - DB, user (name password userid role), activities (taskid name points), history (userid taskid time pointsGained)
|
|
||||||
@@ -61,3 +61,7 @@ pre {
|
|||||||
background: white;
|
background: white;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#taskCard {
|
||||||
|
margin-top: 45%;
|
||||||
|
}
|
||||||
@@ -8,7 +8,6 @@
|
|||||||
<link rel="stylesheet" href="/frontend/index.css">
|
<link rel="stylesheet" href="/frontend/index.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<script src="/frontend/index.js"></script>
|
|
||||||
<div id="login">
|
<div id="login">
|
||||||
<div class="flex three demo" style="height: 100%; width: 100%">
|
<div class="flex three demo" style="height: 100%; width: 100%">
|
||||||
<div class="fourth two-fifth-1000"></div>
|
<div class="fourth two-fifth-1000"></div>
|
||||||
@@ -40,7 +39,18 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="historyContent"></div>
|
<div id="historyContent"></div>
|
||||||
</div>
|
</div>
|
||||||
<div id="addTask" class="screen" style="display: none;">Add Task</div>
|
<div id="addTask" class="screen" style="display: none;">
|
||||||
|
<article class="card" id="taskCard">
|
||||||
|
<header>
|
||||||
|
<h1>New task</h1> <br>
|
||||||
|
<label for="newTaskName">Task name</label>
|
||||||
|
<input type="text" id="newTaskName"> <br>
|
||||||
|
<label for="newTaskPoints">Task points</label>
|
||||||
|
<input type="number" id="newTaskPoints" min="1" max="5"> <br>
|
||||||
|
<input onclick="newTask()" value="Create" type="submit"> <br>
|
||||||
|
</header>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="menu" class="flex three demo">
|
<div id="menu" class="flex three demo">
|
||||||
<div class="third" id="taskButton">
|
<div class="third" id="taskButton">
|
||||||
@@ -50,10 +60,11 @@
|
|||||||
<span class="button" onclick="switchScreen('history')">History</span>
|
<span class="button" onclick="switchScreen('history')">History</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="third" id="addButton">
|
<div class="third" id="addButton">
|
||||||
<!-- <span class="button tooltip-top" onclick="switchScreen('add')" disabled data-tooltip="In construction">+ Task</span>-->
|
<span class="button tooltip-top" onclick="switchScreen('add')" >+ Task</span>
|
||||||
<span class="button tooltip-top" disabled data-tooltip="In construction">+ Task</span>
|
<!-- <span class="button tooltip-top" disabled data-tooltip="In construction">+ Task</span>-->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<script src="/frontend/index.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -1,3 +1,7 @@
|
|||||||
|
function sleep(ms) {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||||||
|
}
|
||||||
|
|
||||||
async function login() {
|
async function login() {
|
||||||
// tell the user the app is loading
|
// tell the user the app is loading
|
||||||
document.getElementById("loginSubmit").value = "Loading";
|
document.getElementById("loginSubmit").value = "Loading";
|
||||||
@@ -30,12 +34,12 @@ async function login() {
|
|||||||
|
|
||||||
// store user data in session storage
|
// store user data in session storage
|
||||||
let data = await response.json();
|
let data = await response.json();
|
||||||
sessionStorage.setItem("uid", data.uid);
|
localStorage.setItem("uid", data.uid);
|
||||||
sessionStorage.setItem("name", data.name);
|
localStorage.setItem("name", data.name);
|
||||||
sessionStorage.setItem("role", data.role);
|
localStorage.setItem("role", data.role);
|
||||||
|
|
||||||
// if role is admin, keep auto styling
|
// if role is admin, keep auto styling
|
||||||
if (sessionStorage.getItem("role") !== "admin") {
|
if (localStorage.getItem("role") !== "admin") {
|
||||||
document.getElementById("addButton").setAttribute("style", "display: none;");
|
document.getElementById("addButton").setAttribute("style", "display: none;");
|
||||||
document.getElementById("taskButton").classList.value = "half";
|
document.getElementById("taskButton").classList.value = "half";
|
||||||
document.getElementById("historyButton").classList.value = "half";
|
document.getElementById("historyButton").classList.value = "half";
|
||||||
@@ -69,7 +73,8 @@ async function populateScreen() {
|
|||||||
|
|
||||||
// if it is a user make the tasks add points
|
// if it is a user make the tasks add points
|
||||||
// or if admin make it do nothing
|
// or if admin make it do nothing
|
||||||
if (sessionStorage.getItem("role") === "user") {
|
if (localStorage.getItem("role") === "user") {
|
||||||
|
try {
|
||||||
for (let i = 0; i < tasks.length; i++) {
|
for (let i = 0; i < tasks.length; i++) {
|
||||||
taskPage.innerHTML += `
|
taskPage.innerHTML += `
|
||||||
<div id="${tasks[i].tid}" class="half" style="height: fit-content">
|
<div id="${tasks[i].tid}" class="half" style="height: fit-content">
|
||||||
@@ -79,7 +84,11 @@ async function populateScreen() {
|
|||||||
</div>
|
</div>
|
||||||
</div>`
|
</div>`
|
||||||
}
|
}
|
||||||
} else if (sessionStorage.getItem("role") === "admin") {
|
} catch (e) {
|
||||||
|
taskPage.innerHTML +=`<sub>such empty</sub>`
|
||||||
|
}
|
||||||
|
} else if (localStorage.getItem("role") === "admin") {
|
||||||
|
try {
|
||||||
for (let i = 0; i < tasks.length; i++) {
|
for (let i = 0; i < tasks.length; i++) {
|
||||||
taskPage.innerHTML += `
|
taskPage.innerHTML += `
|
||||||
<div id="${tasks[i].tid}" class="half" style="height: fit-content">
|
<div id="${tasks[i].tid}" class="half" style="height: fit-content">
|
||||||
@@ -89,8 +98,12 @@ async function populateScreen() {
|
|||||||
</div>
|
</div>
|
||||||
</div>`
|
</div>`
|
||||||
}
|
}
|
||||||
|
} catch (e) {
|
||||||
|
taskPage.innerHTML +=`<sub>such empty</sub>`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
for (let i = (history.length -1); i >= 0; i-=1) {
|
for (let i = (history.length -1); i >= 0; i-=1) {
|
||||||
historyPage.innerHTML += `
|
historyPage.innerHTML += `
|
||||||
<div class="full">
|
<div class="full">
|
||||||
@@ -104,6 +117,11 @@ async function populateScreen() {
|
|||||||
</article>
|
</article>
|
||||||
</div>`
|
</div>`
|
||||||
}
|
}
|
||||||
|
} catch (e) {
|
||||||
|
historyPage.innerHTML += `
|
||||||
|
<sub>Such empty</sub>`
|
||||||
|
}
|
||||||
|
|
||||||
for (let i = 0; i < stats.length; i++) {
|
for (let i = 0; i < stats.length; i++) {
|
||||||
// put user points in box
|
// put user points in box
|
||||||
statsPage.innerText += `${stats[i].name}: ${stats[i].points} \n`
|
statsPage.innerText += `${stats[i].name}: ${stats[i].points} \n`
|
||||||
@@ -113,7 +131,7 @@ async function populateScreen() {
|
|||||||
async function completeTask(taskID) {
|
async function completeTask(taskID) {
|
||||||
let points = document.getElementById(`${taskID}-p`).innerText.split(" ")[0];
|
let points = document.getElementById(`${taskID}-p`).innerText.split(" ")[0];
|
||||||
let time = new Date().toISOString().split(".")[0];
|
let time = new Date().toISOString().split(".")[0];
|
||||||
let uid = sessionStorage.getItem("uid");
|
let uid = localStorage.getItem("uid");
|
||||||
await fetch("/completeTask", {
|
await fetch("/completeTask", {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
headers: {
|
||||||
@@ -142,3 +160,41 @@ async function switchScreen(button) {
|
|||||||
document.getElementById("addTask").setAttribute("style", "");
|
document.getElementById("addTask").setAttribute("style", "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function newTask() {
|
||||||
|
let points = document.getElementById(`newTaskPoints`);
|
||||||
|
let name = document.getElementById(`newTaskName`);
|
||||||
|
await fetch("/addTask", {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
tid: 0,
|
||||||
|
name: name.value,
|
||||||
|
points: Number(points.value),
|
||||||
|
})
|
||||||
|
});
|
||||||
|
points.value = "";
|
||||||
|
name.value = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
async function fastLog() {
|
||||||
|
sleep(500);
|
||||||
|
if (localStorage.getItem("uid") != null && localStorage.getItem("name") != null && localStorage.getItem("role") != null) {
|
||||||
|
document.getElementById("login").setAttribute("style", "display: none;");
|
||||||
|
document.getElementById("mainPage").setAttribute("style", "");
|
||||||
|
if (localStorage.getItem("role") !== "admin") {
|
||||||
|
document.getElementById("addButton").setAttribute("style", "display: none;");
|
||||||
|
document.getElementById("taskButton").classList.value = "half";
|
||||||
|
document.getElementById("historyButton").classList.value = "half";
|
||||||
|
document.getElementById("menu").classList.value = "flex two";
|
||||||
|
}
|
||||||
|
|
||||||
|
await populateScreen();
|
||||||
|
} else {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fastLog();
|
||||||
Reference in New Issue
Block a user