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>
|
||||
</a>
|
||||
</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">
|
||||
<a
|
||||
href="https://discord.gg/CY3Zr6baD7"
|
||||
@@ -99,38 +93,12 @@
|
||||
<span>discord.gg/CY3Zr6baD7</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="slide-up" style="animation-delay: 0.25s">
|
||||
<li class="slide-up" style="animation-delay: 0.15s">
|
||||
<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>
|
||||
|
||||
69
contact.html
69
contact.html
@@ -15,40 +15,30 @@
|
||||
</span>
|
||||
Krzak.org
|
||||
</h1>
|
||||
<p class="slide-down">Contact:</p>
|
||||
<ul>
|
||||
<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>
|
||||
<span>@admin:krzak.org</span>
|
||||
<span>@n0va:krzak.org</span>
|
||||
</a>
|
||||
</li>
|
||||
<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>
|
||||
<span>@krzak@fedi.krzak.org</span>
|
||||
<span>@n0va@fedi.krzak.org</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="slide-up" style="animation-delay: 0.15s">
|
||||
<a href="mailto:admin@krzak.org">
|
||||
<a href="mailto:n0va@krzak.org">
|
||||
<strong>Mail</strong>
|
||||
<span>admin@krzak.org</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="slide-up" style="animation-delay: 0.2s">
|
||||
<a href="">
|
||||
<strong>Discord</strong>
|
||||
<span>n0va_bot</span>
|
||||
<span>n0va@krzak.org</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<br />
|
||||
<p class="fade-in" style="animation-delay: 0.25s">Support:</p>
|
||||
<ul>
|
||||
<li class="slide-up" style="animation-delay: 0.3s">
|
||||
<a href="https://liberapay.com/krzak">
|
||||
<strong>Support Krzak.org</strong>
|
||||
<span>Liberapay</span>
|
||||
<li class="slide-up support-row" style="animation-delay: 0.3s">
|
||||
<a href="https://liberapay.com/krzak" class="button">
|
||||
Support Krzak.org
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -62,7 +52,13 @@
|
||||
</ul>
|
||||
|
||||
<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
|
||||
<a
|
||||
href="https://librecounter.org/referer/show"
|
||||
@@ -70,40 +66,7 @@
|
||||
>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>
|
||||
|
||||
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>
|
||||
@@ -1,11 +1,11 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="65.895" height="65.895" viewBox="0 0 65.895 65.895">
|
||||
<g transform="translate(0.0, 4.947499999999998)">
|
||||
|
||||
|
||||
<path fill="#2a1a5e" d="M4.56 51.07 0 44.175 13.43 32.13s9.206-4.666 13.972-4.835c2.139-.076 1.802-6.447 2.815-5.621.27.22 15.366-3.758 19.977-3.55 3.751.17 1.781 3.663 2.028 4.287.708 1.791-12.793 3.684-16.85 5.625-2.767 1.324-1.141 3.899-1.076 4 .508.782-16.906 6.19-16.906 6.19z"/>
|
||||
<path fill="#f4a261" stroke="#dda15e" stroke-width="3" d="M21.395 11.4c0-5.468 4.432-9.9 9.9-9.9 5.467 0 9.9 4.432 9.9 9.9s-4.433 9.9-9.9 9.9c-5.468 0-9.9-4.432-9.9-9.9zm28.4 6.4a7.3 7.3 0 1 1 14.6 0 7.3 7.3 0 0 1-14.6 0zm-29.2 25.9c0-5.965 4.835-10.8 10.8-10.8 5.964 0 10.8 4.835 10.8 10.8 0 5.965-4.836 10.8-10.8 10.8-5.965 0-10.8-4.835-10.8-10.8z"/>
|
||||
<path fill="#8b4789" d="M6.795 29.7c-3.178-4.635-1-15.8-1-15.8s9.021 1.165 12.2 5.8c3.178 4.635 2.2 15.2 2.2 15.2s-10.222-.565-13.4-5.2zm36.8 7.8c-6.831-5.201-4-13.6-4-13.6s7.231-2.554 14 2.6 7.8 14 7.8 14-10.97 2.201-17.8-3z"/>
|
||||
<path fill="#ffe8d6" d="M31.895 5.393c.481.995-.338 2.386-1.83 3.107-1.49.722-3.09.501-3.57-.493-.482-.995.337-2.386 1.829-3.107 1.491-.722 3.09-.501 3.571.493zm25.338 8.56c.265.667-.478 1.588-1.66 2.056-1.18.467-2.352.306-2.616-.362-.265-.667.478-1.588 1.659-2.056 1.18-.468 2.353-.306 2.617.362zm-26.218 23.66c.477.872-.354 2.245-1.857 3.066-1.502.822-3.106.78-3.583-.092-.477-.872.354-2.245 1.856-3.066 1.502-.822 3.107-.78 3.584.092z"/>
|
||||
<path fill="none" stroke="#f4a261" stroke-linecap="round" stroke-width=".5" d="M7.195 16.3s3.909 4.733 5.41 7.277c1.563 2.651 3.79 8.323 3.79 8.323m24.8-5.6s3.5 5.176 6.36 7.172c2.873 2.004 10.84 4.828 10.84 4.828"/>
|
||||
|
||||
|
||||
</g>
|
||||
</svg>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
258
index.html
258
index.html
@@ -69,122 +69,117 @@
|
||||
</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">Hi, welcome to krzak.org</p>
|
||||
<ul>
|
||||
<li class="slide-up" style="animation-delay: 0.05s">
|
||||
<a href="https://search.krzak.org" class="search-link">
|
||||
<strong>Search</strong>
|
||||
<span>OmniSearch</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="slide-up" style="animation-delay: 0.1s">
|
||||
<a href="https://fedi.krzak.org" class="sharkey-link">
|
||||
<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>
|
||||
<span>Gitea</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="slide-up" style="animation-delay: 0.55s">
|
||||
<a href="https://liberapay.com/krzak" class="support-link">
|
||||
<strong>Support</strong>
|
||||
<span>Liberapay</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="slide-up" style="animation-delay: 0.6s">
|
||||
<a href="https://rss.krzak.org">
|
||||
<strong>RSS</strong>
|
||||
<span>Miniflux</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="slide-up" style="animation-delay: 0.65s">
|
||||
<a href="https://paste.krzak.org">
|
||||
<strong>Paste</strong>
|
||||
<span>Opengist</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="slide-up" style="animation-delay: 0.7s">
|
||||
<a href="https://share.krzak.org">
|
||||
<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>
|
||||
<span>Shlink</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="slide-up" style="animation-delay: 0.8s">
|
||||
<a href="/contact.html">
|
||||
<strong>Contact</strong>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="fade-in" style="animation-delay: 0.85s">
|
||||
If you want an account on any of these, want to suggest
|
||||
something new or get a subdomain, just message me
|
||||
</p>
|
||||
<div class="container homepage">
|
||||
<header class="hero">
|
||||
<div class="band">
|
||||
<span class="icon mark">
|
||||
<img src="/icon.svg" alt="krzak.org" />
|
||||
</span>
|
||||
<div class="copy">
|
||||
<h1>Krzak.org</h1>
|
||||
<p class="lead">Hi, welcome to krzak.org</p>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="librecounter fade-in" style="animation-delay: 0.9s">
|
||||
<span class="librecounter-text">
|
||||
<section class="box">
|
||||
<h2>Main services</h2>
|
||||
<ul class="links">
|
||||
<li>
|
||||
<a href="https://git.krzak.org" class="link main">
|
||||
<strong>Git</strong>
|
||||
<span>Gitea</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://chat.krzak.org" class="link main">
|
||||
<strong>Chat</strong>
|
||||
<span>chat.krzak.org</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://fedi.krzak.org" class="link">
|
||||
<strong>Fediverse</strong>
|
||||
<span>Sharkey</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<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>
|
||||
<span>Opengist</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://link.krzak.org" class="link">
|
||||
<strong>Link Shortener</strong>
|
||||
<span>Shlink</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</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>
|
||||
<span>Ways to reach me</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
|
||||
<section class="foot">
|
||||
<p>
|
||||
If you want an account on any of these, want to suggest
|
||||
something new or get a subdomain, just message me
|
||||
</p>
|
||||
<div class="support">
|
||||
<a href="https://liberapay.com/krzak" class="button">
|
||||
Support Krzak.org
|
||||
</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="librecounter">
|
||||
<img
|
||||
src="https://librecounter.org/counter.svg"
|
||||
referrerpolicy="unsafe-url"
|
||||
width="0"
|
||||
alt=""
|
||||
/>
|
||||
<span class="counter">
|
||||
Indexed by
|
||||
<a
|
||||
href="https://librecounter.org/referer/show"
|
||||
@@ -192,40 +187,7 @@
|
||||
>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>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
});
|
||||
})();
|
||||
16
sitemap.xml
16
sitemap.xml
@@ -1,27 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://krzak.org/</loc>
|
||||
<lastmod>2025-11-19</lastmod>
|
||||
<lastmod>2026-05-05</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://krzak.org/applications.html</loc>
|
||||
<lastmod>2025-11-19</lastmod>
|
||||
<lastmod>2026-05-05</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://krzak.org/contact.html</loc>
|
||||
<lastmod>2025-11-19</lastmod>
|
||||
<lastmod>2026-05-05</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://krzak.org/community/</loc>
|
||||
<lastmod>2026-02-19</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://krzak.org/discord.html</loc>
|
||||
<lastmod>2026-02-19</lastmod>
|
||||
<lastmod>2026-05-05</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://krzak.org/mc.html</loc>
|
||||
<lastmod>2025-11-19</lastmod>
|
||||
<lastmod>2026-05-05</lastmod>
|
||||
</url>
|
||||
</urlset>
|
||||
|
||||
1313
styles.css
1313
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