Update
This commit is contained in:
195
ai-chat.js
195
ai-chat.js
@@ -1,195 +0,0 @@
|
|||||||
(() => {
|
|
||||||
const introMessage =
|
|
||||||
"Witaj, jestem twoim wirtualnym agentem Krzak.org, w czym mogę Ci pomóc?";
|
|
||||||
const baseReplies = [
|
|
||||||
"Niestety, nie umiem jeszcze tego zrobić",
|
|
||||||
"Nie jestem pewien o co Ci chodzi",
|
|
||||||
];
|
|
||||||
const offerFrom = [
|
|
||||||
"pedałów",
|
|
||||||
"pajaca",
|
|
||||||
"noży",
|
|
||||||
"gwoździ",
|
|
||||||
"przypraw",
|
|
||||||
"słoika",
|
|
||||||
"słoików",
|
|
||||||
"tabletek",
|
|
||||||
"spreju",
|
|
||||||
"narzędzi",
|
|
||||||
"samolotu",
|
|
||||||
"ostrzałki",
|
|
||||||
"szafki",
|
|
||||||
"pojemnika",
|
|
||||||
"pojemników",
|
|
||||||
"ładowarki",
|
|
||||||
"ładowarek",
|
|
||||||
"wieszaków",
|
|
||||||
"wieszaka",
|
|
||||||
"półki",
|
|
||||||
"półek",
|
|
||||||
"ryby",
|
|
||||||
"migdałów",
|
|
||||||
"baterii",
|
|
||||||
"kościanych guzików",
|
|
||||||
"mieszadła",
|
|
||||||
"kleju",
|
|
||||||
];
|
|
||||||
const offerTo = [
|
|
||||||
"gwoździ",
|
|
||||||
"roweru",
|
|
||||||
"krojenia cebuli",
|
|
||||||
"pedałów",
|
|
||||||
"latania",
|
|
||||||
"łatania",
|
|
||||||
"podatków",
|
|
||||||
"sprzątania",
|
|
||||||
"wyrywania zębów",
|
|
||||||
"zmywarki",
|
|
||||||
"śmieci",
|
|
||||||
"krojenia chleba",
|
|
||||||
"krojenia ogórków",
|
|
||||||
"krojenia pomidorów",
|
|
||||||
"krojenia cebuli",
|
|
||||||
"krojenia ogórków",
|
|
||||||
"krojenia pomidorów",
|
|
||||||
"jedzenia",
|
|
||||||
"picia",
|
|
||||||
"kuchni",
|
|
||||||
"książek",
|
|
||||||
"ryb",
|
|
||||||
"migdałów",
|
|
||||||
"komputera",
|
|
||||||
"internetu",
|
|
||||||
"koszul",
|
|
||||||
"butów",
|
|
||||||
];
|
|
||||||
|
|
||||||
const chatRoot = document.createElement("div");
|
|
||||||
chatRoot.className = "ai-chat";
|
|
||||||
chatRoot.innerHTML = `
|
|
||||||
<button class="ai-chat__fab" type="button" aria-expanded="false" aria-controls="ai-chat-panel">AI chat</button>
|
|
||||||
<section class="ai-chat__panel" id="ai-chat-panel" aria-hidden="true">
|
|
||||||
<header class="ai-chat__header">
|
|
||||||
<strong>Agent Krzak.org</strong>
|
|
||||||
<button class="ai-chat__close" type="button" aria-label="Close chat">x</button>
|
|
||||||
</header>
|
|
||||||
<div class="ai-chat__messages"></div>
|
|
||||||
<form class="ai-chat__form">
|
|
||||||
<input class="ai-chat__input" type="text" placeholder="Napisz wiadomość..." autocomplete="off" />
|
|
||||||
<button class="ai-chat__send" type="submit">Wyslij</button>
|
|
||||||
</form>
|
|
||||||
</section>
|
|
||||||
`;
|
|
||||||
document.body.appendChild(chatRoot);
|
|
||||||
|
|
||||||
const fab = chatRoot.querySelector(".ai-chat__fab");
|
|
||||||
const panel = chatRoot.querySelector(".ai-chat__panel");
|
|
||||||
const closeBtn = chatRoot.querySelector(".ai-chat__close");
|
|
||||||
const messages = chatRoot.querySelector(".ai-chat__messages");
|
|
||||||
const form = chatRoot.querySelector(".ai-chat__form");
|
|
||||||
const input = chatRoot.querySelector(".ai-chat__input");
|
|
||||||
const sendBtn = chatRoot.querySelector(".ai-chat__send");
|
|
||||||
const backToTop = document.getElementById("back-to-top");
|
|
||||||
const viewport = window.visualViewport;
|
|
||||||
|
|
||||||
function addMessage(text, fromUser) {
|
|
||||||
const bubble = document.createElement("p");
|
|
||||||
bubble.className = fromUser
|
|
||||||
? "ai-chat__bubble ai-chat__bubble--user"
|
|
||||||
: "ai-chat__bubble";
|
|
||||||
bubble.textContent = text;
|
|
||||||
messages.appendChild(bubble);
|
|
||||||
messages.scrollTop = messages.scrollHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
function openChat() {
|
|
||||||
panel.classList.add("is-open");
|
|
||||||
panel.setAttribute("aria-hidden", "false");
|
|
||||||
fab.setAttribute("aria-expanded", "true");
|
|
||||||
if (!messages.hasChildNodes()) {
|
|
||||||
addMessage(introMessage, false);
|
|
||||||
}
|
|
||||||
input.focus();
|
|
||||||
syncKeyboardOffset();
|
|
||||||
}
|
|
||||||
|
|
||||||
function closeChat() {
|
|
||||||
panel.classList.remove("is-open");
|
|
||||||
panel.setAttribute("aria-hidden", "true");
|
|
||||||
fab.setAttribute("aria-expanded", "false");
|
|
||||||
syncKeyboardOffset();
|
|
||||||
}
|
|
||||||
|
|
||||||
function randomItem(items) {
|
|
||||||
return items[Math.floor(Math.random() * items.length)];
|
|
||||||
}
|
|
||||||
|
|
||||||
function buildReply() {
|
|
||||||
return `${randomItem(baseReplies)}, ale mogę Ci zaoferować kupno ${randomItem(offerFrom)} do ${randomItem(offerTo)}.`;
|
|
||||||
}
|
|
||||||
|
|
||||||
function syncChatPosition() {
|
|
||||||
if (!backToTop) {
|
|
||||||
chatRoot.classList.remove("ai-chat--raised");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
chatRoot.classList.toggle(
|
|
||||||
"ai-chat--raised",
|
|
||||||
backToTop.classList.contains("visible"),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function syncKeyboardOffset() {
|
|
||||||
if (!viewport) {
|
|
||||||
chatRoot.style.setProperty("--ai-chat-keyboard-offset", "0px");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const offset = Math.max(
|
|
||||||
0,
|
|
||||||
Math.round(window.innerHeight - viewport.height - viewport.offsetTop),
|
|
||||||
);
|
|
||||||
chatRoot.style.setProperty("--ai-chat-keyboard-offset", `${offset}px`);
|
|
||||||
}
|
|
||||||
|
|
||||||
fab.addEventListener("click", () => {
|
|
||||||
if (panel.classList.contains("is-open")) {
|
|
||||||
closeChat();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
openChat();
|
|
||||||
});
|
|
||||||
|
|
||||||
closeBtn.addEventListener("click", closeChat);
|
|
||||||
sendBtn.addEventListener("pointerdown", (event) => {
|
|
||||||
// Keep focus on the input so mobile keyboards stay open after sending.
|
|
||||||
event.preventDefault();
|
|
||||||
});
|
|
||||||
|
|
||||||
form.addEventListener("submit", (event) => {
|
|
||||||
event.preventDefault();
|
|
||||||
const text = input.value.trim();
|
|
||||||
if (!text) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
addMessage(text, true);
|
|
||||||
addMessage(buildReply(), false);
|
|
||||||
input.value = "";
|
|
||||||
input.focus({ preventScroll: true });
|
|
||||||
});
|
|
||||||
|
|
||||||
if (backToTop) {
|
|
||||||
const observer = new MutationObserver(syncChatPosition);
|
|
||||||
observer.observe(backToTop, {
|
|
||||||
attributes: true,
|
|
||||||
attributeFilter: ["class"],
|
|
||||||
});
|
|
||||||
window.addEventListener("resize", syncChatPosition);
|
|
||||||
}
|
|
||||||
if (viewport) {
|
|
||||||
viewport.addEventListener("resize", syncKeyboardOffset);
|
|
||||||
viewport.addEventListener("scroll", syncKeyboardOffset);
|
|
||||||
}
|
|
||||||
window.addEventListener("resize", syncKeyboardOffset);
|
|
||||||
syncChatPosition();
|
|
||||||
syncKeyboardOffset();
|
|
||||||
})();
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
(function () {
|
|
||||||
const backToTopButton = document.getElementById("back-to-top");
|
|
||||||
|
|
||||||
if (backToTopButton) {
|
|
||||||
function toggleBackToTop() {
|
|
||||||
if (window.pageYOffset > 300) {
|
|
||||||
backToTopButton.classList.add("visible");
|
|
||||||
} else {
|
|
||||||
backToTopButton.classList.remove("visible");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
backToTopButton.addEventListener("click", function () {
|
|
||||||
window.scrollTo({
|
|
||||||
top: 0,
|
|
||||||
behavior: "smooth",
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
window.addEventListener("scroll", toggleBackToTop);
|
|
||||||
|
|
||||||
toggleBackToTop();
|
|
||||||
}
|
|
||||||
|
|
||||||
const listItems = document.querySelectorAll("li");
|
|
||||||
listItems.forEach((item, index) => {
|
|
||||||
if (!item.style.animationDelay) {
|
|
||||||
item.style.animationDelay = `${0.1 + index * 0.05}s`;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})();
|
|
||||||
@@ -1,202 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>Krzak.org - Recommended Applications</title>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
|
|
||||||
<!-- Favicons -->
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicons/favicon.svg" />
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="16x16"
|
|
||||||
href="/favicons/favicon-16x16.png"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="32x32"
|
|
||||||
href="/favicons/favicon-32x32.png"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="48x48"
|
|
||||||
href="/favicons/favicon-48x48.png"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="96x96"
|
|
||||||
href="/favicons/favicon-96x96.png"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="192x192"
|
|
||||||
href="/favicons/favicon-192x192.png"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="apple-touch-icon"
|
|
||||||
sizes="180x180"
|
|
||||||
href="/favicons/favicon-180x180.png"
|
|
||||||
/>
|
|
||||||
<link rel="shortcut icon" href="/favicons/favicon.ico" />
|
|
||||||
|
|
||||||
<!-- PWA -->
|
|
||||||
<link rel="manifest" href="/manifest.json" />
|
|
||||||
<meta name="theme-color" content="#2a1a5e" />
|
|
||||||
<link rel="stylesheet" href="/styles.css" />
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div class="container fade-in">
|
|
||||||
<h1 class="slide-down">
|
|
||||||
<span class="icon">
|
|
||||||
<img src="/icon.svg" alt="krzak.org" />
|
|
||||||
</span>
|
|
||||||
Recommended Apps
|
|
||||||
</h1>
|
|
||||||
<p class="slide-down" style="animation-delay: 0.5s">
|
|
||||||
If you know of better applications, let me know!
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div class="slide-up" style="animation-delay: 1s">
|
|
||||||
<h2>Fediverse</h2>
|
|
||||||
<div class="app-gallery">
|
|
||||||
<!-- Aria -->
|
|
||||||
<a
|
|
||||||
href="https://github.com/poppingmoon/aria/"
|
|
||||||
target="_blank"
|
|
||||||
class="app-card highlighted"
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
src="https://raw.githubusercontent.com/poppingmoon/aria/main/assets/icons/aria.png"
|
|
||||||
alt="Aria icon"
|
|
||||||
class="app-icon"
|
|
||||||
/>
|
|
||||||
<div>
|
|
||||||
<h4>Aria</h4>
|
|
||||||
<p>Better integration with Misskey/Sharkey.</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="slide-up" style="animation-delay: 1.5s">
|
|
||||||
<h2>Matrix</h2>
|
|
||||||
<div class="app-gallery">
|
|
||||||
<a
|
|
||||||
href="https://element.io/download"
|
|
||||||
target="_blank"
|
|
||||||
class="app-card highlighted"
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
src="https://element.io/assets-32bb636196f91ed59d7a49190e26b42c/5ef25c0d30ee3108da4c25e9/5f365d3197194f8c73b00112_logo-mark-primary.svg"
|
|
||||||
alt="Element icon"
|
|
||||||
class="app-icon"
|
|
||||||
/>
|
|
||||||
<div>
|
|
||||||
<h4>Element</h4>
|
|
||||||
<p>Desktop only.</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
<a
|
|
||||||
href="https://schildi.chat/next/"
|
|
||||||
target="_blank"
|
|
||||||
class="app-card highlighted"
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
src="https://schildi.chat/img/icon-next.svg"
|
|
||||||
alt="SchildiNext icon"
|
|
||||||
class="app-icon"
|
|
||||||
/>
|
|
||||||
<div>
|
|
||||||
<h4>SchildiNext</h4>
|
|
||||||
<p>Mobile only.</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="slide-up" style="animation-delay: 2s">
|
|
||||||
<h2>Music</h2>
|
|
||||||
<div class="app-gallery">
|
|
||||||
<!-- Finamp -->
|
|
||||||
<a
|
|
||||||
href="https://github.com/jmshrv/finamp"
|
|
||||||
target="_blank"
|
|
||||||
class="app-card highlighted"
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
src="https://raw.githubusercontent.com/jmshrv/finamp/54a1a24b8b501423a0c4b3a58e5748583d99a7f8/assets/icon/icon_foreground.svg"
|
|
||||||
alt="Finamp icon"
|
|
||||||
class="app-icon"
|
|
||||||
/>
|
|
||||||
<div>
|
|
||||||
<h4>Finamp</h4>
|
|
||||||
<p>
|
|
||||||
Cross-platform client, just make sure to
|
|
||||||
download the beta to have the lyrics working
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<br />
|
|
||||||
<ul>
|
|
||||||
<li class="slide-up" style="animation-delay: 2.5s">
|
|
||||||
<a href="/">
|
|
||||||
<strong>Back</strong>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="librecounter fade-in" style="animation-delay: 3s">
|
|
||||||
<span class="librecounter-text">
|
|
||||||
Indexed by
|
|
||||||
<a
|
|
||||||
href="https://librecounter.org/referer/show"
|
|
||||||
target="_blank"
|
|
||||||
>LibreCounter</a
|
|
||||||
>
|
|
||||||
</span>
|
|
||||||
<a href="https://librecounter.org/referer/show" target="_blank">
|
|
||||||
<img
|
|
||||||
src="https://librecounter.org/counter.svg"
|
|
||||||
referrerpolicy="unsafe-url"
|
|
||||||
alt="LibreCounter"
|
|
||||||
/>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Back to top button -->
|
|
||||||
<button
|
|
||||||
id="back-to-top"
|
|
||||||
class="back-to-top"
|
|
||||||
aria-label="Back to top"
|
|
||||||
title="Back to top"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<polyline points="18 15 12 9 6 15"></polyline>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<script src="/refresh.js"></script>
|
|
||||||
<script src="/animations.js"></script>
|
|
||||||
<script src="/ai-chat.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -84,12 +84,6 @@
|
|||||||
<span>Safespace ULtd.</span>
|
<span>Safespace ULtd.</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="slide-up" style="animation-delay: 0.15s">
|
|
||||||
<a href="https://fluxer.gg/UzaWKyPN" class="discord-link">
|
|
||||||
<strong>Fluxer</strong>
|
|
||||||
<span>fluxer.gg/UzaWKyPN</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.2s">
|
<li class="slide-up" style="animation-delay: 0.2s">
|
||||||
<a
|
<a
|
||||||
href="https://discord.gg/CY3Zr6baD7"
|
href="https://discord.gg/CY3Zr6baD7"
|
||||||
@@ -99,38 +93,12 @@
|
|||||||
<span>discord.gg/CY3Zr6baD7</span>
|
<span>discord.gg/CY3Zr6baD7</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="slide-up" style="animation-delay: 0.25s">
|
<li class="slide-up" style="animation-delay: 0.15s">
|
||||||
<a href="/">
|
<a href="/">
|
||||||
<strong>Back</strong>
|
<strong>Back</strong>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<!-- Back to top button -->
|
|
||||||
<button
|
|
||||||
id="back-to-top"
|
|
||||||
class="back-to-top"
|
|
||||||
aria-label="Back to top"
|
|
||||||
title="Back to top"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<polyline points="18 15 12 9 6 15"></polyline>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<script src="/refresh.js"></script>
|
|
||||||
<script src="/animations.js"></script>
|
|
||||||
<script src="/ai-chat.js"></script>
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
69
contact.html
69
contact.html
@@ -15,40 +15,30 @@
|
|||||||
</span>
|
</span>
|
||||||
Krzak.org
|
Krzak.org
|
||||||
</h1>
|
</h1>
|
||||||
<p class="slide-down">Contact:</p>
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="slide-up" style="animation-delay: 0.05s">
|
<li class="slide-up" style="animation-delay: 0.05s">
|
||||||
<a href="https://matrix.to/#/@admin:krzak.org">
|
<a href="https://matrix.to/#/@n0va:krzak.org">
|
||||||
<strong>Matrix</strong>
|
<strong>Matrix</strong>
|
||||||
<span>@admin:krzak.org</span>
|
<span>@n0va:krzak.org</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="slide-up" style="animation-delay: 0.1s">
|
<li class="slide-up" style="animation-delay: 0.1s">
|
||||||
<a href="https://fedi.krzak.org/@krzak">
|
<a href="https://fedi.krzak.org/@n0va">
|
||||||
<strong>Fediverse</strong>
|
<strong>Fediverse</strong>
|
||||||
<span>@krzak@fedi.krzak.org</span>
|
<span>@n0va@fedi.krzak.org</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="slide-up" style="animation-delay: 0.15s">
|
<li class="slide-up" style="animation-delay: 0.15s">
|
||||||
<a href="mailto:admin@krzak.org">
|
<a href="mailto:n0va@krzak.org">
|
||||||
<strong>Mail</strong>
|
<strong>Mail</strong>
|
||||||
<span>admin@krzak.org</span>
|
<span>n0va@krzak.org</span>
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.2s">
|
|
||||||
<a href="">
|
|
||||||
<strong>Discord</strong>
|
|
||||||
<span>n0va_bot</span>
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br />
|
|
||||||
<p class="fade-in" style="animation-delay: 0.25s">Support:</p>
|
|
||||||
<ul>
|
<ul>
|
||||||
<li class="slide-up" style="animation-delay: 0.3s">
|
<li class="slide-up support-row" style="animation-delay: 0.3s">
|
||||||
<a href="https://liberapay.com/krzak">
|
<a href="https://liberapay.com/krzak" class="button">
|
||||||
<strong>Support Krzak.org</strong>
|
Support Krzak.org
|
||||||
<span>Liberapay</span>
|
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -62,7 +52,13 @@
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="librecounter fade-in" style="animation-delay: 0.4s">
|
<div class="librecounter fade-in" style="animation-delay: 0.4s">
|
||||||
<span class="librecounter-text">
|
<img
|
||||||
|
src="https://librecounter.org/counter.svg"
|
||||||
|
referrerpolicy="unsafe-url"
|
||||||
|
width="0"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
<span class="counter">
|
||||||
Indexed by
|
Indexed by
|
||||||
<a
|
<a
|
||||||
href="https://librecounter.org/referer/show"
|
href="https://librecounter.org/referer/show"
|
||||||
@@ -70,40 +66,7 @@
|
|||||||
>LibreCounter</a
|
>LibreCounter</a
|
||||||
>
|
>
|
||||||
</span>
|
</span>
|
||||||
<a href="https://librecounter.org/referer/show" target="_blank">
|
|
||||||
<img
|
|
||||||
src="https://librecounter.org/counter.svg"
|
|
||||||
referrerpolicy="unsafe-url"
|
|
||||||
alt="LibreCounter"
|
|
||||||
/>
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Back to top button -->
|
|
||||||
<button
|
|
||||||
id="back-to-top"
|
|
||||||
class="back-to-top"
|
|
||||||
aria-label="Back to top"
|
|
||||||
title="Back to top"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<polyline points="18 15 12 9 6 15"></polyline>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<script src="/refresh.js"></script>
|
|
||||||
<script src="/animations.js"></script>
|
|
||||||
<script src="/ai-chat.js"></script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
28
dc.html
28
dc.html
@@ -1,28 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>Community | Krzak.org</title>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta http-equiv="refresh" content="0; url=/community/" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<link rel="stylesheet" href="/styles.css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container fade-in">
|
|
||||||
<h1 class="slide-down">
|
|
||||||
<span class="icon">
|
|
||||||
<img src="/icon.svg" alt="krzak.org" />
|
|
||||||
</span>
|
|
||||||
Krzak.org
|
|
||||||
</h1>
|
|
||||||
<p class="slide-down">Redirecting to the community page...</p>
|
|
||||||
<p class="fade-in" style="animation-delay: 0.1s">
|
|
||||||
If you are not redirected automatically, open
|
|
||||||
<a href="/community/">/community/</a>.
|
|
||||||
</p>
|
|
||||||
<script src="/refresh.js"></script>
|
|
||||||
<script src="/animations.js"></script>
|
|
||||||
<script src="/ai-chat.js"></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
130
discord.html
130
discord.html
@@ -1,130 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>Community | Krzak.org</title>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
|
|
||||||
<!-- Favicons -->
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicons/favicon.svg" />
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="16x16"
|
|
||||||
href="/favicons/favicon-16x16.png"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="32x32"
|
|
||||||
href="/favicons/favicon-32x32.png"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="48x48"
|
|
||||||
href="/favicons/favicon-48x48.png"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="96x96"
|
|
||||||
href="/favicons/favicon-96x96.png"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="192x192"
|
|
||||||
href="/favicons/favicon-192x192.png"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="apple-touch-icon"
|
|
||||||
sizes="180x180"
|
|
||||||
href="/favicons/favicon-180x180.png"
|
|
||||||
/>
|
|
||||||
<link rel="shortcut icon" href="/favicons/favicon.ico" />
|
|
||||||
|
|
||||||
<!-- Android Chrome -->
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="192x192"
|
|
||||||
href="/favicons/favicon-192x192.png"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="512x512"
|
|
||||||
href="/favicons/favicon-512x512.png"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- PWA -->
|
|
||||||
<link rel="manifest" href="/manifest.json" />
|
|
||||||
<meta name="theme-color" content="#2a1a5e" />
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="/styles.css" />
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div class="container fade-in">
|
|
||||||
<h1 class="slide-down">
|
|
||||||
<span class="icon">
|
|
||||||
<img src="/icon.svg" alt="krzak.org" />
|
|
||||||
</span>
|
|
||||||
Krzak.org
|
|
||||||
</h1>
|
|
||||||
<p class="slide-down">Join the community on Discord or Matrix</p>
|
|
||||||
<ul>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.1s">
|
|
||||||
<a
|
|
||||||
href="https://matrix.to/#/!FQlmqHwYODiSahGeim:krzak.org?via=krzak.org"
|
|
||||||
class="matrix-link"
|
|
||||||
>
|
|
||||||
<strong>chat.krzak.org (Matrix)</strong>
|
|
||||||
<span>#krzak.org</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.15s">
|
|
||||||
<a
|
|
||||||
href="https://discord.gg/CY3Zr6baD7"
|
|
||||||
class="discord-link"
|
|
||||||
>
|
|
||||||
<strong>Discord</strong>
|
|
||||||
<span>discord.gg/CY3Zr6baD7</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.2s">
|
|
||||||
<a href="/">
|
|
||||||
<strong>Back</strong>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<!-- Back to top button -->
|
|
||||||
<button
|
|
||||||
id="back-to-top"
|
|
||||||
class="back-to-top"
|
|
||||||
aria-label="Back to top"
|
|
||||||
title="Back to top"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<polyline points="18 15 12 9 6 15"></polyline>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<script src="/refresh.js"></script>
|
|
||||||
<script src="/animations.js"></script>
|
|
||||||
<script src="/ai-chat.js"></script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
208
index.html
208
index.html
@@ -69,122 +69,117 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="container fade-in">
|
<div class="container homepage">
|
||||||
<h1 class="slide-down">
|
<header class="hero">
|
||||||
<span class="icon">
|
<div class="band">
|
||||||
|
<span class="icon mark">
|
||||||
<img src="/icon.svg" alt="krzak.org" />
|
<img src="/icon.svg" alt="krzak.org" />
|
||||||
</span>
|
</span>
|
||||||
Krzak.org
|
<div class="copy">
|
||||||
</h1>
|
<h1>Krzak.org</h1>
|
||||||
<p class="slide-down">Hi, welcome to krzak.org</p>
|
<p class="lead">Hi, welcome to krzak.org</p>
|
||||||
<ul>
|
</div>
|
||||||
<li class="slide-up" style="animation-delay: 0.05s">
|
</div>
|
||||||
<a href="https://search.krzak.org" class="search-link">
|
</header>
|
||||||
<strong>Search</strong>
|
|
||||||
<span>OmniSearch</span>
|
<section class="box">
|
||||||
</a>
|
<h2>Main services</h2>
|
||||||
</li>
|
<ul class="links">
|
||||||
<li class="slide-up" style="animation-delay: 0.1s">
|
<li>
|
||||||
<a href="https://fedi.krzak.org" class="sharkey-link">
|
<a href="https://git.krzak.org" class="link main">
|
||||||
<strong>Fediverse</strong>
|
|
||||||
<span>Sharkey</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.15s">
|
|
||||||
<a href="https://mail.krzak.org">
|
|
||||||
<strong>Mail</strong>
|
|
||||||
<span>Mailu</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.2s">
|
|
||||||
<a href="https://music.krzak.org" class="music-link">
|
|
||||||
<strong>Music</strong>
|
|
||||||
<span>Jellyfin</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.25s">
|
|
||||||
<a href="https://kreatyw.krzak.org" class="kreatyw-link">
|
|
||||||
<strong>
|
|
||||||
<img
|
|
||||||
src="https://kreatyw.krzak.org/ui/icon.png"
|
|
||||||
width="32"
|
|
||||||
height="32"
|
|
||||||
/>
|
|
||||||
Kreatyw
|
|
||||||
</strong>
|
|
||||||
<span>AI Powered™</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.3s">
|
|
||||||
<a href="/applications.html" class="applications-link">
|
|
||||||
<strong>Recommended applications</strong>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.35s">
|
|
||||||
<a href="/community/" class="matrix-link">
|
|
||||||
<strong>Community (Discord + Matrix)</strong>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.4s">
|
|
||||||
<a href="https://chat.krzak.org" class="matrix-link">
|
|
||||||
<strong>Chat</strong>
|
|
||||||
<span>chat.krzak.org</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.45s">
|
|
||||||
<a href="https://mu.krzak.org">
|
|
||||||
<strong>Music Upload</strong>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.5s">
|
|
||||||
<a href="https://git.krzak.org">
|
|
||||||
<strong>Git</strong>
|
<strong>Git</strong>
|
||||||
<span>Gitea</span>
|
<span>Gitea</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="slide-up" style="animation-delay: 0.55s">
|
<li>
|
||||||
<a href="https://liberapay.com/krzak" class="support-link">
|
<a href="https://chat.krzak.org" class="link main">
|
||||||
<strong>Support</strong>
|
<strong>Chat</strong>
|
||||||
<span>Liberapay</span>
|
<span>chat.krzak.org</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="slide-up" style="animation-delay: 0.6s">
|
<li>
|
||||||
<a href="https://rss.krzak.org">
|
<a href="https://fedi.krzak.org" class="link">
|
||||||
<strong>RSS</strong>
|
<strong>Fediverse</strong>
|
||||||
<span>Miniflux</span>
|
<span>Sharkey</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="slide-up" style="animation-delay: 0.65s">
|
<li>
|
||||||
<a href="https://paste.krzak.org">
|
<a href="https://music.krzak.org" class="link">
|
||||||
|
<strong>Music</strong>
|
||||||
|
<span>Jellyfin</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="box">
|
||||||
|
<h2>Tools</h2>
|
||||||
|
<ul class="links">
|
||||||
|
<li>
|
||||||
|
<a href="https://mail.krzak.org" class="link">
|
||||||
|
<strong>Mail</strong>
|
||||||
|
<span>Mailu</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="https://mu.krzak.org" class="link">
|
||||||
|
<strong>Music Upload</strong>
|
||||||
|
<span>mu.krzak.org</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="https://paste.krzak.org" class="link">
|
||||||
<strong>Paste</strong>
|
<strong>Paste</strong>
|
||||||
<span>Opengist</span>
|
<span>Opengist</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="slide-up" style="animation-delay: 0.7s">
|
<li>
|
||||||
<a href="https://share.krzak.org">
|
<a href="https://link.krzak.org" class="link">
|
||||||
<strong>Share</strong>
|
|
||||||
<span>FilePizza</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.75s">
|
|
||||||
<a href="https://link.krzak.org">
|
|
||||||
<strong>Link Shortener</strong>
|
<strong>Link Shortener</strong>
|
||||||
<span>Shlink</span>
|
<span>Shlink</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="slide-up" style="animation-delay: 0.8s">
|
</ul>
|
||||||
<a href="/contact.html">
|
</section>
|
||||||
|
|
||||||
|
<section class="box">
|
||||||
|
<h2>Pages</h2>
|
||||||
|
<ul class="links">
|
||||||
|
<li>
|
||||||
|
<a href="/community/" class="link">
|
||||||
|
<strong>Community</strong>
|
||||||
|
<span>Discord + Matrix</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="/contact.html" class="link">
|
||||||
<strong>Contact</strong>
|
<strong>Contact</strong>
|
||||||
|
<span>Ways to reach me</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p class="fade-in" style="animation-delay: 0.85s">
|
</section>
|
||||||
|
|
||||||
|
<section class="foot">
|
||||||
|
<p>
|
||||||
If you want an account on any of these, want to suggest
|
If you want an account on any of these, want to suggest
|
||||||
something new or get a subdomain, just message me
|
something new or get a subdomain, just message me
|
||||||
</p>
|
</p>
|
||||||
|
<div class="support">
|
||||||
|
<a href="https://liberapay.com/krzak" class="button">
|
||||||
|
Support Krzak.org
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
<div class="librecounter fade-in" style="animation-delay: 0.9s">
|
<div class="librecounter">
|
||||||
<span class="librecounter-text">
|
<img
|
||||||
|
src="https://librecounter.org/counter.svg"
|
||||||
|
referrerpolicy="unsafe-url"
|
||||||
|
width="0"
|
||||||
|
alt=""
|
||||||
|
/>
|
||||||
|
<span class="counter">
|
||||||
Indexed by
|
Indexed by
|
||||||
<a
|
<a
|
||||||
href="https://librecounter.org/referer/show"
|
href="https://librecounter.org/referer/show"
|
||||||
@@ -192,40 +187,7 @@
|
|||||||
>LibreCounter</a
|
>LibreCounter</a
|
||||||
>
|
>
|
||||||
</span>
|
</span>
|
||||||
<a href="https://librecounter.org/referer/show" target="_blank">
|
|
||||||
<img
|
|
||||||
src="https://librecounter.org/counter.svg"
|
|
||||||
referrerpolicy="unsafe-url"
|
|
||||||
alt="LibreCounter"
|
|
||||||
/>
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Back to top button -->
|
|
||||||
<button
|
|
||||||
id="back-to-top"
|
|
||||||
class="back-to-top"
|
|
||||||
aria-label="Back to top"
|
|
||||||
title="Back to top"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<polyline points="18 15 12 9 6 15"></polyline>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<script src="/refresh.js"></script>
|
|
||||||
<script src="/animations.js"></script>
|
|
||||||
<script src="/ai-chat.js"></script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Krzak.org",
|
|
||||||
"short_name": "Krzak",
|
|
||||||
"icons": [
|
|
||||||
{
|
|
||||||
"src": "/favicons/favicon-192x192.png",
|
|
||||||
"sizes": "192x192",
|
|
||||||
"type": "image/png"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "/favicons/favicon-512x512.png",
|
|
||||||
"sizes": "512x512",
|
|
||||||
"type": "image/png"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"theme_color": "#2a1a5e",
|
|
||||||
"background_color": "#2a1a5e",
|
|
||||||
"display": "standalone"
|
|
||||||
}
|
|
||||||
654
mc.html
654
mc.html
@@ -1,654 +0,0 @@
|
|||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>Krzak.org - Minecraft</title>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<link rel="stylesheet" href="/styles.css" />
|
|
||||||
<style>
|
|
||||||
.server-status-widget {
|
|
||||||
background: var(--link-bg);
|
|
||||||
border-radius: 16px;
|
|
||||||
padding: 24px;
|
|
||||||
border: 1px solid var(--container-border);
|
|
||||||
backdrop-filter: blur(12px);
|
|
||||||
-webkit-backdrop-filter: blur(12px);
|
|
||||||
box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.3);
|
|
||||||
margin: 24px 0;
|
|
||||||
transition: all 0.3s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.server-status-widget:hover {
|
|
||||||
transform: translateY(-2px);
|
|
||||||
box-shadow: 0 8px 24px 0 rgba(0, 0, 0, 0.4);
|
|
||||||
border-color: var(--link-hover-border);
|
|
||||||
}
|
|
||||||
|
|
||||||
.status-header {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.status-title {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 12px;
|
|
||||||
font-size: 1.3rem;
|
|
||||||
font-weight: 600;
|
|
||||||
color: var(--accent-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.status-indicator {
|
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
|
||||||
border-radius: 50%;
|
|
||||||
animation: pulse 2s ease-in-out infinite;
|
|
||||||
}
|
|
||||||
|
|
||||||
.status-indicator.online {
|
|
||||||
background-color: #4ade80;
|
|
||||||
box-shadow: 0 0 12px #4ade80;
|
|
||||||
}
|
|
||||||
|
|
||||||
.status-indicator.offline {
|
|
||||||
background-color: #f87171;
|
|
||||||
box-shadow: 0 0 12px #f87171;
|
|
||||||
animation: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes pulse {
|
|
||||||
0%,
|
|
||||||
100% {
|
|
||||||
opacity: 1;
|
|
||||||
transform: scale(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
50% {
|
|
||||||
opacity: 0.7;
|
|
||||||
transform: scale(1.1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.status-info {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
||||||
gap: 16px;
|
|
||||||
margin-bottom: 16px;
|
|
||||||
animation: fadeSlideUp 0.5s ease-out forwards 0.2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes fadeSlideUp {
|
|
||||||
from {
|
|
||||||
opacity: 0;
|
|
||||||
transform: translateY(10px);
|
|
||||||
}
|
|
||||||
|
|
||||||
to {
|
|
||||||
opacity: 1;
|
|
||||||
transform: translateY(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-card {
|
|
||||||
background: rgba(255, 255, 255, 0.03);
|
|
||||||
border-radius: 12px;
|
|
||||||
padding: 16px;
|
|
||||||
border: 1px solid var(--container-border);
|
|
||||||
transition: all 0.2s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-card:hover {
|
|
||||||
transform: scale(1.02);
|
|
||||||
background: rgba(255, 255, 255, 0.08);
|
|
||||||
border-color: var(--accent-color);
|
|
||||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-card.copyable {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-label {
|
|
||||||
font-size: 0.85rem;
|
|
||||||
color: var(--text-muted);
|
|
||||||
margin-bottom: 6px;
|
|
||||||
font-weight: 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
.info-value {
|
|
||||||
font-size: 1.3rem;
|
|
||||||
color: var(--text-color);
|
|
||||||
font-weight: 600;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
.server-motd {
|
|
||||||
background: rgba(0, 0, 0, 0.2);
|
|
||||||
border-radius: 12px;
|
|
||||||
padding: 16px;
|
|
||||||
border: 1px solid var(--container-border);
|
|
||||||
font-family: "Courier New", monospace;
|
|
||||||
color: var(--text-color);
|
|
||||||
font-size: 0.95rem;
|
|
||||||
line-height: 1.6;
|
|
||||||
white-space: pre-wrap;
|
|
||||||
word-break: break-word;
|
|
||||||
animation: fadeSlideUp 0.5s ease-out forwards 0.4s;
|
|
||||||
transition: all 0.2s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.server-motd:hover {
|
|
||||||
border-color: var(--accent-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.last-updated {
|
|
||||||
font-size: 0.8rem;
|
|
||||||
color: var(--text-muted);
|
|
||||||
text-align: right;
|
|
||||||
margin-top: 12px;
|
|
||||||
animation: fadeIn 0.5s ease-out forwards 0.6s;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes fadeIn {
|
|
||||||
from {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
to {
|
|
||||||
opacity: 0.8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
gap: 8px;
|
|
||||||
color: var(--text-muted);
|
|
||||||
padding: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.spinner {
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
border: 3px solid rgba(255, 255, 255, 0.1);
|
|
||||||
border-top-color: var(--accent-color);
|
|
||||||
border-radius: 50%;
|
|
||||||
animation: spin 1s linear infinite;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes spin {
|
|
||||||
to {
|
|
||||||
transform: rotate(360deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.error-message {
|
|
||||||
color: #f87171;
|
|
||||||
text-align: center;
|
|
||||||
padding: 20px;
|
|
||||||
background: rgba(248, 113, 113, 0.1);
|
|
||||||
border-radius: 12px;
|
|
||||||
border: 1px solid rgba(248, 113, 113, 0.3);
|
|
||||||
}
|
|
||||||
|
|
||||||
.players-list {
|
|
||||||
margin-top: 8px;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
color: var(--text-muted);
|
|
||||||
line-height: 1.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fingerprint-widget {
|
|
||||||
background: var(--link-bg);
|
|
||||||
border-radius: 16px;
|
|
||||||
padding: 24px;
|
|
||||||
border: 1px solid var(--container-border);
|
|
||||||
backdrop-filter: blur(12px);
|
|
||||||
-webkit-backdrop-filter: blur(12px);
|
|
||||||
box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.3);
|
|
||||||
margin: 24px 0;
|
|
||||||
transition: all 0.3s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fingerprint-widget:hover {
|
|
||||||
transform: translateY(-2px);
|
|
||||||
box-shadow: 0 8px 24px 0 rgba(0, 0, 0, 0.4);
|
|
||||||
border-color: var(--link-hover-border);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Copy button styles */
|
|
||||||
.info-value-wrapper {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 12px;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
.copy-button {
|
|
||||||
background: rgba(255, 255, 255, 0.05);
|
|
||||||
border: 1px solid var(--container-border);
|
|
||||||
border-radius: 8px;
|
|
||||||
padding: 8px;
|
|
||||||
cursor: pointer;
|
|
||||||
transition: all 0.2s ease;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
width: 36px;
|
|
||||||
height: 36px;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.copy-button:hover {
|
|
||||||
background: rgba(255, 255, 255, 0.1);
|
|
||||||
border-color: var(--accent-color);
|
|
||||||
transform: scale(1.05);
|
|
||||||
}
|
|
||||||
|
|
||||||
.copy-button.copied {
|
|
||||||
background: rgba(74, 222, 128, 0.2);
|
|
||||||
border-color: rgba(74, 222, 128, 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
.copy-icon {
|
|
||||||
width: 18px;
|
|
||||||
height: 18px;
|
|
||||||
color: var(--text-color);
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Resourcepack widget styles */
|
|
||||||
.resourcepack-widget {
|
|
||||||
background: var(--link-bg);
|
|
||||||
border-radius: 16px;
|
|
||||||
padding: 0;
|
|
||||||
border: 1px solid var(--container-border);
|
|
||||||
backdrop-filter: blur(12px);
|
|
||||||
-webkit-backdrop-filter: blur(12px);
|
|
||||||
box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.3);
|
|
||||||
margin: 24px 0;
|
|
||||||
transition: all 0.3s ease;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.resourcepack-widget:hover {
|
|
||||||
transform: translateY(-2px);
|
|
||||||
box-shadow: 0 8px 24px 0 rgba(0, 0, 0, 0.4);
|
|
||||||
border-color: var(--link-hover-border);
|
|
||||||
}
|
|
||||||
|
|
||||||
.resourcepack-link {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 16px;
|
|
||||||
padding: 20px 24px;
|
|
||||||
text-decoration: none;
|
|
||||||
color: var(--text-color);
|
|
||||||
transition: all 0.2s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.resourcepack-link:hover {
|
|
||||||
background: rgba(255, 255, 255, 0.05);
|
|
||||||
}
|
|
||||||
|
|
||||||
.resourcepack-icon {
|
|
||||||
width: 32px;
|
|
||||||
height: 32px;
|
|
||||||
color: var(--accent-color);
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.resourcepack-link div {
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.resourcepack-link strong {
|
|
||||||
display: block;
|
|
||||||
font-size: 1.1rem;
|
|
||||||
margin-bottom: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.resourcepack-desc {
|
|
||||||
font-size: 0.9rem;
|
|
||||||
color: var(--text-muted);
|
|
||||||
}
|
|
||||||
|
|
||||||
.download-icon {
|
|
||||||
width: 24px;
|
|
||||||
height: 24px;
|
|
||||||
color: var(--text-muted);
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disable card hover for copy cards */
|
|
||||||
#fingerprintCard {
|
|
||||||
cursor: default !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#fingerprintCard:hover {
|
|
||||||
transform: none !important;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div class="container fade-in">
|
|
||||||
<h1 class="slide-down">
|
|
||||||
<span class="icon">
|
|
||||||
<img src="/icon.svg" alt="krzak.org" />
|
|
||||||
</span>
|
|
||||||
Krzak.org - Minecraft
|
|
||||||
</h1>
|
|
||||||
|
|
||||||
<div
|
|
||||||
class="server-status-widget slide-up"
|
|
||||||
style="animation-delay: 0.1s"
|
|
||||||
id="statusWidget"
|
|
||||||
>
|
|
||||||
<div class="loading">
|
|
||||||
<div class="spinner"></div>
|
|
||||||
<span>Loading server status...</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="slide-up" style="animation-delay: 0.2s">
|
|
||||||
<h3>Instrukcja</h3>
|
|
||||||
<ol>
|
|
||||||
<li>Zainstalujcie fabric 1.21.10</li>
|
|
||||||
<li>Zainstalujcie moda AutoModpack</li>
|
|
||||||
<li>
|
|
||||||
Dołączcie na krzak.org i, kiedy o to zapyta, wklejcie
|
|
||||||
tekst z pliku automodpack_fingerprint.txt
|
|
||||||
</li>
|
|
||||||
</ol>
|
|
||||||
<h3>Polecam też dodać nasz resourcepack</h3>
|
|
||||||
<h3>
|
|
||||||
Do skinów polecam ely.by jak ktoś nie ma premium (nie musi)
|
|
||||||
</h3>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
class="fingerprint-widget slide-up"
|
|
||||||
style="animation-delay: 0.3s"
|
|
||||||
id="fingerprintWidget"
|
|
||||||
>
|
|
||||||
<div class="info-card" id="fingerprintCard">
|
|
||||||
<div class="info-label">AutoModpack Fingerprint</div>
|
|
||||||
<div class="info-value-wrapper">
|
|
||||||
<div class="info-value" id="fingerprintValue">
|
|
||||||
3b180a41fe913487c1c86ad79c6dc085d01a272ac2da556f4bf7379ee3a535f8
|
|
||||||
</div>
|
|
||||||
<button
|
|
||||||
class="copy-button"
|
|
||||||
data-copy-target="fingerprintValue"
|
|
||||||
title="Copy to clipboard"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
class="copy-icon"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
>
|
|
||||||
<rect
|
|
||||||
x="9"
|
|
||||||
y="9"
|
|
||||||
width="13"
|
|
||||||
height="13"
|
|
||||||
rx="2"
|
|
||||||
ry="2"
|
|
||||||
></rect>
|
|
||||||
<path
|
|
||||||
d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"
|
|
||||||
></path>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div
|
|
||||||
class="resourcepack-widget slide-up"
|
|
||||||
style="animation-delay: 0.35s"
|
|
||||||
>
|
|
||||||
<a href="/mc/pack.zip" class="resourcepack-link">
|
|
||||||
<svg
|
|
||||||
class="resourcepack-icon"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"
|
|
||||||
></path>
|
|
||||||
<polyline
|
|
||||||
points="3.27 6.96 12 12.01 20.73 6.96"
|
|
||||||
></polyline>
|
|
||||||
<line x1="12" y1="22.08" x2="12" y2="12"></line>
|
|
||||||
</svg>
|
|
||||||
<div>
|
|
||||||
<strong>Download Resource Pack</strong>
|
|
||||||
<span class="resourcepack-desc"
|
|
||||||
>Custom vanillatweaks setup</span
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<svg
|
|
||||||
class="download-icon"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"
|
|
||||||
></path>
|
|
||||||
<polyline points="7 10 12 15 17 10"></polyline>
|
|
||||||
<line x1="12" y1="15" x2="12" y2="3"></line>
|
|
||||||
</svg>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<ul>
|
|
||||||
<li class="slide-up" style="animation-delay: 0.4s">
|
|
||||||
<a href="/">
|
|
||||||
<strong>Back</strong>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="librecounter fade-in" style="animation-delay: 0.75s">
|
|
||||||
<span class="librecounter-text">
|
|
||||||
Indexed by
|
|
||||||
<a
|
|
||||||
href="https://librecounter.org/referer/show"
|
|
||||||
target="_blank"
|
|
||||||
>LibreCounter</a
|
|
||||||
>
|
|
||||||
</span>
|
|
||||||
<a href="https://librecounter.org/referer/show" target="_blank">
|
|
||||||
<img
|
|
||||||
src="https://librecounter.org/counter.svg"
|
|
||||||
referrerpolicy="unsafe-url"
|
|
||||||
alt="LibreCounter"
|
|
||||||
/>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Back to top button -->
|
|
||||||
<button
|
|
||||||
id="back-to-top"
|
|
||||||
class="back-to-top"
|
|
||||||
aria-label="Back to top"
|
|
||||||
title="Back to top"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<polyline points="18 15 12 9 6 15"></polyline>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<script src="/refresh.js"></script>
|
|
||||||
<script src="/animations.js"></script>
|
|
||||||
<script src="/ai-chat.js"></script>
|
|
||||||
<script>
|
|
||||||
// Configuration
|
|
||||||
const SERVER_ADDRESS = "krzak.org";
|
|
||||||
const FINGERPRINT =
|
|
||||||
"3b180a41fe913487c1c86ad79c6dc085d01a272ac2da556f4bf7379ee3a535f8";
|
|
||||||
const REFRESH_INTERVAL = 30000;
|
|
||||||
|
|
||||||
// Single event listener for all copy buttons (event delegation)
|
|
||||||
document.addEventListener("click", function (e) {
|
|
||||||
const copyButton = e.target.closest(".copy-button");
|
|
||||||
if (!copyButton) return;
|
|
||||||
|
|
||||||
const target = copyButton.dataset.copyTarget;
|
|
||||||
const textToCopy =
|
|
||||||
target === "serverAddress" ? SERVER_ADDRESS : FINGERPRINT;
|
|
||||||
|
|
||||||
navigator.clipboard
|
|
||||||
.writeText(textToCopy)
|
|
||||||
.then(() => {
|
|
||||||
// Show success feedback
|
|
||||||
const originalHTML = copyButton.innerHTML;
|
|
||||||
copyButton.innerHTML =
|
|
||||||
'<svg class="copy-icon" viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"></polyline></svg>';
|
|
||||||
copyButton.classList.add("copied");
|
|
||||||
|
|
||||||
setTimeout(() => {
|
|
||||||
copyButton.innerHTML = originalHTML;
|
|
||||||
copyButton.classList.remove("copied");
|
|
||||||
}, 2000);
|
|
||||||
})
|
|
||||||
.catch((err) => console.error("Failed to copy:", err));
|
|
||||||
});
|
|
||||||
|
|
||||||
// Server status functions
|
|
||||||
async function fetchServerStatus() {
|
|
||||||
try {
|
|
||||||
const response = await fetch(
|
|
||||||
`https://api.mcsrvstat.us/3/${SERVER_ADDRESS}`,
|
|
||||||
);
|
|
||||||
return await response.json();
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Error fetching server status:", error);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatMOTD(motd) {
|
|
||||||
if (!motd) return "No MOTD available";
|
|
||||||
if (typeof motd === "object" && motd.clean) {
|
|
||||||
return Array.isArray(motd.clean)
|
|
||||||
? motd.clean.join("\n")
|
|
||||||
: motd.clean;
|
|
||||||
}
|
|
||||||
return Array.isArray(motd) ? motd.join("\n") : motd;
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderStatus(data) {
|
|
||||||
const widget = document.getElementById("statusWidget");
|
|
||||||
|
|
||||||
if (!data || !data.online) {
|
|
||||||
widget.innerHTML = `
|
|
||||||
<div class="status-header">
|
|
||||||
<div class="status-title">
|
|
||||||
<div class="status-indicator offline"></div>
|
|
||||||
Server Status
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="error-message">
|
|
||||||
Server is currently offline or unreachable
|
|
||||||
</div>
|
|
||||||
<div class="last-updated">
|
|
||||||
Last checked: ${new Date().toLocaleTimeString()}
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const playersOnline = data.players?.online || 0;
|
|
||||||
const playersMax = data.players?.max || 0;
|
|
||||||
const version = data.version || "Unknown";
|
|
||||||
const motd = formatMOTD(data.motd);
|
|
||||||
const playersList = data.players?.list || [];
|
|
||||||
|
|
||||||
widget.innerHTML = `
|
|
||||||
<div class="status-header">
|
|
||||||
<div class="status-title">
|
|
||||||
<div class="status-indicator online"></div>
|
|
||||||
Server Status
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="status-info">
|
|
||||||
<div class="info-card">
|
|
||||||
<div class="info-label">Players Online</div>
|
|
||||||
<div class="info-value">${playersOnline} / ${playersMax}</div>
|
|
||||||
${
|
|
||||||
playersList.length > 0
|
|
||||||
? `
|
|
||||||
<div class="players-list">
|
|
||||||
${playersList.slice(0, 10).join(", ")}${playersList.length > 10 ? "..." : ""}
|
|
||||||
</div>
|
|
||||||
`
|
|
||||||
: ""
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
<div class="info-card">
|
|
||||||
<div class="info-label">Version</div>
|
|
||||||
<div class="info-value" style="font-size: 1.1rem;">${version}</div>
|
|
||||||
</div>
|
|
||||||
<div class="info-card" id="serverAddressCard">
|
|
||||||
<div class="info-label">Server Address</div>
|
|
||||||
<div class="info-value-wrapper">
|
|
||||||
<div class="info-value" style="font-size: 1rem;">${SERVER_ADDRESS}</div>
|
|
||||||
<button class="copy-button" data-copy-target="serverAddress" title="Copy to clipboard">
|
|
||||||
<svg class="copy-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
||||||
<rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect>
|
|
||||||
<path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
${
|
|
||||||
motd
|
|
||||||
? `
|
|
||||||
<div class="info-card">
|
|
||||||
<div class="info-label">MOTD</div>
|
|
||||||
<div style="font-family: 'Courier New', monospace; font-size: 0.9rem; line-height: 1.4; color: var(--text-color); white-space: pre-wrap;">${motd}</div>
|
|
||||||
</div>
|
|
||||||
`
|
|
||||||
: ""
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
<div class="last-updated">
|
|
||||||
Last updated: ${new Date().toLocaleTimeString()}
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function updateStatus() {
|
|
||||||
renderStatus(await fetchServerStatus());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initial load and auto-refresh
|
|
||||||
updateStatus();
|
|
||||||
setInterval(updateStatus, REFRESH_INTERVAL);
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
BIN
mc/pack.zip
BIN
mc/pack.zip
Binary file not shown.
72
refresh.js
72
refresh.js
@@ -1,72 +0,0 @@
|
|||||||
(function () {
|
|
||||||
const SSE_PORT = 8765;
|
|
||||||
const RECONNECT_DELAY = 5000; // milliseconds
|
|
||||||
|
|
||||||
let eventSource = null;
|
|
||||||
let reconnectTimer = null;
|
|
||||||
|
|
||||||
function reloadStylesheets() {
|
|
||||||
// Force reload all stylesheets
|
|
||||||
const links = document.querySelectorAll('link[rel="stylesheet"]');
|
|
||||||
links.forEach((link) => {
|
|
||||||
const href = link.href.split("?")[0];
|
|
||||||
link.href = href + "?t=" + new Date().getTime();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function connect() {
|
|
||||||
if (reconnectTimer) {
|
|
||||||
clearTimeout(reconnectTimer);
|
|
||||||
reconnectTimer = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (eventSource) {
|
|
||||||
eventSource.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
const url = `${window.location.protocol}//${window.location.hostname}:${SSE_PORT}/events`;
|
|
||||||
eventSource = new EventSource(url);
|
|
||||||
|
|
||||||
eventSource.onmessage = function (event) {
|
|
||||||
try {
|
|
||||||
const data = JSON.parse(event.data);
|
|
||||||
if (data.type === "reload") {
|
|
||||||
console.log("Repository updated, reloading page...");
|
|
||||||
|
|
||||||
// First reload stylesheets
|
|
||||||
reloadStylesheets();
|
|
||||||
|
|
||||||
// Then hard reload the page after a brief delay
|
|
||||||
setTimeout(() => {
|
|
||||||
window.location.reload(true);
|
|
||||||
}, 100);
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
console.error("Error parsing SSE message:", e);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
eventSource.onerror = function (error) {
|
|
||||||
console.log("SSE connection error, will reconnect...");
|
|
||||||
eventSource.close();
|
|
||||||
// Attempt to reconnect
|
|
||||||
reconnectTimer = setTimeout(connect, RECONNECT_DELAY);
|
|
||||||
};
|
|
||||||
|
|
||||||
eventSource.onopen = function () {
|
|
||||||
console.log("Connected to auto-refresh service");
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (document.readyState === "loading") {
|
|
||||||
document.addEventListener("DOMContentLoaded", connect);
|
|
||||||
} else {
|
|
||||||
connect();
|
|
||||||
}
|
|
||||||
|
|
||||||
window.addEventListener("beforeunload", function () {
|
|
||||||
if (eventSource) {
|
|
||||||
eventSource.close();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})();
|
|
||||||
14
sitemap.xml
14
sitemap.xml
@@ -2,26 +2,22 @@
|
|||||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
<url>
|
<url>
|
||||||
<loc>https://krzak.org/</loc>
|
<loc>https://krzak.org/</loc>
|
||||||
<lastmod>2025-11-19</lastmod>
|
<lastmod>2026-05-05</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://krzak.org/applications.html</loc>
|
<loc>https://krzak.org/applications.html</loc>
|
||||||
<lastmod>2025-11-19</lastmod>
|
<lastmod>2026-05-05</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://krzak.org/contact.html</loc>
|
<loc>https://krzak.org/contact.html</loc>
|
||||||
<lastmod>2025-11-19</lastmod>
|
<lastmod>2026-05-05</lastmod>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://krzak.org/community/</loc>
|
<loc>https://krzak.org/community/</loc>
|
||||||
<lastmod>2026-02-19</lastmod>
|
<lastmod>2026-05-05</lastmod>
|
||||||
</url>
|
|
||||||
<url>
|
|
||||||
<loc>https://krzak.org/discord.html</loc>
|
|
||||||
<lastmod>2026-02-19</lastmod>
|
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://krzak.org/mc.html</loc>
|
<loc>https://krzak.org/mc.html</loc>
|
||||||
<lastmod>2025-11-19</lastmod>
|
<lastmod>2026-05-05</lastmod>
|
||||||
</url>
|
</url>
|
||||||
</urlset>
|
</urlset>
|
||||||
|
|||||||
1371
styles.css
1371
styles.css
File diff suppressed because it is too large
Load Diff
437
thingy.html
437
thingy.html
@@ -1,437 +0,0 @@
|
|||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Krzak.org - Portal</title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<style type="text/css">
|
|
||||||
/* Base Styles */
|
|
||||||
body {
|
|
||||||
background-color: #1a0f3e;
|
|
||||||
color: #ffe8d6;
|
|
||||||
font-family: Verdana, Arial, Helvetica, sans-serif;
|
|
||||||
font-size: 12px;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
/* Scanline effect */
|
|
||||||
background-image:
|
|
||||||
linear-gradient(
|
|
||||||
rgba(18, 16, 16, 0) 50%,
|
|
||||||
rgba(0, 0, 0, 0.25) 50%
|
|
||||||
),
|
|
||||||
linear-gradient(
|
|
||||||
90deg,
|
|
||||||
rgba(255, 0, 0, 0.06),
|
|
||||||
rgba(0, 255, 0, 0.02),
|
|
||||||
rgba(0, 0, 255, 0.06)
|
|
||||||
);
|
|
||||||
background-size:
|
|
||||||
100% 2px,
|
|
||||||
3px 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Layout Container */
|
|
||||||
.main-table {
|
|
||||||
width: 800px;
|
|
||||||
background-color: #2a1a5e;
|
|
||||||
border: 2px solid #f4a261;
|
|
||||||
border-right: 4px solid #c47e45;
|
|
||||||
border-bottom: 4px solid #c47e45;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Links */
|
|
||||||
a {
|
|
||||||
color: #f4a261;
|
|
||||||
text-decoration: none;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: #ffffff;
|
|
||||||
text-decoration: underline;
|
|
||||||
background-color: #8b4789;
|
|
||||||
cursor: help;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Sidebar Styling */
|
|
||||||
.sidebar {
|
|
||||||
background-color: #1f1345;
|
|
||||||
padding: 10px;
|
|
||||||
border-right: 1px solid #f4a261;
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-header {
|
|
||||||
color: #dda15e;
|
|
||||||
font-family: "Courier New", Courier, monospace;
|
|
||||||
font-weight: bold;
|
|
||||||
border-bottom: 1px dashed #dda15e;
|
|
||||||
margin-bottom: 5px;
|
|
||||||
margin-top: 15px;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav-link {
|
|
||||||
display: block;
|
|
||||||
padding: 4px;
|
|
||||||
border-left: 3px solid transparent;
|
|
||||||
}
|
|
||||||
.nav-link:hover {
|
|
||||||
border-left: 3px solid #f4a261;
|
|
||||||
background-color: #2a1a5e;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Main Content Styling */
|
|
||||||
.content {
|
|
||||||
padding: 20px;
|
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
font-family: "Courier New", Courier, monospace;
|
|
||||||
color: #f4a261;
|
|
||||||
font-size: 24px;
|
|
||||||
margin-top: 0;
|
|
||||||
text-shadow: 2px 2px #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The "Window" Box style for sections */
|
|
||||||
.retro-box {
|
|
||||||
border: 2px ridge #8b4789;
|
|
||||||
background-color: #251752;
|
|
||||||
padding: 10px;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.marquee-container {
|
|
||||||
border: 1px inset #f4a261;
|
|
||||||
background: #000000;
|
|
||||||
color: #00ff00;
|
|
||||||
font-family: monospace;
|
|
||||||
padding: 2px;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Pixelated dividers */
|
|
||||||
hr {
|
|
||||||
border: 0;
|
|
||||||
border-bottom: 1px dashed #f4a261;
|
|
||||||
height: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Footer */
|
|
||||||
.footer {
|
|
||||||
font-size: 10px;
|
|
||||||
color: #dda15e;
|
|
||||||
text-align: center;
|
|
||||||
padding-top: 20px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<br />
|
|
||||||
<center>
|
|
||||||
<!-- Main Layout Table -->
|
|
||||||
<table class="main-table" cellpadding="0" cellspacing="0">
|
|
||||||
<tr>
|
|
||||||
<!-- SIDEBAR (Left Column) -->
|
|
||||||
<td width="200" class="sidebar">
|
|
||||||
<center>
|
|
||||||
<img
|
|
||||||
src="/icon.svg"
|
|
||||||
width="80"
|
|
||||||
height="80"
|
|
||||||
alt="Krzak Logo"
|
|
||||||
style="
|
|
||||||
border: 2px solid #f4a261;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
"
|
|
||||||
/>
|
|
||||||
<br />
|
|
||||||
<font size="1">est. 2024</font>
|
|
||||||
</center>
|
|
||||||
|
|
||||||
<span class="nav-header">:: MAIN ::</span>
|
|
||||||
<a href="/" class="nav-link">[ Home ]</a>
|
|
||||||
<a href="/contact" class="nav-link">[ Contact ]</a>
|
|
||||||
<a href="/applications" class="nav-link">[ Apps ]</a>
|
|
||||||
|
|
||||||
<span class="nav-header">:: SERVICES ::</span>
|
|
||||||
<a href="https://fedi.krzak.org" class="nav-link"
|
|
||||||
>Fediverse</a
|
|
||||||
>
|
|
||||||
<a href="https://git.krzak.org" class="nav-link"
|
|
||||||
>Git Repo</a
|
|
||||||
>
|
|
||||||
<a href="https://music.krzak.org" class="nav-link"
|
|
||||||
>Music</a
|
|
||||||
>
|
|
||||||
<a href="https://rss.krzak.org" class="nav-link">RSS</a>
|
|
||||||
|
|
||||||
<span class="nav-header">:: GAME ::</span>
|
|
||||||
<a href="/mc" class="nav-link">Minecraft</a>
|
|
||||||
|
|
||||||
<br /><br />
|
|
||||||
<center>
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
border: 1px inset #8b4789;
|
|
||||||
background: #000;
|
|
||||||
padding: 4px;
|
|
||||||
font-family: monospace;
|
|
||||||
font-size: 10px;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
SERVER STATUS<br />
|
|
||||||
<font id="mc-status-text" color="#ffff00"
|
|
||||||
>CHECKING...</font
|
|
||||||
><br />
|
|
||||||
<span id="mc-players"></span>
|
|
||||||
</div>
|
|
||||||
</center>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<!-- CONTENT (Right Column) -->
|
|
||||||
<td class="content">
|
|
||||||
<!-- Header -->
|
|
||||||
<table width="100%" cellpadding="0" cellspacing="0">
|
|
||||||
<tr>
|
|
||||||
<td><h1>Welcome to Krzak.org</h1></td>
|
|
||||||
<td align="right">
|
|
||||||
<font size="1" color="#dda15e"
|
|
||||||
>Logged in as: Guest</font
|
|
||||||
>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<!-- Marquee -->
|
|
||||||
<div class="marquee-container">
|
|
||||||
<marquee
|
|
||||||
id="system-marquee"
|
|
||||||
scrollamount="4"
|
|
||||||
scrolldelay="100"
|
|
||||||
>
|
|
||||||
++ WELCOME TO THE NETWORK ++ UPDATES: MINECRAFT
|
|
||||||
SERVER 1.21.10 LIVE ++ CHECK OUT THE NEW APPS
|
|
||||||
SECTION ++
|
|
||||||
</marquee>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Hi, welcome to krzak.org. This is my personal corner
|
|
||||||
of the interwebs.
|
|
||||||
<br />
|
|
||||||
Use the navigation on the left to explore my
|
|
||||||
services.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<!-- "Latest News" Box -->
|
|
||||||
<div class="retro-box">
|
|
||||||
<b>:: LATEST NEWS ::</b>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
Added
|
|
||||||
<a href="/applications"
|
|
||||||
>Recommended Applications</a
|
|
||||||
>
|
|
||||||
page.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Updated Minecraft server to Fabric 1.21.10.
|
|
||||||
</li>
|
|
||||||
<li>Fixed RSS feed integration.</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Services Grid (Nested Table) -->
|
|
||||||
<b>:: QUICK LINKS ::</b>
|
|
||||||
<table width="100%" border="0" cellpadding="5">
|
|
||||||
<tr>
|
|
||||||
<td width="33%" align="center">
|
|
||||||
<a href="https://paste.krzak.org">
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
border: 1px solid #f4a261;
|
|
||||||
padding: 5px;
|
|
||||||
margin: 2px;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<b>PASTE</b><br />
|
|
||||||
<font size="1">Opengist</font>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td width="33%" align="center">
|
|
||||||
<a href="https://share.krzak.org">
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
border: 1px solid #f4a261;
|
|
||||||
padding: 5px;
|
|
||||||
margin: 2px;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<b>SHARE</b><br />
|
|
||||||
<font size="1">FilePizza</font>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td width="33%" align="center">
|
|
||||||
<a href="https://link.krzak.org">
|
|
||||||
<div
|
|
||||||
style="
|
|
||||||
border: 1px solid #f4a261;
|
|
||||||
padding: 5px;
|
|
||||||
margin: 2px;
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<b>LINK</b><br />
|
|
||||||
<font size="1">Shlink</font>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<br />
|
|
||||||
<p>
|
|
||||||
If you want an account on any of these, want to
|
|
||||||
suggest something new or get a subdomain, just
|
|
||||||
<a href="mailto:admin@krzak.org">message me</a>.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<div class="footer">
|
|
||||||
<!-- Hidden Counter Image to increment stats -->
|
|
||||||
<img
|
|
||||||
src="https://librecounter.org/counter.svg"
|
|
||||||
referrerpolicy="unsafe-url"
|
|
||||||
width="0"
|
|
||||||
height="0"
|
|
||||||
alt=""
|
|
||||||
style="display: none"
|
|
||||||
/>
|
|
||||||
|
|
||||||
Total Visitors:
|
|
||||||
<b><span id="visitor-count">...</span></b
|
|
||||||
><br />
|
|
||||||
Indexed by
|
|
||||||
<a
|
|
||||||
href="https://librecounter.org/referer/show"
|
|
||||||
target="_blank"
|
|
||||||
>LibreCounter</a
|
|
||||||
>
|
|
||||||
<br />
|
|
||||||
© 2024 Krzak.org | <a href="#">Top of Page</a>
|
|
||||||
<br /><br />
|
|
||||||
<!-- Fake Buttons for aesthetic -->
|
|
||||||
<img
|
|
||||||
src="https://imgs.search.brave.com/a80w-button-placeholder"
|
|
||||||
width="88"
|
|
||||||
height="31"
|
|
||||||
style="
|
|
||||||
background: #8b4789;
|
|
||||||
border: 1px solid #000;
|
|
||||||
"
|
|
||||||
alt="HTML4"
|
|
||||||
/>
|
|
||||||
<img
|
|
||||||
src="https://imgs.search.brave.com/a80w-button-placeholder"
|
|
||||||
width="88"
|
|
||||||
height="31"
|
|
||||||
style="
|
|
||||||
background: #f4a261;
|
|
||||||
border: 1px solid #000;
|
|
||||||
"
|
|
||||||
alt="CSS"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</center>
|
|
||||||
|
|
||||||
<!-- Legacy JavaScript for Functionality -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
// Helper for cross-browser JSON fetching (IE7+ compatible logic)
|
|
||||||
function fetchJSON(url, callback) {
|
|
||||||
var proxyUrl = `https://cors.krzak.org/get?url=${encodeURIComponent(url)}`;
|
|
||||||
var xhr = new XMLHttpRequest();
|
|
||||||
xhr.onreadystatechange = function () {
|
|
||||||
if (xhr.readyState === 4) {
|
|
||||||
if (xhr.status === 200) {
|
|
||||||
try {
|
|
||||||
var data = JSON.parse(xhr.responseText);
|
|
||||||
// Handle double-encoded JSON in the contents field
|
|
||||||
var contents =
|
|
||||||
typeof data.contents === "string"
|
|
||||||
? JSON.parse(data.contents)
|
|
||||||
: data.contents;
|
|
||||||
callback(contents);
|
|
||||||
} catch (e) {
|
|
||||||
console.error("JSON Parse Error:", e);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console.error(
|
|
||||||
"Request failed with status:",
|
|
||||||
xhr.status,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
xhr.open("GET", proxyUrl, true);
|
|
||||||
xhr.setRequestHeader("Accept", "application/json");
|
|
||||||
xhr.send();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 1. Fetch Visitor Count
|
|
||||||
fetchJSON(
|
|
||||||
"https://librecounter.org/krzak.org/siteStats",
|
|
||||||
function (data) {
|
|
||||||
var countEl = document.getElementById("visitor-count");
|
|
||||||
if (countEl && data && data.total) {
|
|
||||||
countEl.innerHTML = data.total;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
// 2. Fetch Minecraft Server Status
|
|
||||||
fetchJSON("https://api.mcsrvstat.us/3/krzak.org", function (data) {
|
|
||||||
var statusText = document.getElementById("mc-status-text");
|
|
||||||
var playersEl = document.getElementById("mc-players");
|
|
||||||
var marquee = document.getElementById("system-marquee");
|
|
||||||
|
|
||||||
if (data.online) {
|
|
||||||
if (statusText) {
|
|
||||||
statusText.innerHTML = "ONLINE";
|
|
||||||
statusText.color = "#00ff00"; // Green
|
|
||||||
}
|
|
||||||
if (playersEl) {
|
|
||||||
playersEl.innerHTML =
|
|
||||||
"[" +
|
|
||||||
data.players.online +
|
|
||||||
"/" +
|
|
||||||
data.players.max +
|
|
||||||
"] Players";
|
|
||||||
}
|
|
||||||
// Update marquee with dynamic info
|
|
||||||
if (marquee) {
|
|
||||||
marquee.innerHTML =
|
|
||||||
"++ SERVER ONLINE: " +
|
|
||||||
data.players.online +
|
|
||||||
" PLAYERS CONNECTED ++ VERSION: " +
|
|
||||||
data.version +
|
|
||||||
" ++ WELCOME TO KRZAK.ORG ++";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (statusText) {
|
|
||||||
statusText.innerHTML = "OFFLINE";
|
|
||||||
statusText.color = "#ff0000"; // Red
|
|
||||||
}
|
|
||||||
if (playersEl) {
|
|
||||||
playersEl.innerHTML = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
Reference in New Issue
Block a user