feat: add notable contributors section

This commit is contained in:
JovannMC 2025-04-26 16:19:15 +03:00
parent 95d57a0427
commit 9036d8cf4f
No known key found for this signature in database
5 changed files with 106 additions and 59 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

View File

@ -5,7 +5,6 @@
import Dropdown from "./Dropdown.svelte"; import Dropdown from "./Dropdown.svelte";
import Tooltip from "../visual/Tooltip.svelte"; import Tooltip from "../visual/Tooltip.svelte";
import ProgressBar from "../visual/ProgressBar.svelte"; import ProgressBar from "../visual/ProgressBar.svelte";
import { fade } from "$lib/animation";
const length = $derived(files.files.length); const length = $derived(files.files.length);
const progress = $derived(files.files.filter((f) => f.result).length); const progress = $derived(files.files.filter((f) => f.result).length);

View File

@ -3,7 +3,7 @@
import { HeartHandshakeIcon } from "lucide-svelte"; import { HeartHandshakeIcon } from "lucide-svelte";
import { GITHUB_URL_VERT } from "$lib/consts"; import { GITHUB_URL_VERT } from "$lib/consts";
let { mainContribs, ghContribs } = $props(); let { mainContribs, notableContribs, ghContribs } = $props();
</script> </script>
{#snippet contributor( {#snippet contributor(
@ -11,8 +11,9 @@
github: string, github: string,
avatar: string, avatar: string,
role?: string, role?: string,
smaller?: boolean,
)} )}
<div class="flex items-center gap-4"> <div class="flex items-center gap-4" class:gap-1={smaller}>
<a <a
href={github} href={github}
target="_blank" target="_blank"
@ -23,14 +24,22 @@
src={avatar} src={avatar}
alt={name} alt={name}
title={name} title={name}
class="{role class="{smaller
? 'w-14 h-14 hoverable-md' ? 'w-12 h-12 hoverable'
: 'w-10 h-10 hoverable-lg'} rounded-full" : role
? 'w-14 h-14 hoverable-md'
: 'w-10 h-10 hoverable-lg'} rounded-full"
/> />
</a> </a>
{#if role} {#if role}
<div class="flex flex-col gap-1"> <div class="flex flex-col gap-1">
<p class="text-xl font-semibold">{name}</p> <p
class="font-semibold"
class:text-xl={!smaller}
class:text-base={smaller}
>
{name}
</p>
<p class="text-sm font-normal text-muted">{role}</p> <p class="text-sm font-normal text-muted">{role}</p>
</div> </div>
{/if} {/if}
@ -60,55 +69,75 @@
</div> </div>
</div> </div>
<!-- GitHub contributors --> <!-- Notable contributors -->
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="flex flex-col gap-1"> <div class="flex flex-col gap-1">
<h2 class="text-base font-bold">GitHub contributors</h2> <h2 class="text-base font-bold">Notable contributors</h2>
{#if ghContribs && ghContribs.length > 0} <div class="flex flex-col gap-2">
<p class="text-base text-muted font-normal"> <p class="text-base text-muted font-normal">
Big <a We'd like to thank these people for their major
class="text-black dynadark:text-white" contributions to VERT.
href="/jpegify">thanks</a
>
to all these people for helping out!
<a
class="text-blue-500 font-normal hover:underline"
href={GITHUB_URL_VERT}
target="_blank"
rel="noopener noreferrer"
>
Want to help too?
</a>
</p> </p>
{:else} <div class="flex flex-col gap-2">
<p class="text-base text-muted font-normal italic"> {#each notableContribs as contrib}
Seems like no one has contributed yet... {@const { name, github, avatar, role } = contrib}
<a {@render contributor(name, github, avatar, role, true)}
class="text-blue-500 font-normal hover:underline" {/each}
href={GITHUB_URL_VERT} </div>
target="_blank" </div>
rel="noopener noreferrer"
>
be the first to contribute!
</a>
</p>
{/if}
</div> </div>
{#if ghContribs && ghContribs.length > 0} <!-- GitHub contributors -->
<div class="flex flex-row flex-wrap gap-2"> <div class="flex flex-col gap-4">
{#each ghContribs as contrib} <div class="flex flex-col gap-1">
{@const { name, github, avatar } = contrib} <h2 class="text-base font-bold">GitHub contributors</h2>
{@render contributor(name, github, avatar)} {#if ghContribs && ghContribs.length > 0}
{/each} <p class="text-base text-muted font-normal">
Big <a
class="text-black dynadark:text-white"
href="/jpegify">thanks</a
>
to all these people for helping out!
<a
class="text-blue-500 font-normal hover:underline"
href={GITHUB_URL_VERT}
target="_blank"
rel="noopener noreferrer"
>
Want to help too?
</a>
</p>
{:else}
<p class="text-base text-muted font-normal italic">
Seems like no one has contributed yet...
<a
class="text-blue-500 font-normal hover:underline"
href={GITHUB_URL_VERT}
target="_blank"
rel="noopener noreferrer"
>
be the first to contribute!
</a>
</p>
{/if}
</div> </div>
{/if}
<h2 class="mt-2 -mb-2">Libraries</h2> {#if ghContribs && ghContribs.length > 0}
<p class="font-normal"> <div class="flex flex-row flex-wrap gap-2">
A big thanks to FFmpeg (audio, video), libvips (images) and Pandoc {#each ghContribs as contrib}
(documents) for maintaining such excellent libraries for so many {@const { name, github, avatar } = contrib}
years. VERT relies on them to provide you with your conversions. {@render contributor(name, github, avatar)}
</p> {/each}
</div> </div>
</Panel> {/if}
<h2 class="mt-2 -mb-2">Libraries</h2>
<p class="font-normal">
A big thanks to FFmpeg (audio, video), libvips (images) and
Pandoc (documents) for maintaining such excellent libraries for
so many years. VERT relies on them to provide you with your
conversions.
</p>
</div>
</div></Panel
>

View File

@ -6,10 +6,12 @@
import avatarNullptr from "$lib/assets/avatars/nullptr.jpg"; import avatarNullptr from "$lib/assets/avatars/nullptr.jpg";
import avatarLiam from "$lib/assets/avatars/liam.jpg"; import avatarLiam from "$lib/assets/avatars/liam.jpg";
import avatarJovannMC from "$lib/assets/avatars/jovannmc.jpg"; import avatarJovannMC from "$lib/assets/avatars/jovannmc.jpg";
import avatarRealmy from "$lib/assets/avatars/realmy.jpg";
import avatarAzurejelly from "$lib/assets/avatars/azurejelly.jpg";
import { GITHUB_API_URL } from "$lib/consts"; import { GITHUB_API_URL } from "$lib/consts";
import { addToast } from "$lib/store/ToastProvider"; import { addToast } from "$lib/store/ToastProvider";
import { dev } from "$app/environment"; // import { dev } from "$app/environment";
import { page } from "$app/state"; // import { page } from "$app/state";
/* interface Donator { /* interface Donator {
name: string; name: string;
@ -47,6 +49,21 @@
}, },
]; ];
const notableContribs: Contributor[] = [
{
name: "azurejelly",
github: "https://github.com/azurejelly",
role: "Maintaining Docker & CI support",
avatar: avatarAzurejelly,
},
{
name: "realmy",
github: "https://github.com/RealmyTheMan",
role: "Former designer & co-founder",
avatar: avatarRealmy,
}
];
let ghContribs: Contributor[] = []; let ghContribs: Contributor[] = [];
onMount(async () => { onMount(async () => {
@ -66,13 +83,15 @@
} }
const allContribs = await response.json(); const allContribs = await response.json();
// Filter out main contributors // Filter out main and notable contributors
const mainContribNames = mainContribs.map((contrib) => const excludedNames = new Set([
contrib.github.split("/").pop(), ...mainContribs.map((c) => c.github.split("/").pop()),
); ...notableContribs.map((c) => c.github.split("/").pop()),
]);
const filteredContribs = allContribs.filter( const filteredContribs = allContribs.filter(
(contrib: { login: string }) => (contrib: { login: string }) =>
!mainContribNames.includes(contrib.login), !excludedNames.has(contrib.login),
); );
// Fetch and cache avatar images as Base64 // Fetch and cache avatar images as Base64
@ -135,7 +154,7 @@
<!-- Resources & Donate to VERT --> <!-- Resources & Donate to VERT -->
<div class="flex flex-col gap-4 flex-1"> <div class="flex flex-col gap-4 flex-1">
<About.Resources /> <About.Resources />
<About.Credits {mainContribs} {ghContribs} /> <About.Credits {mainContribs} {notableContribs} {ghContribs} />
{#if donationsEnabled} {#if donationsEnabled}
<About.Vertd /> <About.Vertd />
{/if} {/if}