UNPKG

vuepress-theme-hope

Version:

A light vuepress theme with tons of features

51 lines 2.39 kB
import { useNow, watchImmediate } from "@vueuse/core"; import { computed, onMounted } from "vue"; import { useRouteLocale, useRoutePath } from "vuepress/client"; const millisecondPerDay = 1000 * 60 * 60 * 24; /** * * @param date - The date to calculate the running time * @param locales - The locales of running time, `:day`, `:hour`, `:minute`, `:second` will be replaced by the corresponding value * @param [preserveContent=false] - Whether to preserve the original content of the footer * * @param date - 计算运行时间的日期 * @param locales - 运行时间的本地化文字, `:day`, `:hour`, `:minute`, `:second` 会被对应的值替换 * @param [preserveContent=false] - 是否保留页脚的原有内容 */ export const setupRunningTimeFooter = (date, locales = { "/": "Running time: :day days :hour hours :minute minutes :second seconds", }, preserveContent = false) => { const initialTimeStamp = (date instanceof Date ? date : new Date(date)).getTime(); let prevTimeText = ""; const routePath = useRoutePath(); const now = useNow(); const routeLocale = useRouteLocale(); const pastedTime = computed(() => { const passedTime = now.value.getTime() - initialTimeStamp; const restDate = new Date(passedTime % millisecondPerDay); return { day: Math.floor(passedTime / millisecondPerDay), hour: restDate.getHours(), minute: restDate.getMinutes(), second: restDate.getSeconds(), }; }); onMounted(() => { watchImmediate([routePath, pastedTime], () => { const footer = document.querySelector(".vp-footer"); if (footer) { const { day, hour, minute, second } = pastedTime.value; const localeText = (locales[routeLocale.value] || locales["/"]) .replace(":day", day.toString()) .replace(":hour", hour.toString()) .replace(":minute", minute.toString()) .replace(":second", second.toString()); footer.innerHTML = `${preserveContent ? `${footer.innerHTML.replace(`<br>${prevTimeText}`, "")}<br>` : ""}${localeText}`; prevTimeText = localeText; } }, { flush: "post" }); }); }; //# sourceMappingURL=footerRunningTime.js.map