UNPKG

d3-visualize

Version:

d3-view components for data visualization

74 lines (62 loc) 2.21 kB
// Title plot annotation import {isString} from 'd3-let'; import {visuals} from '../core/base'; import globalOptions from '../core/options'; globalOptions.title = { text: null, size: '3%', minSize: 15, maxSize: 25, offset: ['10%', 0] }; visuals.events.on('before-init.title', viz => { var title = viz.options.title; if (isString(title)) viz.options.title = {text: title}; }); visuals.events.on('after-draw.title', viz => { var title = viz.getModel('title'); let visual = viz; if (visual.visualType === 'visual') delete visual.__title; else if (viz.isViz) visual = viz.visualParent; else return; if (!title.text) return; if (visual.menu && !visual.__title) { visual.__title = title; menuTitle(visual, title); } else if (viz.isViz) { var box = viz.boundingBox(true), font = viz.getModel('font'), stroke = title.stroke || font.stroke, size = viz.font(box, title), text = viz.group().selectAll('text.chartitle').data([title.text]), top = viz.dim(title.offset[0], box.vizHeight), left = viz.dim(title.offset[1], box.vizWidth), translate = viz.translate(box.margin.left+box.innerWidth/2+left, top); text.enter() .append('text') .classed('chartitle', true) .attr("transform", translate) .style("text-anchor", "middle") .style("font-size", size) .style("fill", stroke) .text(d => d) .merge(text) .transition() .attr("transform", translate) .style("font-size", size) .style("fill", stroke) .text(d => d); } }); function menuTitle(visual, title) { var height = number(visual.menu.style('height')), maxSize = title.maxSize ? Math.min(height-4, title.maxSize) : height-4, size = visual.dim(title.size, visual.width, title.minSize, maxSize); visual.menu.select('.title') .html(title.text) .style('font-size', `${size}px`) .style('line-height', `${height}px`); } function number (px) { return +px.substring(0, px.length-2); }