redoc/src/services/MarkerService.ts

52 lines
952 B
TypeScript
Raw Normal View History

2018-02-22 12:26:53 +03:00
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);
}
});
2018-03-05 18:58:19 +03:00
for (const el of elements) {
2018-02-22 12:26:53 +03:00
if (!this.map.has(el)) {
this.map.set(el, new Mark(el as HTMLElement));
}
}
}
clearAll() {
this.unmark();
this.map.clear();
}
mark(term?: string) {
2018-03-05 18:58:19 +03:00
if (!term && !this.prevTerm) {
return;
}
2018-02-22 12:26:53 +03:00
this.map.forEach(val => {
val.unmark();
val.mark(term || this.prevTerm);
});
2018-03-18 00:23:14 +03:00
this.prevTerm = term || this.prevTerm;
2018-02-22 12:26:53 +03:00
}
unmark() {
this.map.forEach(val => val.unmark());
this.prevTerm = '';
}
}