helper scripts
This commit is contained in:
parent
06d84f6d6e
commit
753fbc76b7
|
@ -0,0 +1,50 @@
|
||||||
|
/**
|
||||||
|
* Formats a date string into a human-readable format.
|
||||||
|
* @param date - The date string to format.
|
||||||
|
* @returns A string representing the formatted date, or an empty string if the input is invalid.
|
||||||
|
*/
|
||||||
|
export const formatDate = (date: string) => {
|
||||||
|
try {
|
||||||
|
const d = new Date(date);
|
||||||
|
return `${d.toLocaleString('default', {
|
||||||
|
month: 'long'
|
||||||
|
})} ${d.getDate()}, ${d.getFullYear()}`;
|
||||||
|
} catch (e) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes a string and returns a beautified version of it.
|
||||||
|
* @param str The input string to be beautified.
|
||||||
|
* @returns The beautified string.
|
||||||
|
*/
|
||||||
|
export const stringToBeautifiedFragment = (str = '') =>
|
||||||
|
(str || '').toLocaleLowerCase().replace(/\s/g, '-').replace(/\?/g, '').replace(/,/g, '');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the trailing slash from a given string.
|
||||||
|
* @param site - The string to remove the trailing slash from.
|
||||||
|
* @returns The string without the trailing slash.
|
||||||
|
*/
|
||||||
|
export const removeTrailingSlash = (site: string) => {
|
||||||
|
return site.replace(/\/$/, '');
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======= MARKDOWN PARSER ========
|
||||||
|
|
||||||
|
|
||||||
|
// https://github.com/jonschlinkert/gray-matter
|
||||||
|
import matter from 'gray-matter';
|
||||||
|
// https://github.com/markedjs/marked
|
||||||
|
import marked from 'marked';
|
||||||
|
|
||||||
|
export function parseMarkdown<T>(content: string): { frontmatter: T; content: string } {
|
||||||
|
const { data, content: rawContent } = matter(content);
|
||||||
|
const markdownContent = marked(rawContent);
|
||||||
|
return {
|
||||||
|
frontmatter: data as T,
|
||||||
|
content: markdownContent,
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,20 +0,0 @@
|
||||||
"use strict";
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
function convertMinutesToHours(minutes) {
|
|
||||||
try {
|
|
||||||
var hours = Math.floor(minutes / 60);
|
|
||||||
var mins = minutes % 60;
|
|
||||||
if (hours) {
|
|
||||||
console.log("".concat(hours, "h ").concat(mins, "m"));
|
|
||||||
return "".concat(hours, "h ").concat(mins, "m");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
console.log("".concat(mins, "m"));
|
|
||||||
return "".concat(mins, "m");
|
|
||||||
}
|
|
||||||
catch (error) {
|
|
||||||
console.error("I don't think that's time: ".concat(error));
|
|
||||||
process.exit(1); // Exit with non-zero code to signal failure
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.default = convertMinutesToHours;
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
/**
|
||||||
|
* Scrolls the page to the nearest element matching the given selector.
|
||||||
|
* @param selector - The CSS selector of the element to scroll to.
|
||||||
|
*/
|
||||||
|
export const scrollIntoView = (selector: string) => {
|
||||||
|
const scrollToElement = document.querySelector(selector);
|
||||||
|
|
||||||
|
if (!scrollToElement) return;
|
||||||
|
|
||||||
|
const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');
|
||||||
|
|
||||||
|
scrollToElement.scrollIntoView({
|
||||||
|
block: 'nearest',
|
||||||
|
inline: 'start',
|
||||||
|
behavior: mediaQuery.matches ? 'auto' : 'smooth'
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scrolls to the first element that matches the given selector within the provided element.
|
||||||
|
* @param element The element to search within.
|
||||||
|
* @param selector The selector to match against.
|
||||||
|
*/
|
||||||
|
export const scrollToElement = async (element: HTMLElement, selector: string) => {
|
||||||
|
const firstElement: HTMLElement | null = element.querySelector(selector);
|
||||||
|
if (!firstElement) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
firstElement.scrollIntoView({
|
||||||
|
behavior: 'smooth'
|
||||||
|
});
|
||||||
|
};
|
Loading…
Reference in New Issue