* start work on client side explorer * fix tests * fmt * generic test flag * add prenav hook * add highlight class * make flex more consistent, remove transition * open folders that are prefixes of current path * make mobile look nice * more style fixes
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types"
 | 
						|
import style from "./styles/backlinks.scss"
 | 
						|
import { resolveRelative, simplifySlug } from "../util/path"
 | 
						|
import { i18n } from "../i18n"
 | 
						|
import { classNames } from "../util/lang"
 | 
						|
import OverflowList from "./OverflowList"
 | 
						|
 | 
						|
interface BacklinksOptions {
 | 
						|
  hideWhenEmpty: boolean
 | 
						|
}
 | 
						|
 | 
						|
const defaultOptions: BacklinksOptions = {
 | 
						|
  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>
 | 
						|
        <OverflowList id="backlinks-ul">
 | 
						|
          {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>
 | 
						|
          )}
 | 
						|
        </OverflowList>
 | 
						|
      </div>
 | 
						|
    )
 | 
						|
  }
 | 
						|
 | 
						|
  Backlinks.css = style
 | 
						|
  Backlinks.afterDOMLoaded = OverflowList.afterDOMLoaded("backlinks-ul")
 | 
						|
 | 
						|
  return Backlinks
 | 
						|
}) satisfies QuartzComponentConstructor
 |