2022-08-04 14:54:22 +05:30
|
|
|
<script lang="ts">
|
2022-08-05 19:31:15 +05:30
|
|
|
import SvelteSeo from "svelte-seo";
|
|
|
|
import Hero from "$lib/Hero.svelte";
|
2022-08-04 14:54:22 +05:30
|
|
|
|
2022-08-05 19:31:15 +05:30
|
|
|
let description: string =
|
|
|
|
"7 idiots, 2 OVH vpses, a BuyVM 1024 Slice, a Sun server and a Hitachi Compute Rack.";
|
|
|
|
import IconMoneyBill from "~icons/fa6-solid/money-bill";
|
2022-08-05 18:16:54 +05:30
|
|
|
|
2022-08-05 19:31:15 +05:30
|
|
|
let announcements: any = [];
|
2022-08-05 18:16:54 +05:30
|
|
|
async function fetchAnnouncements() {
|
|
|
|
const url = `https://segfautils.projectsegfau.lt/api/announcements`;
|
|
|
|
const response = await fetch(url);
|
|
|
|
announcements = await response.json();
|
2022-08-05 19:31:15 +05:30
|
|
|
return announcements;
|
2022-08-05 18:16:54 +05:30
|
|
|
}
|
|
|
|
|
2022-08-05 19:31:15 +05:30
|
|
|
const promise = fetchAnnouncements();
|
2022-08-05 18:16:54 +05:30
|
|
|
|
2022-08-05 19:31:15 +05:30
|
|
|
import IconCircleInfo from "~icons/fa6-solid/circle-info";
|
|
|
|
import IconTriangleExclamation from "~icons/fa6-solid/triangle-exclamation";
|
|
|
|
|
|
|
|
import dayjs from "dayjs";
|
2022-08-04 14:54:22 +05:30
|
|
|
</script>
|
|
|
|
|
2022-08-05 19:31:15 +05:30
|
|
|
<SvelteSeo title="Home" {description} />
|
|
|
|
|
|
|
|
<Hero
|
|
|
|
title="Project Segfault"
|
|
|
|
description="Open source development and hosted services"
|
|
|
|
marginTop="7"
|
|
|
|
>
|
|
|
|
<div class="buttons">
|
|
|
|
<a href="https://instances.projectsegfau.lt/">Explore our services</a>
|
|
|
|
<a href="/projects">Explore our projects</a>
|
|
|
|
<a href="/donate"><IconMoneyBill /> Donate</a>
|
|
|
|
</div>
|
2022-08-05 18:16:54 +05:30
|
|
|
</Hero>
|
2022-08-04 14:54:22 +05:30
|
|
|
|
2022-08-05 18:16:54 +05:30
|
|
|
<div class="announcements">
|
2022-08-05 19:31:15 +05:30
|
|
|
{#await promise}
|
|
|
|
<span />
|
|
|
|
{:then}
|
|
|
|
<div class="announcement-container">
|
|
|
|
<div class="announcement">
|
|
|
|
<div class="general">
|
|
|
|
{#if announcements.severity === "info"}
|
|
|
|
<IconCircleInfo />
|
|
|
|
{:else}
|
|
|
|
<IconTriangleExclamation />
|
|
|
|
{/if}
|
|
|
|
<span>
|
2022-08-06 13:05:08 +05:30
|
|
|
{dayjs.unix(announcements.created).format(
|
|
|
|
"DD/MM/YYYY HH:mm"
|
|
|
|
)}
|
2022-08-05 19:31:15 +05:30
|
|
|
</span>
|
|
|
|
</div>
|
|
|
|
<div class="title">
|
|
|
|
<h1>{announcements.title}</h1>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="read-more">
|
|
|
|
<a href={announcements.link}>Read more...</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
{:catch}
|
|
|
|
<span />
|
|
|
|
{/await}
|
2022-08-05 18:16:54 +05:30
|
|
|
</div>
|
2022-08-04 14:54:22 +05:30
|
|
|
|
2022-08-05 19:31:15 +05:30
|
|
|
{#if announcements.severity === "info"}
|
|
|
|
<style>
|
|
|
|
.announcement {
|
|
|
|
background-color: #8caaee;
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
{:else if announcements.severity === "low"}
|
|
|
|
<style>
|
|
|
|
.announcement {
|
|
|
|
background-color: #a6d189;
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
{:else if announcements.severity === "medium"}
|
|
|
|
<style>
|
|
|
|
.announcement {
|
|
|
|
background-color: #e5c890;
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
{:else if announcements.severity === "high"}
|
|
|
|
<style>
|
|
|
|
.announcement {
|
|
|
|
background-color: #e78284;
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
{/if}
|
2022-08-05 18:16:54 +05:30
|
|
|
|
|
|
|
<style>
|
2022-08-05 19:31:15 +05:30
|
|
|
.buttons {
|
|
|
|
display: flex;
|
|
|
|
flex-direction: row;
|
|
|
|
justify-content: center;
|
|
|
|
align-items: center;
|
|
|
|
gap: 1rem;
|
|
|
|
margin: 1rem;
|
|
|
|
}
|
2022-08-04 21:20:02 +05:30
|
|
|
|
2022-08-05 19:31:15 +05:30
|
|
|
@media screen and (max-width: 452px) {
|
|
|
|
.buttons {
|
|
|
|
flex-direction: column;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.buttons a {
|
|
|
|
text-decoration: none;
|
2022-08-06 18:34:03 +05:30
|
|
|
background-color: var(--accent);
|
2022-08-05 19:31:15 +05:30
|
|
|
padding: 8px 1em 8px 1em;
|
|
|
|
color: var(--primary);
|
|
|
|
border-radius: 10px;
|
|
|
|
transition: filter 0.25s;
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
gap: 4px;
|
|
|
|
}
|
|
|
|
|
|
|
|
.buttons a:hover {
|
|
|
|
filter: brightness(125%);
|
|
|
|
}
|
|
|
|
|
|
|
|
.announcement-container {
|
|
|
|
display: flex;
|
|
|
|
justify-content: center;
|
|
|
|
margin-top: 4rem;
|
|
|
|
}
|
|
|
|
|
|
|
|
.announcement {
|
2022-08-06 18:34:03 +05:30
|
|
|
color: #252525 !important;
|
2022-08-05 19:31:15 +05:30
|
|
|
padding: 2rem 1rem;
|
|
|
|
border-radius: 10px;
|
|
|
|
width: fit-content;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
}
|
2022-08-05 18:16:54 +05:30
|
|
|
|
2022-08-05 19:31:15 +05:30
|
|
|
.announcement a {
|
2022-08-06 18:34:03 +05:30
|
|
|
color: #252525;
|
2022-08-05 19:31:15 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
.announcement .general {
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
gap: 8px;
|
|
|
|
}
|
|
|
|
</style>
|