@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.7.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 replaces the ?
in the inner text of the first inner <a>
element.
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} }