@celine/bibhtml
@celine/bibhtml is a Web
Components-based referencing system for HTML documents. It aims to provide a similar user experience to
referencing in LaTeX/BibTeX
@celine/bibhtml takes significant inspiration from @citation-js/replacer, References Web Component
| GitHub | MaxwellBo/ |
License | MIT |
|---|---|---|---|
| JSR | jsr.io/ |
Version | 3.16.0, |
Installation
Add the following script to your HTML file's <head> element:
API
@celine/bibhtml is structured around 3 custom elements:
-
<bh-cite> -
<bh-reference> -
<bh-bibliography>
<bh-cite><a href="#willighagen2019">[?]</a></bh-cite>
...
<bh-reference id="willighagen2019">
@article{willighagen2019,
title = {Citation.js: a format-independent, modular bibliography tool for the browser and command line},
author = {Willighagen, Lars G.},
year = 2019,
month = aug,
keywords = {Bibliography, Javascript},
volume = 5,
pages = {e214},
journal = {PeerJ Computer Science},
issn = {2376-5992},
url = {https://doi.org/10.7717/peerj-cs.214},
doi = {10.7717/peerj-cs.214}
}
</bh-reference>
...
<bh-bibliography format="apa">
</bh-bibliography>
<bh-cite>
The <bh-cite> element:
- Unhides the
<bh-reference>targeted by the first inner<a>element, and adds a backlink to itself - Replaces the first
?contained within the first inner<a>element with the reference number
Thus, to cite
Citation.js
We can change the formatting of the inline citation, say, to use parentheses:
If we cite a missing reference
We can forgo numbered citations entirely by omitting a ? from the inner text of the first inner <a> element:
The ref attribute accepts an explicit reference ID (where a reference ID is always prefixed by a #), permitting the inner <a> element to href directly to the the referenced material.
Thus, ref attribute facilitates adding a bibliography to a HTML document full of existing hyperlinks that should remain unchanged.
The deref flag dereferences
a citation, setting the href attribute of the inner <a> element to the URL associated with the reference as determined by Citation.js.
Thus, dereferenced
to link to https://doi.org/10.1145/3236774.
The replace attribute (which defaults to "number") determines
what happens to the inner text of a <bh-cite> element.
When replace="number", the first ? in the inner text of the first inner <a> element is replaced with the reference number.
When replace="none", no replacement is made. You will need to set replace="none" if the title of a work contains a ? in it:
In summary:
| Pattern | Citation navigates to: |
|---|---|
| <bh-cite> |
<bh-reference> with id="refId" |
| <bh-cite ref="#refId"> |
"example.com" |
| <bh-cite deref> |
URL yielded by Citation.js |
<bh-reference>
Each <bh-reference> must be tagged with an id attribute, and contain reference information in one of 4 supported formats:
BibTeX
This expands to reference
Unstructured text
A <bh-reference> can contain unstructured text, and will display it unchanged. This format is useful when the reference is not in a machine readable format supported by @celine/bibhtml or Citation.js. When reference information in a structured format is malformed, @celine/bibhtml will treat it as unstructured text and display it unchanged.
Observe that the reference
DOI
This expands to reference
Wikidata
This expands to reference
<bh-bibliography>
The <bh-bibliography> finds <bh-reference>s and renders them in a formatted list (like at the bottom of the page).
</bh-bibliography> has simple calling semantics:
<bh-bibliography format="apa"> </bh-bibliography>
Do not put <bh-reference> elements inside the <bh-bibliography> element. Everything will break.
The format attribute sets the citation style. Currently only 1 is supported, "apa".
References are rendered in the order they are cited by <bh-cite> elements, not the order they are declared in the HTML document.
Extras
<bh-cite> has an appropriate implementation of disconnectedCallback to remove the citation from the bibliography when the <bh-cite> element is removed from the DOM.
References
How to cite
If you use this library, please cite it as below:
@software{Bo_bibhtml_2024,
author = {Bo, Maxwell},
license = {MIT},
title = {{@celine/bibhtml}},
url = {https://maxbo.me/celine/bibhtml},
year = {2024}
}