2.0.2 • Published 7 years ago
@xyfir/annotate-html v2.0.2
Annotate HTML with annotations from xyAnnotations.
This is mostly a lower-level library to be used in other packages (like epubjs).
API
Check the source code and JSDOC comments for each module, they're heavily documented and should explain everything necessary.
The main methods you'll probably need are briefly described below.
import * as AnnotateHTML from '@xyfir/annotate-html';findMarkers()
const markers = AnnotateHTML.findMarkers(html, chapter, items);html: string - The HTML string to search for markers inchapter: number - The index of the chapter within the bookitems: object[] - The annotation set items to searchmarkers: object - Markers that point to matches for Before and After subsearches within the chapter
buildString()
const newHTML = AnnotateHTML.buildString({
set,
html,
mode,
action: (key, type) => `...`,
chapter,
markers
});set: object- The annotation set to insert
html: string- The HTML string to insert annotations into
mode: number- See the
INSERT_MODESexport.
- See the
action: function- This is a template function that takes two parameters,
keyandtype, and returns astringthat will be used for theonclickorhrefattributes of the inserted element based onmode. keyidentifies the item being clicked with the following format:'setId-itemId'.typeis the type of highlight (should always be"annotation"unless you have some custom setup).
- This is a template function that takes two parameters,
chapter: number- The index of the chapter within the book
markers: object- Markers that point to matches for Before and After subsearches within the book
INSERT_MODES
All inserted elements are given a class of xy-{type}, which usually should be xy-annotation unless you specified a custom type.
AnnotateHTML.INSERT_MODES = {
// Wrap the matches within an element
WRAP: {
// <a href="...">{match}</a>
LINK,
// <span onclick="...">{match}</span>
ONCLICK
},
// Add a reference at the end of the match
REFERENCE: {
// {match}<a href="..."><sup>xy</sup></a>
LINK,
// {match}<span onclick="..."><sup>xy</sup></span>
ONCLICK
}
};
AnnotateHTML.buildString({ ...
mode: AnnotateHTML.INSERT_MODES.WRAP.LINK
... });Usage / Examples
You should check the epubjs package (find-markers.js and insert.js specifically) for a detailed, working example of this package being used.