1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.AbstractHighlighter = void 0;
- const XpathUtil = require("../common/xpath_util.js");
- const enrich_attr_js_1 = require("../enrich_mathml/enrich_attr.js");
- let counter = 0;
- class AbstractHighlighter {
- constructor() {
- this.counter = counter++;
- this.ATTR = 'sre-highlight-' + this.counter.toString();
- this.color = null;
- this.mactionName = '';
- this.currentHighlights = [];
- }
- highlight(nodes) {
- this.currentHighlights.push(nodes.map((node) => {
- const info = this.highlightNode(node);
- this.setHighlighted(node);
- return info;
- }));
- }
- highlightAll(node) {
- const mactions = this.getMactionNodes(node);
- for (let i = 0, maction; (maction = mactions[i]); i++) {
- this.highlight([maction]);
- }
- }
- unhighlight() {
- const nodes = this.currentHighlights.pop();
- if (!nodes) {
- return;
- }
- nodes.forEach((highlight) => {
- if (this.isHighlighted(highlight.node)) {
- this.unhighlightNode(highlight);
- this.unsetHighlighted(highlight.node);
- }
- });
- }
- unhighlightAll() {
- while (this.currentHighlights.length > 0) {
- this.unhighlight();
- }
- }
- setColor(color) {
- this.color = color;
- }
- colorString() {
- return this.color.rgba();
- }
- addEvents(node, events) {
- const mactions = this.getMactionNodes(node);
- for (let i = 0, maction; (maction = mactions[i]); i++) {
- for (const [key, event] of Object.entries(events)) {
- maction.addEventListener(key, event);
- }
- }
- }
- getMactionNodes(node) {
- return Array.from(node.getElementsByClassName(this.mactionName));
- }
- isMactionNode(node) {
- const className = node.className || node.getAttribute('class');
- return className ? !!className.match(new RegExp(this.mactionName)) : false;
- }
- isHighlighted(node) {
- return node.hasAttribute(this.ATTR);
- }
- setHighlighted(node) {
- node.setAttribute(this.ATTR, 'true');
- }
- unsetHighlighted(node) {
- node.removeAttribute(this.ATTR);
- }
- colorizeAll(node) {
- XpathUtil.updateEvaluator(node);
- const allNodes = XpathUtil.evalXPath(`.//*[@${enrich_attr_js_1.Attribute.ID}]`, node);
- allNodes.forEach((x) => this.colorize(x));
- }
- uncolorizeAll(node) {
- const allNodes = XpathUtil.evalXPath(`.//*[@${enrich_attr_js_1.Attribute.ID}]`, node);
- allNodes.forEach((x) => this.uncolorize(x));
- }
- colorize(node) {
- const fore = (0, enrich_attr_js_1.addPrefix)('foreground');
- if (node.hasAttribute(fore)) {
- node.setAttribute(fore + '-old', node.style.color);
- node.style.color = node.getAttribute(fore);
- }
- }
- uncolorize(node) {
- const fore = (0, enrich_attr_js_1.addPrefix)('foreground') + '-old';
- if (node.hasAttribute(fore)) {
- node.style.color = node.getAttribute(fore);
- }
- }
- }
- exports.AbstractHighlighter = AbstractHighlighter;
|