You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.8 KiB
83 lines
2.8 KiB
import {
|
|
createElementID,
|
|
} from '../utils/common';
|
|
import {
|
|
extendPrototype,
|
|
} from '../utils/functionExtensions';
|
|
import createNS from '../utils/helpers/svg_elements';
|
|
|
|
import SVGCompElement from '../elements/svgElements/SVGCompElement';
|
|
import SVGRendererBase from './SVGRendererBase';
|
|
|
|
function SVGRenderer(animationItem, config) {
|
|
this.animationItem = animationItem;
|
|
this.layers = null;
|
|
this.renderedFrame = -1;
|
|
this.svgElement = createNS('svg');
|
|
var ariaLabel = '';
|
|
if (config && config.title) {
|
|
var titleElement = createNS('title');
|
|
var titleId = createElementID();
|
|
titleElement.setAttribute('id', titleId);
|
|
titleElement.textContent = config.title;
|
|
this.svgElement.appendChild(titleElement);
|
|
ariaLabel += titleId;
|
|
}
|
|
if (config && config.description) {
|
|
var descElement = createNS('desc');
|
|
var descId = createElementID();
|
|
descElement.setAttribute('id', descId);
|
|
descElement.textContent = config.description;
|
|
this.svgElement.appendChild(descElement);
|
|
ariaLabel += ' ' + descId;
|
|
}
|
|
if (ariaLabel) {
|
|
this.svgElement.setAttribute('aria-labelledby', ariaLabel);
|
|
}
|
|
var defs = createNS('defs');
|
|
this.svgElement.appendChild(defs);
|
|
var maskElement = createNS('g');
|
|
this.svgElement.appendChild(maskElement);
|
|
this.layerElement = maskElement;
|
|
this.renderConfig = {
|
|
preserveAspectRatio: (config && config.preserveAspectRatio) || 'xMidYMid meet',
|
|
imagePreserveAspectRatio: (config && config.imagePreserveAspectRatio) || 'xMidYMid slice',
|
|
contentVisibility: (config && config.contentVisibility) || 'visible',
|
|
progressiveLoad: (config && config.progressiveLoad) || false,
|
|
hideOnTransparent: !((config && config.hideOnTransparent === false)),
|
|
viewBoxOnly: (config && config.viewBoxOnly) || false,
|
|
viewBoxSize: (config && config.viewBoxSize) || false,
|
|
className: (config && config.className) || '',
|
|
id: (config && config.id) || '',
|
|
focusable: config && config.focusable,
|
|
filterSize: {
|
|
width: (config && config.filterSize && config.filterSize.width) || '100%',
|
|
height: (config && config.filterSize && config.filterSize.height) || '100%',
|
|
x: (config && config.filterSize && config.filterSize.x) || '0%',
|
|
y: (config && config.filterSize && config.filterSize.y) || '0%',
|
|
},
|
|
width: (config && config.width),
|
|
height: (config && config.height),
|
|
runExpressions: !config || config.runExpressions === undefined || config.runExpressions,
|
|
};
|
|
|
|
this.globalData = {
|
|
_mdf: false,
|
|
frameNum: -1,
|
|
defs: defs,
|
|
renderConfig: this.renderConfig,
|
|
};
|
|
this.elements = [];
|
|
this.pendingElements = [];
|
|
this.destroyed = false;
|
|
this.rendererType = 'svg';
|
|
}
|
|
|
|
extendPrototype([SVGRendererBase], SVGRenderer);
|
|
|
|
SVGRenderer.prototype.createComp = function (data) {
|
|
return new SVGCompElement(data, this.globalData, this);
|
|
};
|
|
|
|
export default SVGRenderer;
|