# Del på Mastodon frå Obsidian Publish
Eg har ein liten «Del på Mastodon»-knapp nedst på kvar side her på markus.plus no.
Obsidian Publish støttar ei fil som heiter `publish.js` i rota av vaultet din. Ho blir lasta inn på kvar einaste side, og du kan bruka ho til å kjøra JavaScript. Det krev at du har eit eige domene.
Mastodon lanserte nyleg [share.joinmastodon.org](https://share.joinmastodon.org) for å laga delingslenkjer. Det er ein open teneste som sender deg til din eigen Mastodon-instans med ein ferdigskriven tut. Teksten eg set inn er tittelen på sida og URL-en, slik: `Tittel - https://markus.plus/side`.
Sidan Obsidian Publish er ein SPA (single-page app) og lastar inn innhald utan å lasta heile sida på nytt, måtte eg bruka ein `MutationObserver` for å oppdaga når nytt innhald dukkar opp — og nullstilla knappen kvar gong URL-en endrar seg. Tittelen hentar eg frå `document.title`, som Obsidian Publish alltid held oppdatert ved navigasjon. Formatet er `Sidetittel - Markus+`, så eg striper suffixet for å få ein rein tittel.
Her er koden du kan kopiera inn i di eiga `publish.js`:
```javascript
function insertMastodonShareButton() {
const footer = document.querySelector(".mod-footer.mod-ui");
if (!footer) return;
if (footer.querySelector(".mastodon-share-btn")) return;
const pageUrl = window.location.href;
// document.title er "Sidetittel - Nettstadens namn" — strip suffixet
const title = document.title.replace(/\s*-\s*[^-]+$/, "").trim() || document.title;
const shareText = encodeURIComponent(`${title} - ${pageUrl}`);
const shareUrl = `https://share.joinmastodon.org/#text=${shareText}`;
const wrapper = document.createElement("div");
wrapper.className = "mastodon-share-btn";
wrapper.style.cssText = "text-align:left; padding:2rem 0 1rem 0;";
const a = document.createElement("a");
a.href = shareUrl;
a.target = "_blank";
a.rel = "noopener";
a.style.cssText = "display:inline-flex; align-items:center; gap:10px; background:#6364ff; color:#fff; text-decoration:none; font-size:16px; font-weight:500; padding:8px 16px 8px 20px; border-radius:999px;";
const label = document.createTextNode("Del på Mastodon ");
const img = document.createElement("img");
img.src = "https://joinmastodon.org/logos/logo-purple.svg";
img.style.cssText = "width:24px; height:24px; background:#fff; border-radius:50%; padding:3px;";
img.alt = "Mastodon";
a.appendChild(label);
a.appendChild(img);
wrapper.appendChild(a);
footer.appendChild(wrapper);
}
function removeButton() {
document.querySelector(".mod-footer.mod-ui .mastodon-share-btn")?.remove();
}
let lastUrl = location.href;
let lastTitle = document.title;
new MutationObserver(() => {
const currentUrl = location.href;
const currentTitle = document.title;
if (currentUrl !== lastUrl || currentTitle !== lastTitle) {
lastUrl = currentUrl;
lastTitle = currentTitle;
removeButton();
}
const footer = document.querySelector(".mod-footer.mod-ui");
if (footer && !footer.querySelector(".mastodon-share-btn")) {
insertMastodonShareButton();
}
}).observe(document.body, { childList: true, subtree: true });
```
Legg fila i rota av vault-en, og publiser ho. Sidan `.js`-filer ikkje syner i Obsidian-appen, må du leggja ho direkte i vault-mappa di med Finder eller Utforskar, så dukkar ho opp i publiseringsdialogens filliste.
Vil du berre ha hjelp til å byggja delings-URL-en og setja saman teksten sjølv, er her ein meir kompakt variant:
```javascript
function getMastodonShareUrl() {
const url = window.location.href;
const title = document.title.replace(/\s*-\s*[^-]+$/, "").trim() || document.title;
return "https://share.joinmastodon.org/#text=" + encodeURIComponent(`${title} - ${url}`);
}
```
Kall `getMastodonShareUrl()` der du treng lenkja — i ein knapp, eit ikon, eller kva du vil.