mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* update eslint, tsconfig + esbuild to handle new jsx transform * remove thing that breaks the new jsx transform * remove react imports * adjust grafana-icons build * is this the correct syntax? * try this * well this was much easier than expected... * change grafana-plugin-configs webpack config * fixes * fix lockfile * fix 2 more violations * use path.resolve instead of require.resolve * remove react import * fix react imports * more fixes * remove React import * remove import React from docs * remove another react import
40 lines
962 B
TypeScript
40 lines
962 B
TypeScript
import SVG, { Props } from 'react-inlinesvg';
|
|
|
|
import { textUtil } from '@grafana/data';
|
|
|
|
import { svgStyleCleanup } from './utils';
|
|
|
|
type SanitizedSVGProps = Props & { cleanStyle?: boolean };
|
|
|
|
export const SanitizedSVG = (props: SanitizedSVGProps) => {
|
|
const { cleanStyle, ...inlineSvgProps } = props;
|
|
return <SVG {...inlineSvgProps} cacheRequests={true} preProcessor={cleanStyle ? getCleanSVGAndStyle : getCleanSVG} />;
|
|
};
|
|
|
|
let cache = new Map<string, string>();
|
|
|
|
function getCleanSVG(code: string): string {
|
|
let clean = cache.get(code);
|
|
if (!clean) {
|
|
clean = textUtil.sanitizeSVGContent(code);
|
|
cache.set(code, clean);
|
|
}
|
|
|
|
return clean;
|
|
}
|
|
|
|
function getCleanSVGAndStyle(code: string): string {
|
|
let clean = cache.get(code);
|
|
if (!clean) {
|
|
clean = textUtil.sanitizeSVGContent(code);
|
|
|
|
if (clean.indexOf('<style type="text/css">') > -1) {
|
|
clean = svgStyleCleanup(clean);
|
|
}
|
|
|
|
cache.set(code, clean);
|
|
}
|
|
|
|
return clean;
|
|
}
|