123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- var d3 = require("d3");
-
- var minimap = d3.select("#minimap"),
- svg = minimap.select("svg"),
- onBrush = onBrushEnd = function(){};
-
- var t = d3.scaleLinear()
- .domain([0, 640])
- .range([0,1])
- .clamp(true);
-
- var y = d3.scaleLinear()
- .domain([0, 1])
- .range([40, 0]);
-
- var line = d3.line();
-
- var brush = d3.brushX()
- .on("brush end", brushed)
-
- minimap.select(".brush").call(brush)
- .selectAll("rect")
- .attr("height", 80);
-
- minimap.selectAll(".brush .resize")
- .append("line")
- .attr("x1",0)
- .attr("x2",0)
- .attr("y1",0)
- .attr("y2", 80);
-
- function redraw(data) {
-
- brush.move(d3.select(".brush"), [0, 0]);
-
- var top = data.map(function(d,i){
- return [i, y(d)];
- });
-
- var bottom = top.map(function(d){
- return [d[0], 80 - d[1]];
- }).reverse();
-
- d3.selectAll("g.waveform path")
- .attr("d",line(top.concat(bottom)));
-
- time(0);
-
- }
-
- function time(t) {
- d3.select("g.time")
- .attr("transform","translate(" + (t * 640) + ")");
- }
-
- function brushed() {
-
- var start = d3.event.selection ? t(d3.event.selection[0]) : 0,
- end = d3.event.selection ? t(d3.event.selection[1]) : 1;
-
- if (start === end) {
- start = 0;
- end = 1;
- } else {
- if (start <= 0.01) {
- start = 0;
- }
- if (end >= 0.99) {
- end = 1;
- }
- }
-
- d3.select("clipPath rect")
- .attr("x", t.invert(start))
- .attr("width", t.invert(end - start));
-
- onBrush([start, end]);
-
- if (d3.event.type === "end") {
- onBrushEnd([start, end]);
- }
-
- }
-
- function _onBrush(_) {
- onBrush = _;
- }
-
- function _onBrushEnd(_) {
- onBrushEnd = _;
- }
-
- module.exports = {
- time: time,
- redraw: redraw,
- onBrush: _onBrush,
- onBrushEnd: _onBrushEnd
- };
|