c3
Version:
D3-based reusable chart library
63 lines (59 loc) • 1.67 kB
text/typescript
import { ChartInternal } from './core'
import { notEmpty } from './util'
ChartInternal.prototype.generateColor = function() {
var $$ = this,
config = $$.config,
d3 = $$.d3,
colors = config.data_colors,
pattern = notEmpty(config.color_pattern)
? config.color_pattern
: d3.schemeCategory10,
callback = config.data_color,
ids = []
return function(d) {
var id = d.id || (d.data && d.data.id) || d,
color
// if callback function is provided
if (colors[id] instanceof Function) {
color = colors[id](d)
}
// if specified, choose that color
else if (colors[id]) {
color = colors[id]
}
// if not specified, choose from pattern
else {
if (ids.indexOf(id) < 0) {
ids.push(id)
}
color = pattern[ids.indexOf(id) % pattern.length]
colors[id] = color
}
return callback instanceof Function ? callback(color, d) : color
}
}
ChartInternal.prototype.generateLevelColor = function() {
var $$ = this,
config = $$.config,
colors = config.color_pattern,
threshold = config.color_threshold,
asValue = threshold.unit === 'value',
values =
threshold.values && threshold.values.length ? threshold.values : [],
max = threshold.max || 100
return notEmpty(threshold) && notEmpty(colors)
? function(value) {
var i,
v,
color = colors[colors.length - 1]
for (i = 0; i < values.length; i++) {
v = asValue ? value : (value * 100) / max
if (v < values[i]) {
color = colors[i]
break
}
}
return color
}
: null
}