Крупное обновление. Из нового:
чутка переделанный дизайн, вымерший /users, доделанная статистика мира майнкрафт, и еще пара обновок
This commit is contained in:
parent
de1b0ecec5
commit
44a897a4c0
16 changed files with 1844 additions and 169 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 = "";
|
||||
}
|
161
nrdkwebsite/wwwroot/js/minecraft.js
Normal file
161
nrdkwebsite/wwwroot/js/minecraft.js
Normal 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();
|
1503
nrdkwebsite/wwwroot/js/palette.js
Normal file
1503
nrdkwebsite/wwwroot/js/palette.js
Normal file
File diff suppressed because it is too large
Load diff
|
@ -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();
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue