| | |
| | | import { FullSlug, resolveRelative } from "../util/path" |
| | | import { QuartzPluginData } from "../plugins/vfile" |
| | | import { Date } from "./Date" |
| | | import { Date, getDate } from "./Date" |
| | | import { QuartzComponentProps } from "./types" |
| | | import { GlobalConfiguration } from "../cfg" |
| | | |
| | | export function byDateAndAlphabetical(f1: QuartzPluginData, f2: QuartzPluginData): number { |
| | | if (f1.dates && f2.dates) { |
| | | // sort descending by last modified |
| | | return f2.dates.modified.getTime() - f1.dates.modified.getTime() |
| | | } else if (f1.dates && !f2.dates) { |
| | | // prioritize files with dates |
| | | return -1 |
| | | } else if (!f1.dates && f2.dates) { |
| | | return 1 |
| | | export function byDateAndAlphabetical( |
| | | cfg: GlobalConfiguration, |
| | | ): (f1: QuartzPluginData, f2: QuartzPluginData) => number { |
| | | return (f1, f2) => { |
| | | if (f1.dates && f2.dates) { |
| | | // sort descending |
| | | return getDate(cfg, f2)!.getTime() - getDate(cfg, f1)!.getTime() |
| | | } else if (f1.dates && !f2.dates) { |
| | | // prioritize files with dates |
| | | return -1 |
| | | } else if (!f1.dates && f2.dates) { |
| | | return 1 |
| | | } |
| | | |
| | | // otherwise, sort lexographically by title |
| | | const f1Title = f1.frontmatter?.title.toLowerCase() ?? "" |
| | | const f2Title = f2.frontmatter?.title.toLowerCase() ?? "" |
| | | return f1Title.localeCompare(f2Title) |
| | | } |
| | | |
| | | // otherwise, sort lexographically by title |
| | | const f1Title = f1.frontmatter?.title.toLowerCase() ?? "" |
| | | const f2Title = f2.frontmatter?.title.toLowerCase() ?? "" |
| | | return f1Title.localeCompare(f2Title) |
| | | } |
| | | |
| | | type Props = { |
| | | limit?: number |
| | | } & QuartzComponentProps |
| | | |
| | | export function PageList({ fileData, allFiles, limit }: Props) { |
| | | let list = allFiles.sort(byDateAndAlphabetical) |
| | | export function PageList({ cfg, fileData, allFiles, limit }: Props) { |
| | | let list = allFiles.sort(byDateAndAlphabetical(cfg)) |
| | | if (limit) { |
| | | list = list.slice(0, limit) |
| | | } |
| | |
| | | <div class="section"> |
| | | {page.dates && ( |
| | | <p class="meta"> |
| | | <Date date={page.dates.modified} /> |
| | | <Date date={getDate(cfg, page)!} /> |
| | | </p> |
| | | )} |
| | | <div class="desc"> |