mirror of https://github.com/masayuki0812/c3.git
Quite good looking graph derived from d3.js
http://c3js.org
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.
77 lines
2.8 KiB
77 lines
2.8 KiB
import { |
|
CLASS, |
|
isValue, |
|
isFunction, |
|
isString, |
|
isUndefined, |
|
isDefined, |
|
ceil10, |
|
asHalfPixel, |
|
diffDomain, |
|
isEmpty, |
|
notEmpty, |
|
getOption, |
|
hasValue, |
|
sanitise, |
|
getPathBox, |
|
ChartInternal |
|
} from '../chartinternal.js'; |
|
|
|
const selected = function (targetId) { |
|
let $$ = this.internal, d3 = $$.d3; |
|
return d3.merge( |
|
$$.main.selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(targetId)).selectAll('.' + CLASS.shape) |
|
.filter(function () { return d3.select(this).classed(CLASS.SELECTED); }) |
|
.map((d) => { return d.map((d) => { const data = d.__data__; return data.data ? data.data : data; }); }) |
|
); |
|
}; |
|
|
|
const select = function (ids, indices, resetOther) { |
|
let $$ = this.internal, d3 = $$.d3, config = $$.config; |
|
if (!config.data_selection_enabled) { return; } |
|
$$.main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).each(function (d, i) { |
|
let shape = d3.select(this), id = d.data ? d.data.id : d.id, |
|
toggle = $$.getToggle(this, d).bind($$), |
|
isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0, |
|
isTargetIndex = !indices || indices.indexOf(i) >= 0, |
|
isSelected = shape.classed(CLASS.SELECTED); |
|
// line/area selection not supported yet |
|
if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) { |
|
return; |
|
} |
|
if (isTargetId && isTargetIndex) { |
|
if (config.data_selection_isselectable(d) && !isSelected) { |
|
toggle(true, shape.classed(CLASS.SELECTED, true), d, i); |
|
} |
|
} else if (isDefined(resetOther) && resetOther) { |
|
if (isSelected) { |
|
toggle(false, shape.classed(CLASS.SELECTED, false), d, i); |
|
} |
|
} |
|
}); |
|
}; |
|
|
|
const unselect = function (ids, indices) { |
|
let $$ = this.internal, d3 = $$.d3, config = $$.config; |
|
if (!config.data_selection_enabled) { return; } |
|
$$.main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).each(function (d, i) { |
|
let shape = d3.select(this), id = d.data ? d.data.id : d.id, |
|
toggle = $$.getToggle(this, d).bind($$), |
|
isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0, |
|
isTargetIndex = !indices || indices.indexOf(i) >= 0, |
|
isSelected = shape.classed(CLASS.SELECTED); |
|
// line/area selection not supported yet |
|
if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) { |
|
return; |
|
} |
|
if (isTargetId && isTargetIndex) { |
|
if (config.data_selection_isselectable(d)) { |
|
if (isSelected) { |
|
toggle(false, shape.classed(CLASS.SELECTED, false), d, i); |
|
} |
|
} |
|
} |
|
}); |
|
}; |
|
|
|
export { selected, select, unselect };
|
|
|