2023-08-10 03:56:12 +00:00
|
|
|
import API from "./API";
|
|
|
|
import TimeUtility from "./TimeUtility";
|
2023-08-10 13:19:11 +00:00
|
|
|
import UI from "./UI";
|
2023-08-10 03:56:12 +00:00
|
|
|
|
2023-08-10 13:36:51 +00:00
|
|
|
declare const Handlebars: any;
|
2023-08-04 11:55:16 +00:00
|
|
|
|
|
|
|
(() => {
|
2023-08-10 13:19:11 +00:00
|
|
|
const blogPostContainer = UI.blogPostContainer;
|
2023-08-10 03:56:12 +00:00
|
|
|
if (blogPostContainer) {
|
2023-08-10 13:36:51 +00:00
|
|
|
const template = Handlebars.compile(UI.blogPostTemplate.innerHTML);
|
2023-08-10 03:56:12 +00:00
|
|
|
API.getBlogPostCount().then(async (count) => {
|
|
|
|
for (let i = 0; i < count; i++) {
|
|
|
|
const posts = await API.getBlogPosts(i, 5);
|
|
|
|
for (const post of posts) {
|
|
|
|
const author = await API.getAuthor(post.authorId);
|
2023-08-10 15:18:24 +00:00
|
|
|
const card = UI.createBlogPostCard(template, post, author);
|
2023-08-10 03:56:12 +00:00
|
|
|
blogPostContainer.appendChild(card);
|
2023-08-10 14:31:51 +00:00
|
|
|
UI.updateUI(card);
|
2023-08-10 03:56:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
i += 4;
|
|
|
|
}
|
2023-08-10 03:57:17 +00:00
|
|
|
|
2023-08-10 15:14:30 +00:00
|
|
|
document.body.appendChild(UI.createDisqusCounterScript());
|
|
|
|
|
2023-08-10 13:32:56 +00:00
|
|
|
const spinner = document.querySelector("#blog-loading-spinner");
|
2023-08-10 03:56:12 +00:00
|
|
|
if (spinner) {
|
|
|
|
spinner.classList.add("removed");
|
|
|
|
setTimeout(() => spinner.remove(), 1100);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2023-08-10 14:15:06 +00:00
|
|
|
UI.updateUI();
|
2023-08-08 01:10:17 +00:00
|
|
|
|
2023-08-10 00:49:09 +00:00
|
|
|
const timestamps = document.querySelectorAll("span[data-timestamp][data-format]");
|
|
|
|
timestamps.forEach((timestamp) => {
|
|
|
|
const seconds = parseInt(timestamp.getAttribute("data-timestamp"));
|
|
|
|
const format = timestamp.getAttribute("data-format");
|
|
|
|
const date = new Date(seconds * 1000);
|
|
|
|
|
|
|
|
const shortTimeString = date.toLocaleTimeString([], {hour: "2-digit", minute: "2-digit"});
|
|
|
|
const shortDateString = date.toLocaleDateString([], {day: "2-digit", month: "2-digit", year: "numeric"});
|
|
|
|
const longTimeString = date.toLocaleTimeString([], {hour: "2-digit", minute: "2-digit", second: "2-digit"});
|
|
|
|
const longDateString = date.toLocaleDateString([], {day: "numeric", month: "long", year: "numeric"});
|
|
|
|
const weekday = date.toLocaleString([], {weekday: "long"});
|
|
|
|
timestamp.setAttribute("title", `${weekday}, ${longDateString} ${shortTimeString}`);
|
|
|
|
|
|
|
|
switch (format) {
|
|
|
|
case "t":
|
|
|
|
timestamp.textContent = shortTimeString;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "T":
|
|
|
|
timestamp.textContent = longTimeString;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "d":
|
|
|
|
timestamp.textContent = shortDateString;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "D":
|
|
|
|
timestamp.textContent = longDateString;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "f":
|
|
|
|
timestamp.textContent = `${longDateString} at ${shortTimeString}`
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "F":
|
|
|
|
timestamp.textContent = `${weekday}, ${longDateString} at ${shortTimeString}`
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "R":
|
|
|
|
setInterval(() => {
|
2023-08-10 03:57:17 +00:00
|
|
|
timestamp.textContent = TimeUtility.formatRelativeTimestamp(date);
|
2023-08-10 00:49:09 +00:00
|
|
|
}, 1000);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
});
|
2023-08-04 11:55:16 +00:00
|
|
|
})();
|