I recently came across an interesting Bookmarklet bei Nicolas. It’s meant to make link-blogging easier for anyone with a GitHub-hosted blog. The script isn’t perfect yet, but it inspired me to develop it further.
Here’s my version of the bookmarklet
(function() {
// Funktion zum Erstellen eines "Slug" aus einem Text
const slugify = text => {
let str = text.toString(); // Den Text als Zeichenkette behandeln
str = str.replaceAll("/", " "); // Schrägstriche (/) durch Leerzeichen ersetzen
str = str.normalize("NFD"); // Unicode normalisieren (diakritische Zeichen trennen)
str = str.replace(/[^\w\s-]+/g, ""); // Sonderzeichen entfernen (außer Buchstaben, Zahlen, Leerzeichen, Bindestriche)
str = str.toLowerCase(); // In Kleinbuchstaben umwandeln
str = str.replace(/\s+/g, " "); // Mehrere Leerzeichen auf ein einzelnes reduzieren
str = str.trim(); // Führende und endende Leerzeichen entfernen
str = str.replace(/ +/g, "-"); // Alle Leerzeichen durch Bindestriche ersetzen
return str; // Slug zurückgeben
};
// Titel der aktuellen Seite aus dem Dokument abrufen
let pageTitle = window.document.title;
// Falls ein Text markiert ist, diesen als "linkSelection" setzen, ansonsten leer
let linkSelection = "getSelection" in window ? window.getSelection().toString().trim() : "";
// Inhalt für den Link ermitteln:
// Zuerst den markierten Text verwenden, falls vorhanden, ansonsten eine Meta-Beschreibung,
// oder den ersten Absatz im <main>, <article>, oder <p>-Tag
let linkContent = linkSelection ||
window.document.querySelector("head meta[name=description]")?.content.trim() ||
window.document.querySelector("main p")?.textContent.trim() ||
window.document.querySelector("article p")?.textContent.trim() ||
window.document.querySelector("p")?.textContent.trim();
// Die URL der aktuellen Seite
let linkUrl = window.location.href;
// Eingabeaufforderung für den Link-Titel (Standardwert: Seiten-Titel)
let title = window.prompt("Title of the link?", pageTitle);
if (title !== null) { // Nur fortfahren, wenn der Benutzer einen Titel angegeben hat
// Eingabeaufforderung für den Link-Slug (Standardwert: aus Titel generierter Slug)
let slug = window.prompt("Slug of the link?", slugify(title));
if (slug !== null) { // Nur fortfahren, wenn der Benutzer einen Slug angegeben hat
// Das aktuelle Datum und die Uhrzeit im ISO-Format abrufen und in lesbare Form bringen
const currentDate = (new Date()).toISOString().replace("T", " ").replace(/\.\d{3}Z/, " +00:00");
// Dateiinhalt für den Blogeintrag erstellen
let fileContent = `---\n` +
`date: ${currentDate}\n` +
`title: "${title}"\n` +
`authors: "maik"\n` +
`tags: []\n` +
`---\n\n` +
`[${title}](${linkUrl} "${title}") für ${linkUrl}\n\n` +
`${linkContent ? linkContent.replaceAll("\n", "\n> ") : ""}\n`;
// GitHub-URL für das Erstellen einer neuen Datei zusammenbauen
let githubUrl = `https://github.com/Maik-Wi/blog/new/main/?` +
`filename=${`content/notes/${currentDate.slice(0, 10)}-${slug}-index.md`}` +
`&value=${encodeURIComponent(fileContent)}` +
`&message=${encodeURIComponent(`New link: ${title}`)}`;
// Die URL in einem neuen Fenster öffnen, sodass der Nutzer sie bei GitHub weiterbearbeiten kann
window.open(githubUrl);
}
}
})();
The text was automatically translated from German into English. The German quotations were also translated in sense.
Want to reply?
Send me a note via email and let's start a conversation. You can also follow along via RSS or Mastodon.