diff --git a/package-lock.json b/package-lock.json
index b21aca6..fd43ec8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,6 +11,7 @@
"@jamescoyle/svelte-icon": "^0.1.1",
"@mdi/js": "^7.4.47",
"animejs": "^3.2.2",
+ "language-map": "^1.5.0",
"svelte2tsx": "^0.7.35"
},
"devDependencies": {
@@ -1139,6 +1140,12 @@
"node": ">=6"
}
},
+ "node_modules/language-map": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/language-map/-/language-map-1.5.0.tgz",
+ "integrity": "sha512-n7gFZpe+DwEAX9cXVTw43i3wiudWDDtSn28RmdnS/HCPr284dQI/SztsamWanRr75oSlKSaGbV2nmWCTzGCoVg==",
+ "license": "MIT"
+ },
"node_modules/locate-character": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
diff --git a/package.json b/package.json
index 4858607..47af24f 100644
--- a/package.json
+++ b/package.json
@@ -24,6 +24,7 @@
"@jamescoyle/svelte-icon": "^0.1.1",
"@mdi/js": "^7.4.47",
"animejs": "^3.2.2",
+ "language-map": "^1.5.0",
"svelte2tsx": "^0.7.35"
}
}
diff --git a/src/lib/components/git.svelte b/src/lib/components/git.svelte
new file mode 100644
index 0000000..87c7b78
--- /dev/null
+++ b/src/lib/components/git.svelte
@@ -0,0 +1,95 @@
+
+
+
{
+ window.location.href = `https://git.etheryo.fr/${repo}`;
+ }}
+ on:keypress={() => {
+ window.location.href = `https://git.etheryo.fr/${repo}`;
+ }}
+>
+ {#if !loading}
+
+
+
+
{get_size(repoSize)}
+
+
{commitNum}
+
+
+
+
{title}
+
+ {#each repoTopics as topic}
+ {topic}
+ {/each}
+
+
+ {#each repoColors as cl}
+
+ {/each}
+
+ {:else}
+
Loading...
+ {/if}
+
diff --git a/src/lib/css/base.css b/src/lib/css/base.css
index dc80160..6b0c57b 100644
--- a/src/lib/css/base.css
+++ b/src/lib/css/base.css
@@ -29,7 +29,7 @@ h2 {
--color-subtext: #413543;
--color-hiddentext: #AA94AD;
--color-background: #F8F1F1;
- --color-code: #ECE6F1;
+ --color-code: #dcd4e2;
--color-pill: #D0D4CA;
--palette-pink: #ad62aa;
@@ -53,8 +53,8 @@ h2 {
--border-max: 2rem;
--profile-content-width-max: 40rem;
--profile-content-width-min: 36rem;
- --content-width: 50rem;
- --content-height: 52rem;
+ --content-width: 60rem;
+ --content-height: 55rem;
--width-min-desktop: 1275px;
--width-mobile: 875px;
diff --git a/src/lib/css/git.css b/src/lib/css/git.css
new file mode 100644
index 0000000..070473e
--- /dev/null
+++ b/src/lib/css/git.css
@@ -0,0 +1,75 @@
+.git-container {
+ background-image: var(--background-light);
+ box-shadow: rgba(79, 50, 93, 0.25) 0px 30px 60px -12px, rgba(0, 0, 0, 0.3) 0px 18px 36px -18px;
+ border-radius: 1rem;
+ width: calc(var(--content-width)/3);
+ height: 10rem;
+ cursor: pointer;
+ overflow: hidden;
+}
+
+.git-container svg {
+ width: 3rem;
+ height: auto;
+ transform: translate(-2px, -8px);
+ color: var(--color-subtext);
+ margin-bottom: 0;
+ padding-bottom: 0;
+}
+
+.git-container h1 {
+ font-family: "JetBrains Mono";
+ font-weight: 800;
+ font-size: 1.4rem;
+ margin: 1rem;
+ margin-top: 0;
+}
+
+.git-commit {
+ margin-left: auto;
+ border-radius: 1rem;
+ margin-right: 0.3rem;
+ transition: var(--transition);
+}
+
+.git-commit:hover {
+ background-color: var(--color-code);
+}
+
+.git-commit svg {
+ transform: translate(0);
+ width: 2rem;
+ margin-left: 0.3rem;
+ margin-right: 0.3rem;
+}
+
+.git-commit p {
+ color: var(--color-subtext);
+ font-family: "JetBrains Mono";
+ margin: 0;
+ margin-left: 0.6rem;
+ user-select: none;
+}
+
+.git-tag span {
+ color: var(--color-text);
+ background-color: var(--color-pill);
+ font-family: "JetBrains Mono";
+ font-weight: 500;
+ font-size: 0.8rem;
+ margin-bottom: 1rem;
+ margin-left: 0.8rem;
+ padding: 0.4rem;
+ border-radius: var(--border-min);
+}
+
+.git-color {
+ height: 1rem;
+ width: 100%;
+ background-color: red;
+}
+
+.git-color > div {
+ height: 100%;
+
+}
\ No newline at end of file
diff --git a/src/lib/ts/load.ts b/src/lib/ts/load.ts
new file mode 100644
index 0000000..1cb11a6
--- /dev/null
+++ b/src/lib/ts/load.ts
@@ -0,0 +1,43 @@
+export async function load_api(url: string): Promise<{
+ data: T | null;
+ error: Error | null;
+}> {
+ let data: T | null = null;
+ let error: Error | null = null;
+
+ try {
+ const res = await fetch(url);
+ if (!res.ok) throw new Error(`Failed to fetch: ${res.status} ${res.statusText}`);
+ data = await res.json();
+ } catch (err) {
+ error = err instanceof Error ? err : new Error('Unknown error');
+ }
+
+ return {
+ data,
+ error,
+ };
+}
+
+export async function getCommitCount(repo: string): Promise<{
+ count: Number | null;
+ error: Error | null;
+}> {
+ let error = null;
+ let pageCount = null;
+
+ try {
+ const res = await fetch(`https://git.etheryo.fr//api/v1/repos/${repo}/commits?limit=1&page=1`);
+ if (!res.ok) throw new Error(`Failed to fetch: ${res.status} ${res.statusText}`);
+ else pageCount = res.headers.get('X-Pagecount');
+ }
+ catch (err) {
+ error = err instanceof Error ? err : new Error('Unknown error');
+ }
+
+ return {
+ count: pageCount ? parseInt(pageCount) : null,
+ error: error,
+ };
+}
+
diff --git a/src/lib/ts/size.ts b/src/lib/ts/size.ts
new file mode 100644
index 0000000..27a487c
--- /dev/null
+++ b/src/lib/ts/size.ts
@@ -0,0 +1,16 @@
+export function get_size(kbytes: number): string {
+ if (kbytes < 1024) {
+ return `${kbytes} KiB`;
+ }
+
+ const units = ["MiB", "GiB", "TiB"];
+ let size = kbytes / 1024;
+ let unitIndex = 0;
+
+ while (size >= 1024 && unitIndex < units.length - 1) {
+ size /= 1024;
+ unitIndex++;
+ }
+
+ return `${Math.round(size)} ${units[unitIndex]}`;
+}
\ No newline at end of file
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 92b4d05..685f67e 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -5,6 +5,7 @@
import CoverImg from "$lib/components/cover-img.svelte";
import Person from "$lib/components/person.svelte";
import Project from "$lib/components/project.svelte";
+ import Git from "$lib/components/git.svelte";
import topics from "$lib/ts/topic.ts";
@@ -57,4 +58,7 @@
{hubjson.lab}
+
+
+