in src/webBehavior.ts [69:171]
public bindEvents(options: ChicletSlicerBehaviorOptions, selectionHandler: ISelectionHandler): void {
const slicers: Selection<SelectableDataPoint> = this.slicers = options.slicerItemContainers,
slicerClear: Selection<any> = options.slicerClear;
this.slicerItemLabels = options.slicerItemLabels;
this.slicerItemInputs = options.slicerItemInputs;
this.dataPoints = options.dataPoints;
this.interactivityService = options.interactivityService;
this.slicerSettings = options.slicerSettings;
this.options = options;
this.selectionHandler = selectionHandler;
this.loadSelection();
slicers.on("mouseover", (dataPoint: ChicletSlicerDataPoint) => {
if (dataPoint.selectable) {
dataPoint.mouseOver = true;
dataPoint.mouseOut = false;
this.renderMouseover();
}
});
slicers.on("mouseout", (dataPoint: ChicletSlicerDataPoint) => {
if (dataPoint.selectable) {
dataPoint.mouseOver = false;
dataPoint.mouseOut = true;
this.renderMouseover();
}
});
slicers.on("click", (dataPoint: ChicletSlicerDataPoint, index: number) => {
if (!dataPoint.selectable) {
return;
}
(d3.event as MouseEvent).preventDefault();
let settings: ChicletSlicerSettings = this.slicerSettings;
let multiselect: boolean = settings.general.multiselect;
let selectedIndexes: number[] = jQuery.map(
this.dataPoints,
(dataPoint: ChicletSlicerDataPoint, index: number) => {
if (dataPoint.selected) {
return index;
};
});
if (settings.general.forcedSelection && selectedIndexes.length === 1) {
let availableDataPoints: ChicletSlicerDataPoint[] = jQuery.map(
this.dataPoints,
(dataPoint: ChicletSlicerDataPoint, index: number) => {
if (!dataPoint.filtered) {
return dataPoint;
};
});
if (availableDataPoints[index]
&& this.dataPoints[selectedIndexes[0]].identity === availableDataPoints[index].identity) {
return;
}
}
if ((d3.event as MouseEvent).altKey && multiselect) {
let selIndex: number = selectedIndexes.length > 0
? (selectedIndexes[selectedIndexes.length - 1])
: 0;
if (selIndex > index) {
[index, selIndex] = [selIndex, index];
}
selectionHandler.handleClearSelection();
for (let i: number = selIndex; i <= index; i++) {
selectionHandler.handleSelection(this.dataPoints[i], true /* isMultiSelect */);
}
} else if ((((d3.event as MouseEvent).ctrlKey || (d3.event as MouseEvent).metaKey)) || multiselect) {
selectionHandler.handleSelection(dataPoint, true /* isMultiSelect */);
} else {
selectionHandler.handleSelection(dataPoint, false /* isMultiSelect */);
}
this.saveSelection();
});
slicerClear.on("click", (d: SelectableDataPoint) => {
const settings: ChicletSlicerSettings = this.slicerSettings;
if (settings.general.forcedSelection) {
return false;
}
selectionHandler.handleClearSelection();
this.saveSelection();
});
this.forceSelection();
}