| | |
| | | import { QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types" |
| | | import { FullSlug, SimpleSlug, resolveRelative } from "../util/path" |
| | | import { QuartzPluginData } from "../plugins/vfile" |
| | | import { byDateAndAlphabetical } from "./PageList" |
| | |
| | | title?: string |
| | | limit: number |
| | | linkToMore: SimpleSlug | false |
| | | showTags: boolean |
| | | filter: (f: QuartzPluginData) => boolean |
| | | sort: (f1: QuartzPluginData, f2: QuartzPluginData) => number |
| | | } |
| | |
| | | const defaultOptions = (cfg: GlobalConfiguration): Options => ({ |
| | | limit: 3, |
| | | linkToMore: false, |
| | | showTags: true, |
| | | filter: () => true, |
| | | sort: byDateAndAlphabetical(cfg), |
| | | }) |
| | | |
| | | export default ((userOpts?: Partial<Options>) => { |
| | | function RecentNotes({ allFiles, fileData, displayClass, cfg }: QuartzComponentProps) { |
| | | const RecentNotes: QuartzComponent = ({ |
| | | allFiles, |
| | | fileData, |
| | | displayClass, |
| | | cfg, |
| | | }: QuartzComponentProps) => { |
| | | const opts = { ...defaultOptions(cfg), ...userOpts } |
| | | const pages = allFiles.filter(opts.filter).sort(opts.sort) |
| | | const remaining = Math.max(0, pages.length - opts.limit) |
| | |
| | | <Date date={getDate(cfg, page)!} locale={cfg.locale} /> |
| | | </p> |
| | | )} |
| | | <ul class="tags"> |
| | | {tags.map((tag) => ( |
| | | <li> |
| | | <a |
| | | class="internal tag-link" |
| | | href={resolveRelative(fileData.slug!, `tags/${tag}` as FullSlug)} |
| | | > |
| | | #{tag} |
| | | </a> |
| | | </li> |
| | | ))} |
| | | </ul> |
| | | {opts.showTags && ( |
| | | <ul class="tags"> |
| | | {tags.map((tag) => ( |
| | | <li> |
| | | <a |
| | | class="internal tag-link" |
| | | href={resolveRelative(fileData.slug!, `tags/${tag}` as FullSlug)} |
| | | > |
| | | {tag} |
| | | </a> |
| | | </li> |
| | | ))} |
| | | </ul> |
| | | )} |
| | | </div> |
| | | </li> |
| | | ) |