react-pdf-annotations
Version:
Set of React components for PDF annotation
40 lines (34 loc) • 1.37 kB
JavaScript
export const getDocument = elm => (elm || {}).ownerDocument || document;
export const getWindow = elm => (getDocument(elm) || {}).defaultView || window;
export const isHTMLElement = elm => elm instanceof HTMLElement || elm instanceof getWindow(elm).HTMLElement;
export const isHTMLCanvasElement = elm => elm instanceof HTMLCanvasElement || elm instanceof getWindow(elm).HTMLCanvasElement;
export const asElement = x => x;
export const getPageFromElement = target => {
const node = asElement(target.closest(".page"));
if (!node || !isHTMLElement(node)) {
return null;
}
const number = Number(asElement(node).dataset.pageNumber);
return {
node,
number
};
};
export const getPageFromRange = range => {
const startParentElement = range.startContainer.parentElement;
const endParentElement = range.endContainer.parentElement;
if (!isHTMLElement(startParentElement) || !isHTMLElement(endParentElement)) {
return;
}
return [getPageFromElement(asElement(startParentElement)), getPageFromElement(asElement(endParentElement))];
};
export const findOrCreateContainerLayer = (container, className) => {
const doc = getDocument(container);
let layer = container.querySelector(`.${className}`);
if (!layer) {
layer = doc.createElement("div");
layer.className = className;
container.appendChild(layer);
}
return layer;
};