Bubbles-Stimmen einbetten

Zeige deinen Lesern, wie viele Leute auf Bubbles für deinen Beitrag gestimmt haben. Das Widget rendert als kleiner Textlink unter dem Artikel. Du brauchst dafür eine Zeile HTML und ein Script-Tag.

Standard-Snippet

Füge das an beliebiger Stelle in dein Blog-Template ein, typischerweise am Ende des Artikels:

<div class="bubbles-vote"></div>
<script src="https://bubbles.town/vote.js" defer></script>

Ergebnis:

Minimal-Variante

Eine kompakte Form ohne Label. Eignet sich inline, zum Beispiel neben Autorenname oder Datum:

<div class="bubbles-vote" data-format="minimal"></div>
<script src="https://bubbles.town/vote.js" defer></script>

Ergebnis:

Emoji-Variante

Rendert als reiner Text (eine 🫧-Blase und der Zähler) und erbt Schriftart, Größe und Farbe vom umgebenden Text. Ideal für Afterword-Zeilen oder Fuß-Bylines, wo sich das Widget eher wie Teil des Fließtexts anfühlen soll und nicht wie ein separater Button. Inspiriert von wmprkrs Bear-Blog-Integration.

<div class="bubbles-vote" data-format="emoji"></div>
<script src="https://bubbles.town/vote.js" defer></script>

Ergebnis:

Welche URL wird nachgeschlagen?

In dieser Reihenfolge:

  1. Das data-url="…"-Attribut am Mount-Div, falls gesetzt
  2. Ein Permalink innerhalb des umschließenden <article>-Tags (rel="bookmark", oder irgendein Link, der auf eine spezifischere URL als die aktuelle Seite zeigt)
  3. <link rel="canonical"> im Head der Seite
  4. Die aktuelle location.href

Wenn dein Blog-Template das Widget sowohl auf der Listenseite als auch auf der Detailseite zeigt, ist das explizite Setzen von data-url am zuverlässigsten:

<div class="bubbles-vote" data-url="https://dein-blog.beispiel/posts/mein-artikel"></div>

Was passiert, wenn der Artikel nicht auf Bubbles ist?

Das Widget rendert in diesem Fall überhaupt nichts. Sobald der Beitrag via Feed-Polling importiert wurde, erscheint der Zähler beim nächsten Seitenaufruf.

Styling

Das Widget nutzt zwei CSS-Custom-Properties, die du überschreiben kannst:

.bubbles-vote-btn {
  --bt-fg: #666;        /* Label-Farbe */
  --bt-accent: #2e8a7f; /* Zahl + Dreieck */
}

Du kannst auch die Klassen direkt überschreiben: .bubbles-vote-btn, .bubbles-vote-num, .bubbles-vote-tri.

Datenschutz

Das Widget sendet pro Mount-Punkt einen anonymen GET-Request an bubbles.town/api/vote-count, ohne Cookies. Das Script selbst ist die einzige Drittressource, die geladen wird.

Feste Version mit Subresource Integrity

Das Standard-Snippet lädt vote.js und erhält alle Updates, die wir ausliefern, automatisch. Wenn du das Script stattdessen an eine bestimmte Version binden willst, damit ein kompromittierter Bubbles-Server keinen neuen Code auf deiner Seite ausführen kann, nutze die feste URL unten. Du musst das Snippet dann von Hand aktualisieren, wenn wir eine neue Version veröffentlichen.

<script src="https://bubbles.town/vote-v1.js" defer
  integrity="sha384-iPZ+izwo1AOEa00AnHP7pK0fffeEeeP05nk7pfPCHkmDnyYpi7/hzWJoMUtsJNvl"
  crossorigin="anonymous"></script>