highlighter_factory.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { ChtmlHighlighter } from './chtml_highlighter.js';
  2. import { ColorPicker } from './color_picker.js';
  3. import { CssHighlighter } from './css_highlighter.js';
  4. import { HtmlHighlighter } from './html_highlighter.js';
  5. import { MmlCssHighlighter } from './mml_css_highlighter.js';
  6. import { MmlHighlighter } from './mml_highlighter.js';
  7. import { SvgHighlighter } from './svg_highlighter.js';
  8. import { SvgV3Highlighter } from './svg_v3_highlighter.js';
  9. export function highlighter(back, fore, rendererInfo) {
  10. const colorPicker = new ColorPicker(back, fore);
  11. const renderer = rendererInfo.renderer === 'NativeMML' && rendererInfo.browser === 'Safari'
  12. ? 'MML-CSS'
  13. : rendererInfo.renderer === 'SVG' && rendererInfo.browser === 'v3'
  14. ? 'SVG-V3'
  15. : rendererInfo.renderer;
  16. const highlighter = new (highlighterMapping[renderer] ||
  17. highlighterMapping['NativeMML'])();
  18. highlighter.setColor(colorPicker);
  19. return highlighter;
  20. }
  21. export function update(back, fore, highlighter) {
  22. const colorPicker = new ColorPicker(back, fore);
  23. highlighter.setColor(colorPicker);
  24. }
  25. export function addEvents(node, events, rendererInfo) {
  26. const highlight = highlighterMapping[rendererInfo.renderer];
  27. if (highlight) {
  28. new highlight().addEvents(node, events);
  29. }
  30. }
  31. const highlighterMapping = {
  32. SVG: SvgHighlighter,
  33. 'SVG-V3': SvgV3Highlighter,
  34. NativeMML: MmlHighlighter,
  35. 'HTML-CSS': HtmlHighlighter,
  36. 'MML-CSS': MmlCssHighlighter,
  37. CommonHTML: CssHighlighter,
  38. CHTML: ChtmlHighlighter
  39. };