@notelix/web-marker
Version:
a web page highlighter
71 lines (70 loc) • 2.69 kB
TypeScript
import EventHandler from "./EventHandler";
import HighlightPainter from "./HighlightPainter";
import SerializedRange from "./SerializedRange";
interface MarkerConstructorArgs {
rootElement?: HTMLElement;
eventHandler?: EventHandler;
highlightPainter?: HighlightPainter;
overlappingHighlight?: "allow" | "dontCreateNewHighlight" | "deleteOverlappedHighlight" | "merge";
}
declare class Marker {
static normalizeTextCache: any;
rootElement: Element;
document: Document;
window: Window;
eventHandler: EventHandler;
highlightPainter: HighlightPainter;
overlappingHighlight: "allow" | "dontCreateNewHighlight" | "deleteOverlappedHighlight" | "merge";
state: {
lastHoverId: string;
uidToSerializedRange: {
[key: string]: SerializedRange;
};
};
constructor({ rootElement, highlightPainter, eventHandler, overlappingHighlight, }: MarkerConstructorArgs);
static clearSelection(win?: Window): void;
private resolveHighlightElements;
private static normalizeText;
private static isBlackListedElementNode;
private static getRealOffset;
private static unpaintElement;
private describeNode;
private logBoundaryAdjustment;
private normalizeDeserializedBoundary;
private convertRangeToSelection;
private getOverlappingHighlightIds;
serializeRange(range: Range, options?: {
uid?: string;
charsToKeepForTextBeforeAndTextAfter?: number;
}): SerializedRange | null;
batchPaint(serializedRanges: SerializedRange[]): {
errors: any;
};
paint(serializedRange: SerializedRange): void;
unpaint(serializedRange: SerializedRange): void;
private batchDeserializeRange;
deserializeRange(serializedRange: SerializedRange): any;
clickListener: (e: Event) => void;
mouseoverListener: (e: Event) => void;
addEventListeners(): void;
removeEventListeners(): void;
paintHighlights(highlightId: string): void;
private highlightHovering;
private getInnerText;
private getNormalizedInnerText;
private findLastChildTextNode;
private findFirstChildTextNode;
private findPreviousTextNodeInDomTree;
private findNextTextNodeInDomTree;
private forwardOffset;
private backwardOffset;
private findElementAtOffset;
private trimRangeSpaces;
private convertTextNodeToHighlightElement;
private buildContext;
private adjustRangeAroundBlackListedElement;
getSerializedRangeFromUid(uid: string): SerializedRange | null;
resolveSerializedRangeOffsetInText(text: any, serializedRange: SerializedRange): number;
}
export default Marker;
export type { MarkerConstructorArgs };