feat(backlinks): hide by default when empty (#1674)
Co-authored-by: Aaron Pham <Aaronpham0103@gmail.com>
This commit is contained in:
		
							parent
							
								
									7533d504dc
								
							
						
					
					
						commit
						05e6f05a50
					
				| @ -9,6 +9,7 @@ A backlink for a note is a link from another note to that note. Links in the bac | |||||||
| ## Customization | ## Customization | ||||||
| 
 | 
 | ||||||
| - Removing backlinks: delete all usages of `Component.Backlinks()` from `quartz.layout.ts`. | - Removing backlinks: delete all usages of `Component.Backlinks()` from `quartz.layout.ts`. | ||||||
|  | - Hide when empty: hide `Backlinks` if given page doesn't contain any backlinks (default to `true`). To disable this, use `Component.Backlinks({ hideWhenEmpty: false })`. | ||||||
| - Component: `quartz/components/Backlinks.tsx` | - Component: `quartz/components/Backlinks.tsx` | ||||||
| - Style: `quartz/components/styles/backlinks.scss` | - Style: `quartz/components/styles/backlinks.scss` | ||||||
| - Script: `quartz/components/scripts/search.inline.ts` | - Script: `quartz/components/scripts/search.inline.ts` | ||||||
|  | |||||||
| @ -4,33 +4,49 @@ import { resolveRelative, simplifySlug } from "../util/path" | |||||||
| import { i18n } from "../i18n" | import { i18n } from "../i18n" | ||||||
| import { classNames } from "../util/lang" | import { classNames } from "../util/lang" | ||||||
| 
 | 
 | ||||||
| const Backlinks: QuartzComponent = ({ | interface BacklinksOptions { | ||||||
|   fileData, |   hideWhenEmpty: boolean | ||||||
|   allFiles, |  | ||||||
|   displayClass, |  | ||||||
|   cfg, |  | ||||||
| }: QuartzComponentProps) => { |  | ||||||
|   const slug = simplifySlug(fileData.slug!) |  | ||||||
|   const backlinkFiles = allFiles.filter((file) => file.links?.includes(slug)) |  | ||||||
|   return ( |  | ||||||
|     <div class={classNames(displayClass, "backlinks")}> |  | ||||||
|       <h3>{i18n(cfg.locale).components.backlinks.title}</h3> |  | ||||||
|       <ul class="overflow"> |  | ||||||
|         {backlinkFiles.length > 0 ? ( |  | ||||||
|           backlinkFiles.map((f) => ( |  | ||||||
|             <li> |  | ||||||
|               <a href={resolveRelative(fileData.slug!, f.slug!)} class="internal"> |  | ||||||
|                 {f.frontmatter?.title} |  | ||||||
|               </a> |  | ||||||
|             </li> |  | ||||||
|           )) |  | ||||||
|         ) : ( |  | ||||||
|           <li>{i18n(cfg.locale).components.backlinks.noBacklinksFound}</li> |  | ||||||
|         )} |  | ||||||
|       </ul> |  | ||||||
|     </div> |  | ||||||
|   ) |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Backlinks.css = style | const defaultOptions: BacklinksOptions = { | ||||||
| export default (() => Backlinks) satisfies QuartzComponentConstructor |   hideWhenEmpty: true, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default ((opts?: Partial<BacklinksOptions>) => { | ||||||
|  |   const options: BacklinksOptions = { ...defaultOptions, ...opts } | ||||||
|  | 
 | ||||||
|  |   const Backlinks: QuartzComponent = ({ | ||||||
|  |     fileData, | ||||||
|  |     allFiles, | ||||||
|  |     displayClass, | ||||||
|  |     cfg, | ||||||
|  |   }: QuartzComponentProps) => { | ||||||
|  |     const slug = simplifySlug(fileData.slug!) | ||||||
|  |     const backlinkFiles = allFiles.filter((file) => file.links?.includes(slug)) | ||||||
|  |     if (options.hideWhenEmpty && backlinkFiles.length == 0) { | ||||||
|  |       return null | ||||||
|  |     } | ||||||
|  |     return ( | ||||||
|  |       <div class={classNames(displayClass, "backlinks")}> | ||||||
|  |         <h3>{i18n(cfg.locale).components.backlinks.title}</h3> | ||||||
|  |         <ul class="overflow"> | ||||||
|  |           {backlinkFiles.length > 0 ? ( | ||||||
|  |             backlinkFiles.map((f) => ( | ||||||
|  |               <li> | ||||||
|  |                 <a href={resolveRelative(fileData.slug!, f.slug!)} class="internal"> | ||||||
|  |                   {f.frontmatter?.title} | ||||||
|  |                 </a> | ||||||
|  |               </li> | ||||||
|  |             )) | ||||||
|  |           ) : ( | ||||||
|  |             <li>{i18n(cfg.locale).components.backlinks.noBacklinksFound}</li> | ||||||
|  |           )} | ||||||
|  |         </ul> | ||||||
|  |       </div> | ||||||
|  |     ) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   Backlinks.css = style | ||||||
|  | 
 | ||||||
|  |   return Backlinks | ||||||
|  | }) satisfies QuartzComponentConstructor | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user