40 lines
1.5 KiB
JavaScript
40 lines
1.5 KiB
JavaScript
import { ChtmlHighlighter } from './chtml_highlighter.js';
|
|
import { ColorPicker } from './color_picker.js';
|
|
import { CssHighlighter } from './css_highlighter.js';
|
|
import { HtmlHighlighter } from './html_highlighter.js';
|
|
import { MmlCssHighlighter } from './mml_css_highlighter.js';
|
|
import { MmlHighlighter } from './mml_highlighter.js';
|
|
import { SvgHighlighter } from './svg_highlighter.js';
|
|
import { SvgV3Highlighter } from './svg_v3_highlighter.js';
|
|
export function highlighter(back, fore, rendererInfo) {
|
|
const colorPicker = new ColorPicker(back, fore);
|
|
const renderer = rendererInfo.renderer === 'NativeMML' && rendererInfo.browser === 'Safari'
|
|
? 'MML-CSS'
|
|
: rendererInfo.renderer === 'SVG' && rendererInfo.browser === 'v3'
|
|
? 'SVG-V3'
|
|
: rendererInfo.renderer;
|
|
const highlighter = new (highlighterMapping[renderer] ||
|
|
highlighterMapping['NativeMML'])();
|
|
highlighter.setColor(colorPicker);
|
|
return highlighter;
|
|
}
|
|
export function update(back, fore, highlighter) {
|
|
const colorPicker = new ColorPicker(back, fore);
|
|
highlighter.setColor(colorPicker);
|
|
}
|
|
export function addEvents(node, events, rendererInfo) {
|
|
const highlight = highlighterMapping[rendererInfo.renderer];
|
|
if (highlight) {
|
|
new highlight().addEvents(node, events);
|
|
}
|
|
}
|
|
const highlighterMapping = {
|
|
SVG: SvgHighlighter,
|
|
'SVG-V3': SvgV3Highlighter,
|
|
NativeMML: MmlHighlighter,
|
|
'HTML-CSS': HtmlHighlighter,
|
|
'MML-CSS': MmlCssHighlighter,
|
|
CommonHTML: CssHighlighter,
|
|
CHTML: ChtmlHighlighter
|
|
};
|