{
const m = DOM.svg(width, height);
const svg = d3.select(m).append('g');
let zoomArea = svg.append("g").attr("style", "cursor:move;pointer-events:all;");
let base = zoomArea.append("g");
let dataCanvas = zoomArea.append("g");
let gAxis = zoomArea.append("g");
base.selectAll("*").remove()
base
.append("rect")
.attr("id", "labels-rect")
.attr("width", width)
.attr("height", height)
.attr("fill", "#f4f7f9");
base
.append("rect")
.attr("id", "base-rect")
.attr("y", 0)
.attr("width", width)
.attr("height", 56)
.attr("fill", "#f4f7f9");
let xAxis = d3.axisBottom(xScale);
let zoomed = function(event) {
let eventType = event.sourceEvent.type;
let xz = event.transform.rescaleX(xScale);
gAxis
.transition()
.duration(eventType === "wheel" ? 100 : 0)
.ease(d3.easeLinear)
.call(
xAxis.scale(xz)
.tickFormat(d3.timeFormat("%Y-%m-%d %H:%M"))
.ticks(5)
)
updateChartCollisions(xz, dataCanvas);
}
let zoom = d3.zoom()
.scaleExtent([1, 500])
.translateExtent([[-20, 0], [width, 0]])
.extent([[-20, 0], [width, 0]])
.on("zoom", zoomed);
zoomArea.call(zoom);
gAxis.call(xAxis
.tickFormat(d3.timeFormat("%Y-%m-%d %H:%M"))
.ticks(5)
);
gAxis.style("font-size", "12px");
let enterCanvas = dataCanvas
.selectAll(".alert-point")
.data(data)
.enter();
enterCanvas
.append("path")
.attr("class", "alert-icon")
.attr("d", feedbackIcon.d)
.attr("fill", "red");
enterCanvas
.append("text")
.attr("class", (d,i) => `alert-label alert-label${i}`)
.attr("id", (d,i) => `label${i}`)
.style("font-size", "15px");
updateChartCollisions(xScale, dataCanvas)
return m;
}