UNPKG

vega-scenegraph

Version:

Vega scenegraph and renderers.

51 lines (44 loc) 2.07 kB
import boundMark from '../bound/boundMark'; const keys = [ 'marktype', 'name', 'role', 'interactive', 'clip', 'items', 'zindex', 'x', 'y', 'width', 'height', 'align', 'baseline', // layout 'fill', 'fillOpacity', 'opacity', 'blend', // fill 'stroke', 'strokeOpacity', 'strokeWidth', 'strokeCap', // stroke 'strokeDash', 'strokeDashOffset', // stroke dash 'strokeForeground', 'strokeOffset', // group 'startAngle', 'endAngle', 'innerRadius', 'outerRadius', // arc 'cornerRadius', 'padAngle', // arc, rect 'cornerRadiusTopLeft', 'cornerRadiusTopRight', // rect, group 'cornerRadiusBottomLeft', 'cornerRadiusBottomRight', 'interpolate', 'tension', 'orient', 'defined', // area, line 'url', 'aspect', 'smooth', // image 'path', 'scaleX', 'scaleY', // path 'x2', 'y2', // rule 'size', 'shape', // symbol 'text', 'angle', 'theta', 'radius', 'dir', 'dx', 'dy', // text 'ellipsis', 'limit', 'lineBreak', 'lineHeight', 'font', 'fontSize', 'fontWeight', 'fontStyle', 'fontVariant', // font 'description', 'aria', 'ariaRole', 'ariaRoleDescription' // aria ]; export function sceneToJSON(scene, indent) { return JSON.stringify(scene, keys, indent); } export function sceneFromJSON(json) { const scene = (typeof json === 'string' ? JSON.parse(json) : json); return initialize(scene); } function initialize(scene) { var type = scene.marktype, items = scene.items, parent, i, n; if (items) { for (i=0, n=items.length; i<n; ++i) { parent = type ? 'mark' : 'group'; items[i][parent] = scene; if (items[i].zindex) items[i][parent].zdirty = true; if ('group' === (type || parent)) initialize(items[i]); } } if (type) boundMark(scene); return scene; }