Projekt-Tagebuch Blog, Tag 31


coden
Rustikaler, tropischer Arbeitsplatz mit einem Laptop auf einem Holztisch, daneben eine Hängematte.
Daniel Kaser|12. Juni 2024
2 min.
Mittwoch, 12. Juni 2024

Wochen-Ziele:

  • Blog-Projekt-Tagebuch (Mai) in den Blog uploaden

Tages-Ziele:

  • Artikel-View-Count zu jedem Artikel anzeigen
  • Auto-Markdown-Ids
  • Auto-Copy-to-Clipboard

Nice. Heute hab ich mein tägliches Kata so schnell gelöst, dass ich auf die Schnelle noch ein zweites lösen konnte. Danach hab ich mich wieder direkt an meinen Nextjs-Blog gemacht.

Zuerst hab ich den offenen Branch von vorgestern fertig gemacht. Ich hatte alle Link-Komponenten in einen dedizierten Links-Ordner verschoben. Und dort eine Barrel-Datei erstellt. Jetzt musste ich noch einige Importe anpassen. Mit Bedacht, damit es hier nicht wieder zu einem hässlichen ‘os’-Error kommt (siehe letzte Session).

Auto-Markdown-Ids

Danach konnte ich mich daran machen, Headings im Markdown automatisch mit einer id auszustatten, damit man mit Anchor-Links direkt zu ihnen springen kann.

Dafür hab ich zuerst eine Funktion createId() erstellt, die in der CustomStyledMDX beim Kompilieren von MDX zu HTML die children slugified und als id verwendet.

// lib/utils/createId.ts
import { slugify } from "@/lib/utils";

export function createId(children: string | React.ReactNode): string {
  return typeof children === "string" ? slugify(children) : "";
}
// components/CustomStyledMDX.tsx

// ...
export const customComponents: MDXComponents = {
  Image,
  h2: ({ children }) => <h2 id={createId(children)}>{children}</h2>,
  h3: ({ children }) => <h3 id={createId(children)}>{children}</h3>,
  h4: ({ children }) => <h4 id={createId(children)}>{children}</h4>,
  h5: ({ children }) => <h5 id={createId(children)}>{children}</h5>,
  h6: ({ children }) => <h6 id={createId(children)}>{children}</h6>,
  a: (props) => // ...
}
// ...

Jetzt kann ich im Markdown easy geile Anchor-Links erstellen.

[Ich bin ein Anchor-Link](#auto-copy-to-clipboard)

Auto-Copy-to-Clipboard

Angefixt von den geilen automatischen id’s sollte jetzt auch unbedingt eine automatische Copy-to-Clipboard-Funktion für meine Headings her.

Dafür sollte beim Hovern über eine Überschrift erst mal ein Paste-Symbol daneben erscheinen. Beim Klick dann, sollte man den ‘Link kopiert!’ kurz eingeblendet bekommen.

Das hat soweit auch wunderbar funktioniert. Allerdings will ich das Ganze noch refactoren und ein bisschen übersichtlicher gestalten. Mehr dazu dann morgen.

Feedback

Schreib mir!