mirror of
https://github.com/Redocly/redoc.git
synced 2025-03-12 05:45:46 +03:00
50 lines
942 B
TypeScript
50 lines
942 B
TypeScript
|
import * as Mark from 'mark.js';
|
||
|
|
||
|
export class MarkerService {
|
||
|
map: Map<Element, Mark> = new Map();
|
||
|
|
||
|
private prevTerm: string = '';
|
||
|
|
||
|
add(el: HTMLElement) {
|
||
|
this.map.set(el, new Mark(el));
|
||
|
}
|
||
|
|
||
|
delete(el: Element) {
|
||
|
this.map.delete(el);
|
||
|
}
|
||
|
|
||
|
addOnly(elements: Element[]) {
|
||
|
this.map.forEach((inst, elem) => {
|
||
|
if (elements.indexOf(elem) === -1) {
|
||
|
inst.unmark();
|
||
|
this.map.delete(elem);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
for (let el of elements) {
|
||
|
if (!this.map.has(el)) {
|
||
|
this.map.set(el, new Mark(el as HTMLElement));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
clearAll() {
|
||
|
this.unmark();
|
||
|
this.map.clear();
|
||
|
}
|
||
|
|
||
|
mark(term?: string) {
|
||
|
if (!term && !this.prevTerm) return;
|
||
|
this.map.forEach(val => {
|
||
|
val.unmark();
|
||
|
val.mark(term || this.prevTerm);
|
||
|
});
|
||
|
this.prevTerm = term || this.prevTerm || '';
|
||
|
}
|
||
|
|
||
|
unmark() {
|
||
|
this.map.forEach(val => val.unmark());
|
||
|
this.prevTerm = '';
|
||
|
}
|
||
|
}
|