mirror of
https://github.com/JonasunderscoreJones/K-Comebacks.git
synced 2025-10-23 09:59:20 +02:00
Compare commits
16 commits
Author | SHA1 | Date | |
---|---|---|---|
e5b3ce76a1 | |||
92c2284e8a | |||
5161aa23d0 | |||
610937910c | |||
4e94fa0566 | |||
af799015a7 | |||
441e3d5dec | |||
b1760b1031 | |||
|
6a99c640b8 | ||
|
b23050cc85 | ||
|
2dd4d557a3 | ||
|
651028bef6 | ||
|
0e4a2e3ed4 | ||
|
e1e70bcfdc | ||
|
1e1c7bc7c6 | ||
|
d5a2e95ee5 |
3 changed files with 720 additions and 497 deletions
1140
package-lock.json
generated
1140
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -1,5 +1,6 @@
|
|||
<script>
|
||||
import { onMount } from "svelte";
|
||||
import { recordRequest } from "./analytics";
|
||||
|
||||
let releases = [];
|
||||
let searchArtist = "";
|
||||
|
@ -13,6 +14,8 @@
|
|||
let releaseTypes = [];
|
||||
let totalPages = 1;
|
||||
let pages = [];
|
||||
let last_update = "Loading...";
|
||||
let loading = "Loading...";
|
||||
|
||||
function sortByColumn(column) {
|
||||
// Sort releases based on the selected column
|
||||
|
@ -36,12 +39,13 @@
|
|||
.includes(searchTitle.toLowerCase());
|
||||
const releaseTypeMatch =
|
||||
selectedRelease === "" ||
|
||||
(release.releaseType === null
|
||||
(release.types === null
|
||||
? "Unknown"
|
||||
: release.releaseType) === selectedRelease;
|
||||
: release.types) === selectedRelease ||
|
||||
release.types.includes(selectedRelease);
|
||||
const dateMatch =
|
||||
(!startDate || new Date(release.date) >= startDate) &&
|
||||
(!endDate || new Date(release.date) <= endDate);
|
||||
(!startDate || new Date(release.date) >= new Date(startDate)) &&
|
||||
(!endDate || new Date(release.date) <= new Date(endDate));
|
||||
return artistMatch && titleMatch && releaseTypeMatch && dateMatch;
|
||||
});
|
||||
|
||||
|
@ -68,20 +72,33 @@
|
|||
}
|
||||
|
||||
onMount(async () => {
|
||||
recordRequest();
|
||||
try {
|
||||
const response = await fetch('https://cdn.jonasjones.dev/api/kcomebacks/data.json');
|
||||
const response = await fetch('https://cdn.jonasjones.dev/api/kcomebacks/rkpop_data.json');
|
||||
//const response = await fetch('/rkpop_data.json')
|
||||
if (response.ok) {
|
||||
releases = await response.json();
|
||||
|
||||
last_update = releases[0].last_update;
|
||||
releases.shift();
|
||||
|
||||
// Extract unique release types from the releases array
|
||||
releaseTypes = Array.from(new Set(releases.map(release => {
|
||||
return release.releaseType === null ? 'Unknown' : release.releaseType;
|
||||
return release.types === null ? 'Unknown' : release.types;
|
||||
})));
|
||||
|
||||
// releaseTypes should be an array of all elements of all the release.types lists of all releases
|
||||
releaseTypes = releaseTypes.flat();
|
||||
|
||||
// eliminate duplicates
|
||||
releaseTypes = [...new Set(releaseTypes)];
|
||||
|
||||
// Sort releases by date from most recent to least recent
|
||||
releases.sort((a, b) => new Date(b.date) - new Date(a.date));
|
||||
|
||||
filterReleases(); // Initial filtering based on default values
|
||||
|
||||
loading = "";
|
||||
} else {
|
||||
console.error('Failed to fetch data:', response.status);
|
||||
}
|
||||
|
@ -91,7 +108,10 @@
|
|||
});
|
||||
</script>
|
||||
|
||||
<title>K-Pop Comebacks</title>
|
||||
|
||||
<div class="container">
|
||||
<a href="https://jonasjones.dev" style="color: white;position:absolute;right:20px;text-decoration:underline" >Homepage -></a>
|
||||
<div class="title-banner">
|
||||
<h1 class="title">K-Comebacks</h1>
|
||||
</div>
|
||||
|
@ -194,6 +214,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<p>Click on the column title to filter by them</p>
|
||||
<p>Last updated: {last_update}</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
|
@ -201,26 +222,28 @@
|
|||
<th on:click={() => sortByColumn("date")}>Date</th>
|
||||
<th on:click={() => sortByColumn("artist")}>Artist</th>
|
||||
<th on:click={() => sortByColumn("title")}>Title</th>
|
||||
<th on:click={() => sortByColumn("releaseType")}>Release Type</th>
|
||||
<th on:click={() => sortByColumn("type")}>Release Types</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each filteredReleases as release}
|
||||
<tr>
|
||||
<!--calculate the release number-->
|
||||
<td>{releases.indexOf(release) + 1}</td>
|
||||
<td>{releases.length - releases.indexOf(release)}</td>
|
||||
<td>{release.date}</td>
|
||||
<td>{release.artist}</td>
|
||||
<td>{release.title}</td>
|
||||
<td
|
||||
>{release.releaseType === null
|
||||
>{release.types === null
|
||||
? "Unknown"
|
||||
: release.releaseType}</td
|
||||
// show the release.types list as a comma separated string
|
||||
: release.types.join(", ")}</td
|
||||
>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
</table>
|
||||
<h1>{loading}</h1>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
|
|
34
src/routes/analytics.js
Normal file
34
src/routes/analytics.js
Normal file
|
@ -0,0 +1,34 @@
|
|||
// Function to record the request with analytics
|
||||
export async function recordRequest() {
|
||||
|
||||
const analyticsData = {
|
||||
timestamp: Date.now(),
|
||||
domain: window.location.hostname,
|
||||
method: 'GET', // Assuming the request method is GET; adjust as necessary
|
||||
path: window.location.pathname,
|
||||
};
|
||||
|
||||
console.log('Recording request:', analyticsData);
|
||||
|
||||
const ANALYTICS_URL = 'https://analytics.jonasjones.dev/requests/record/ipunknown';
|
||||
const ANALYTICS_API_KEY = import.meta.env.VITE_ANALYTICS_API_KEY;
|
||||
|
||||
try {
|
||||
const response = await fetch(ANALYTICS_URL, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': ANALYTICS_API_KEY,
|
||||
},
|
||||
body: JSON.stringify(analyticsData),
|
||||
});
|
||||
|
||||
if (response.ok) {
|
||||
console.log('Request recorded successfully');
|
||||
} else {
|
||||
console.error('Failed to record request:', response.status, await response.text());
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error recording request:', error);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue