53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
import {formatDistanceToNow, parseJSON, format, parse} from "date-fns";
|
|
|
|
export function friendlyDate(date) {
|
|
return formatDistanceToNow(parseJSON(date), {addSuffix: true});
|
|
}
|
|
|
|
export function readableDate(date) {
|
|
if(!date){
|
|
return "";
|
|
}
|
|
return format(parseJSON(date), "dd MMM yyyy");
|
|
}
|
|
|
|
export function readableDatetime(date) {
|
|
if(!date){
|
|
return "";
|
|
}
|
|
|
|
return format(parseJSON(date), "dd MMM yyyy HH:mm");
|
|
}
|
|
|
|
|
|
export function stripHtml(html = "") {
|
|
let tmp = document.createElement("div");
|
|
tmp.innerHTML = html;
|
|
return tmp.textContent || tmp.innerText || "";
|
|
}
|
|
|
|
|
|
export function randomId(length = 10) {
|
|
return Math.random().toString(36).substring(2, length + 2);
|
|
}
|
|
|
|
export function clickOutside(node) {
|
|
|
|
const handleClick = event => {
|
|
if (node && !node.contains(event.target) && !event.defaultPrevented) {
|
|
node.dispatchEvent(
|
|
new CustomEvent('click_outside', node)
|
|
)
|
|
}
|
|
}
|
|
|
|
document.addEventListener('click', handleClick, true);
|
|
|
|
return {
|
|
destroy() {
|
|
document.removeEventListener('click', handleClick, true);
|
|
}
|
|
}
|
|
}
|
|
|