@jiaminghi/charts
Version:
Lightweight charting
67 lines (47 loc) • 1.43 kB
JavaScript
import { doUpdate } from '../class/updater.class'
import { deepClone } from '@jiaminghi/c-render/lib/plugin/util'
import { gridConfig } from '../config'
import { deepMerge } from '../util'
export function grid (chart, option = {}) {
let { grid } = option
grid = deepMerge(deepClone(gridConfig, true), grid || {})
doUpdate({
chart,
series: [grid],
key: 'grid',
getGraphConfig: getGridConfig
})
}
function getGridConfig (gridItem, updater) {
const { animationCurve, animationFrame, rLevel } = gridItem
const shape = getGridShape(gridItem, updater)
const style = getGridStyle(gridItem)
updater.chart.gridArea = { ...shape }
return [{
name: 'rect',
index: rLevel,
animationCurve,
animationFrame,
shape,
style
}]
}
function getGridShape (gridItem, updater) {
const [w, h] = updater.chart.render.area
const left = getNumberValue(gridItem.left, w)
const right = getNumberValue(gridItem.right, w)
const top = getNumberValue(gridItem.top, h)
const bottom = getNumberValue(gridItem.bottom, h)
const width = w - left - right
const height = h - top - bottom
return { x: left, y: top, w: width, h: height }
}
function getNumberValue (val, all) {
if (typeof val === 'number') return val
if (typeof val !== 'string') return 0
return all * parseInt(val) / 100
}
function getGridStyle (gridItem) {
const { style } = gridItem
return style
}