Welcome to Vanilla Breeze
This bell pulls live notifications from /go/notify/messages — the same contract documented at /docs/concepts/service-contracts/. Static articles like this one are the no-JS / no-backend fallback.
This bell pulls live notifications from /go/notify/messages — the same contract documented at /docs/concepts/service-contracts/. Static articles like this one are the no-JS / no-backend fallback.
How to link a vocabulary concept inline so the popover enhancement and the glossary page both pick it up. First mention in , subsequent mentions plain.
The site has a single glossary generated from site/src/_data/vocabulary.json. When you mention one of those concepts in article prose, link to it. Two things light up:
id="term-{@id}"), so the link is always valid even without JS./js/definition-popover.js, generated at build) fetches /definitions.json on first interaction and shows the definition in a native popover anchored to the term. Modifier-clicks fall through to the glossary page.Three forms, depending on whether the mention is the first defining use, a subsequent reference, or an abbreviation.
<dfn>Wrap the link in <dfn>. The data-concept attribute carries the SKOS @id from vocabulary.json. The href deep-links to the term's anchor on the glossary page so the link is meaningful with no JS.
<p>We use <dfn><a href="/glossary/#term-progressive-enhancement" data-concept="progressive-enhancement">progressive enhancement</a></dfn> to ensure content is available before scripts load.</p>
Plain anchor — no <dfn>. <dfn> marks the defining instance; using it on every mention would be wrong semantically and visually noisy.
<p>This <a href="/glossary/#term-progressive-enhancement" data-concept="progressive-enhancement">progressive enhancement</a> approach also benefits search engine indexing.</p>
<abbr>When you reference a concept by an abbreviation that lives in its skos:altLabel array, wrap the link in <abbr> with title set to the prefLabel. The title tooltip gives sighted hover-readers the expansion; the popover still triggers because the script queries a[data-concept] regardless of wrapper.
<p>The <abbr title="Progressive Enhancement"><a href="/glossary/#term-progressive-enhancement" data-concept="progressive-enhancement">PE</a></abbr> approach pairs well with semantic HTML.</p>
Use <dfn> exactly once per concept per page (the defining mention, regardless of label form). Subsequent mentions are either plain anchors (full label) or <abbr>-wrapped (altLabel/abbreviation).
<dfn> per concept per page. Subsequent mentions on the same page should be plain anchors.<code>, <pre>, or another <a>. Code samples carry their own typography contract; nested anchors are invalid HTML.concepts: [...]. The meta-tag contract already emits <meta name="concept"> + <link rel="tag"> + <link rel="glossary"> automatically.@idOpen site/src/_data/vocabulary.json and search for the concept's pref-label. The @id is the slug-form (e.g. "meta-tag-contract", "data-provenance", "page-info"). The href is always /glossary/#term-{@id} — that's what the build emits and what the popover script expects.
If the concept isn't in the vocabulary yet but should be, add it to vocabulary.json first (see the SKOS shape used by sibling entries) and re-run npm run build. The glossary page, /definitions.json, and head metadata regenerate from that single source.
/definitions.json in sessionStorage under vb:definitions. One fetch per browsing session.Cook ships an auto-link-glossary plugin that scans every docs prose page (/docs/concepts/, /docs/elements/, /docs/attributes/, /docs/patterns/, /docs/integrations/, /docs/recipes/, /docs/snippets/) and wraps vocabulary terms automatically. The manual pattern above still works — author-written mentions always win and suppress auto-linking of that concept anywhere in the page.
prefLabel wraps with <dfn><a data-concept="...">altLabel wraps with <abbr title="prefLabel"><a data-concept="..."><a data-concept="..."><p> / <li> / <td> / <dd> to keep prose readable<a>, <code>, <pre>, <dfn>, <abbr>, <script>, <style>, <template>, <noscript><h1>–<h6>)| Mechanism | Scope | When to use |
|---|---|---|
autolink: false in page frontmatter |
Whole page | Reference pages, the glossary itself, anywhere prose isn't the focus |
data-no-glossary attribute on any element |
That element and all descendants | A specific section where auto-linking would distract |
Manual <a data-concept="..."> anywhere on the page |
That one concept on this page | You want explicit control over where the concept links from |
vocabulary.jsonBy default, prefLabel auto-links and altLabel does not. That keeps short common-word altLabels like “review”, “lens”, or “index” from generating noise. To opt a concept's altLabels in, add a vb:autoLink object:
{ "@id": "changelog", "skos:prefLabel": "changelog", "skos:altLabel": ["release notes"], "vb:autoLink": { "prefLabel": true, "altLabel": true }}
Defaults: prefLabel: true (auto-link the canonical name), altLabel: false (opt-in only). Both fields are optional.
<meta name="concept"><glossary-index> — the wrapper that adds search filter + scroll-spy