Крупное обновление. Из нового:

чутка переделанный дизайн, вымерший /users, доделанная статистика мира майнкрафт, и еще пара обновок
This commit is contained in:
neroduckale 2024-03-17 02:14:48 +05:00
parent de1b0ecec5
commit 44a897a4c0
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.
GPG key ID: 399E73062E1A3667
16 changed files with 1844 additions and 169 deletions

View file

@ -42,8 +42,27 @@ a {
.header {
background-color: #4d4d4d;
a {
color: white;
}
}
border-color: #00ff9d;
border-width: 3px;
border-style: solid;
margin: 10px 10px 0 10px;
background-color: #000000;
}
.card {
width: 30rem;
padding: 10px;
border: 3px gray solid;
margin: 10px;
}
.grid-cards {
display: flex;
height: 100%;
justify-content: center;
flex-wrap: wrap;
}

View file

@ -4,16 +4,7 @@ function admin() {
return;
}
document.body.style.background = "black";
document.getElementById("admin").remove();
let adminbuttons = document.getElementsByClassName("ADMINBUT");
for (let item of adminbuttons) {
item.style.display = "";
}
let createuser = document.createElement("button");
createuser.append("НОВЫЙ ПОЛЬЗОВАТЕЛЬ");
createuser.className = "admin";
createuser.addEventListener("click", createclick);
document.getElementById("divine").append(createuser);
}
async function deleteUser(id) {
const response = await fetch(`/api/users/${id}`, {
@ -29,12 +20,6 @@ async function deleteUser(id) {
console.log(error.message);
}
}
function createclick() {
let form = document.getElementById("newuser");
form.style.visibility = "visible";
}
async function createUser(nickname, mast) {
const response = await fetch("api/users", {
@ -47,18 +32,10 @@ async function createUser(nickname, mast) {
});
if (response.ok === true) {
const user = await response.json();
document.getElementById("users").append(createrow(user, false));
//добавлять юзера
}
else {
const error = await response.json();
console.log(error.message);
}
}
function neworupdate() {
let nickname = document.getElementById("nickname");
let mast = document.getElementById("mast");
createUser(nickname.value, mast.value);
nickname.value = "";
mast.value = "";
}

View file

@ -0,0 +1,161 @@
import {palette} from "./palette.js";
const keysToSort = [
"minecraft:killed_by",
"minecraft:broken",
"minecraft:used",
"minecraft:killed",
"minecraft:dropped",
"minecraft:crafted",
"minecraft:picked_up",
"minecraft:mined",
];
async function parseStats(stats) {
let values = {
valuedropped: [],
datasdropped: [],
valueused: [],
datasused: [],
valuecrafted: [],
datascrafted: [],
valuekilled_by: [],
dataskilled_by: [],
valuebroken: [],
datasbroken: [],
valuepicked_up: [],
dataspicked_up: [],
valuemined: [],
datasmined: [],
valuekilled: [],
dataskilled: [],
};
// SORTING
keysToSort.forEach((key) => {
if (stats["stats"][key] && typeof stats["stats"][key] === "object") {
stats["stats"][key] = Object.fromEntries(
Object.entries(stats["stats"][key]).sort((a, b) => b[1] - a[1])
);
}
});
//parsing
keysToSort.forEach((key) => {
let statistic = stats["stats"][key];
statistic = Object.fromEntries(Object.entries(statistic).slice(0, 10));
let keyy = key.replace("minecraft:", "");
for (let item in statistic) {
values["value" + keyy].push(translate(item, key));
values["datas" + keyy].push(statistic[item]);
}
createPie(values["value" + keyy], values["datas" + keyy], keyy);
});
}
async function getStats() {
const responsetranslate = await fetch("https://neroduck.ru/ru_edited.json", {
method: "GET",
headers: { Accept: "application/json" },
});
console.log(responsetranslate.ok);
// если запрос прошел нормально
if (responsetranslate.ok === true) {
// получаем данные
window.translatejson = await responsetranslate.json();
}
// отправляет запрос и получаем ответ
const response = await fetch("https://neroduck.ru/nrdk.json", {
method: "GET",
headers: { Accept: "application/json" },
});
// если запрос прошел нормально
if (response.ok === true) {
// получаем данные
const stats = await response.json();
await parseStats(stats);
}
}
function createPie(items, datas, idcanvas) {
let bgcol = palette("tol-rainbow", items.length);
for (let i = 0; i < bgcol.length; i++) {
bgcol[i] = "#" + bgcol[i];
}
bgcol = bgcol.reverse();
const data = {
labels: items,
datasets: [
{
label: "количество",
data: datas,
backgroundColor: bgcol,
hoverOffset: 6,
},
],
};
const config = {
type: "doughnut",
data: data,
options: {
plugins: {
legend: {
labels: {
color: "white",
},
},
},
},
};
let canvas = document.getElementById(idcanvas);
let chart = new Chart(canvas, config);
}
function translate(item, type) {
if (item.includes("minecraft:") === false) {
return item;
}
let r;
switch (type) {
case "minecraft:killed_by":
r = window.translatejson["entity." + item];
return r;
case "minecraft:broken":
r = window.translatejson["item." + item]
return r
case "minecraft:used":
r = window.translatejson["item." + item]
if (r === undefined) {
r = window.translatejson["block." + item];
}
return r
case "minecraft:killed":
r = window.translatejson["entity." + item]
return r
case "minecraft:dropped":
r = window.translatejson["item." + item];
if (r === undefined) {
r = window.translatejson["block." + item];
}
return r
case "minecraft:crafted":
r = window.translatejson["item." + item]
if (r === undefined) {
r = window.translatejson["block." + item];
}
return r
case "minecraft:picked_up":
r = window.translatejson["item." + item]
if (r === undefined) {
r = window.translatejson["block." + item];
}
return r
case "minecraft:mined":
r = window.translatejson["block." + item]
return r
}
}
getStats();

File diff suppressed because it is too large Load diff

View file

@ -1,45 +1 @@
const loading = document.getElementById("loading");
let loadingLive = true;
async function getUsers() {
// отправляет запрос и получаем ответ
const response = await fetch("/api/users", {
method: "GET",
headers: { "Accept": "application/json" }
});
// если запрос прошел нормально
if (response.ok === true) {
// получаем данные
const users = await response.json();
const table = document.getElementById("users");
if (loadingLive) {
loading.remove();
loadingLive = false
}
users.forEach(user => table.append(createrow(user, true)));
return users;
}
}
function createrow(user, hidebut) {
let tr = document.createElement("tr");
let tdName = document.createElement("td");
let tdMast = document.createElement("td");
let tdId = document.createElement("td");
let tdBut = document.createElement("td");
let ButtDel = document.createElement("button");
tdId.append(user.id);
tdName.append(user.nickname);
tdMast.append(user.mast);
ButtDel.className = "AdminButtons";
ButtDel.append("УДАЛИТЬ");
ButtDel.addEventListener("click", async() => await deleteUser(user.id));
tdBut.append(ButtDel);
tdBut.className = "ADMINBUT";
if (hidebut) {
tdBut.style.display = "none";
}
tr.append(tdId, tdName, tdMast, tdBut);
tr.id = user.id;
return tr;
}
getUsers();