|
1 | 1 | function calendarView(element, formattedData, colorRange) { |
2 | | - let d3 = d3v4; |
3 | | - |
4 | | - let data = formattedData.data; |
| 2 | + let data = formattedData.data |
5 | 3 |
|
6 | 4 | function monthPath(t0) { |
7 | 5 | let t1 = new Date(t0.getFullYear(), t0.getMonth() + 1, 0), |
8 | | - d0 = t0.getDay(), w0 = d3.timeWeek.count(d3.timeYear(t0), t0) |
9 | | - d1 = t1.getDay(), w1 = d3.timeWeek.count(d3.timeYear(t1), t1); |
| 6 | + d0 = t0.getDay(), w0 = d3v4.timeWeek.count(d3v4.timeYear(t0), t0) |
| 7 | + d1 = t1.getDay(), w1 = d3v4.timeWeek.count(d3v4.timeYear(t1), t1) |
10 | 8 | return "M" + (w0 + 1) * cellSize + "," + d0 * cellSize |
11 | 9 | + "H" + w0 * cellSize + "V" + 7 * cellSize |
12 | 10 | + "H" + w1 * cellSize + "V" + (d1 + 1) * cellSize |
13 | 11 | + "H" + (w1 + 1) * cellSize + "V" + 0 |
14 | | - + "H" + (w0 + 1) * cellSize + "Z"; |
| 12 | + + "H" + (w0 + 1) * cellSize + "Z" |
15 | 13 | } |
16 | 14 |
|
17 | | - let format = d3.timeFormat("%Y-%m-%d"); |
18 | | - let parseDate = d3.timeParse("%Y-%m-%d"); |
| 15 | + let format = d3v4.timeFormat("%Y-%m-%d") |
| 16 | + let parseDate = d3v4.timeParse("%Y-%m-%d") |
19 | 17 |
|
20 | | - let minYear = d3.min(data.keys(), function(d) { return parseDate(d).getFullYear(); }) |
21 | | - let maxYear = d3.max(data.keys(), function(d) { return parseDate(d).getFullYear(); }) |
| 18 | + let minYear = d3v4.min(data.keys(), function(d) { return parseDate(d).getFullYear() }) |
| 19 | + let maxYear = d3v4.max(data.keys(), function(d) { return parseDate(d).getFullYear() }) |
22 | 20 |
|
23 | 21 | let yearLength = maxYear - minYear + 1 |
24 | 22 |
|
25 | | - let minY = d3.min(data.values(), function(d) { return d; }) |
26 | | - let maxY = d3.max(data.values(), function(d) { return d; }) |
| 23 | + let minY = d3v4.min(data.values(), function(d) { return d }) |
| 24 | + let maxY = d3v4.max(data.values(), function(d) { return d }) |
27 | 25 |
|
28 | 26 | let heightCellRatio = 9 |
29 | | - widthCellRatio = 55; |
| 27 | + widthCellRatio = 55 |
30 | 28 |
|
31 | | - let cellSize = d3.max([d3.min([(element.offsetWidth - 20) / widthCellRatio, element.offsetHeight / yearLength / heightCellRatio]), 1]) |
| 29 | + let cellSize = d3v4.max([d3v4.min([(element.offsetWidth - 20) / widthCellRatio, element.offsetHeight / yearLength / heightCellRatio]), 1]) |
32 | 30 | width = cellSize * widthCellRatio |
33 | 31 | yearHeight = cellSize * heightCellRatio |
34 | | - height = yearHeight * yearLength; |
| 32 | + height = yearHeight * yearLength |
35 | 33 |
|
36 | | - let color = d3.scaleQuantize() |
| 34 | + let color = d3v4.scaleQuantize() |
37 | 35 | .domain([minY, maxY]) |
38 | | - .range(colorRange); |
| 36 | + .range(colorRange) |
39 | 37 |
|
40 | | - let svg = d3.select(element) |
| 38 | + let svg = d3v4.select(element) |
41 | 39 | .selectAll("svg") |
42 | | - .data(d3.range(minYear, maxYear + 1)) |
| 40 | + .data(d3v4.range(minYear, maxYear + 1)) |
43 | 41 | .enter().append("svg") |
44 | 42 | .style("display", "block") |
45 | 43 | .style("margin", "0 auto") |
46 | 44 | .attr("width", width) |
47 | 45 | .attr("height", yearHeight) |
48 | | - .attr("year", function(d) { return d; }) |
| 46 | + .attr("year", function(d) { return d }) |
49 | 47 | .append("g") |
50 | | - .attr("transform", "translate(" + ((width - cellSize * 53) / 2) + ",0)"); |
| 48 | + .attr("transform", "translate(" + ((width - cellSize * 53) / 2) + ",0)") |
51 | 49 |
|
52 | 50 | svg.append("text") |
53 | 51 | .attr("transform", "translate(-6," + cellSize * 3.5 + ")rotate(-90)") |
54 | 52 | .style("font-family", "sans-serif") |
55 | 53 | .style("font-size", 10) |
56 | 54 | .style("text-anchor", "middle") |
57 | | - .text(function(d) { return d; }); |
| 55 | + .text(function(d) { return d }) |
58 | 56 |
|
59 | 57 | let rect = svg.append("g") |
60 | 58 | .attr("fill", "none") |
61 | 59 | .attr("stroke", "#ccc") |
62 | 60 | .selectAll("rect") |
63 | | - .data(function(d) { return d3.timeDays(new Date(d, 0, 1), new Date(d + 1, 0, 1)); }) |
| 61 | + .data(function(d) { return d3v4.timeDays(new Date(d, 0, 1), new Date(d + 1, 0, 1)) }) |
64 | 62 | .enter().append("rect") |
65 | 63 | .attr("width", cellSize) |
66 | 64 | .attr("height", cellSize) |
67 | | - .attr("x", function(d) { return d3.timeWeek.count(d3.timeYear(d), d) * cellSize; }) |
68 | | - .attr("y", function(d) { return d.getDay() * cellSize; }) |
69 | | - .datum(format); |
| 65 | + .attr("x", function(d) { return d3v4.timeWeek.count(d3v4.timeYear(d), d) * cellSize }) |
| 66 | + .attr("y", function(d) { return d.getDay() * cellSize }) |
| 67 | + .datum(format) |
70 | 68 |
|
71 | 69 | svg.append("g") |
72 | 70 | .attr("fill", "none") |
73 | 71 | .attr("stroke", "#000") |
74 | 72 | .selectAll("path") |
75 | | - .data(function(d) { return d3.timeMonths(new Date(d, 0, 1), new Date(d + 1, 0, 1)); }) |
| 73 | + .data(function(d) { return d3v4.timeMonths(new Date(d, 0, 1), new Date(d + 1, 0, 1)) }) |
76 | 74 | .enter().append("path") |
77 | | - .attr("d", monthPath); |
| 75 | + .attr("d", monthPath) |
78 | 76 |
|
79 | | - let tooltip = d3.select(element) |
| 77 | + let tooltip = d3v4.select(element) |
80 | 78 | .append("div").attr("id", "tooltip") |
81 | 79 | .style("position", "absolute") |
82 | 80 | .style("z-index", "10") |
83 | 81 | .style("visibility", "hidden") |
84 | 82 |
|
85 | | - rect.filter(function(d) { return data.has(d); }) |
86 | | - .attr("fill", function(d) { return color(data.get(d)); }) |
| 83 | + rect.filter(function(d) { return data.has(d) }) |
| 84 | + .attr("fill", function(d) { return color(data.get(d)) }) |
87 | 85 | .append("title") |
88 | | - .text(function(d) { return d + ": " + formattedData.formatter(data.get(d)); }) |
| 86 | + .text(function(d) { return d + ": " + formattedData.formatter(data.get(d)) }) |
89 | 87 | .on("mouseenter", function(d) { |
90 | | - tooltip.style("visibility", "visible"); |
91 | | - d.style("fill-opacity", .15); |
| 88 | + tooltip.style("visibility", "visible") |
| 89 | + d.style("fill-opacity", .15) |
92 | 90 | tooltip.transition() |
93 | 91 | .duration(10) |
94 | 92 | .style("opacity", .9) |
95 | | - .style("visibility", "visible"); |
96 | | - tooltip.text(function(d) { return d + ": " + formattedData.formatter(data.get(d)); }) |
97 | | - .style("left", (d3.event.pageX)+30 + "px") |
98 | | - .style("top", (d3.event.pageY) + "px"); |
| 93 | + .style("visibility", "visible") |
| 94 | + tooltip.text(function(d) { return d + ": " + formattedData.formatter(data.get(d)) }) |
| 95 | + .style("left", (d3v4.event.pageX)+30 + "px") |
| 96 | + .style("top", (d3v4.event.pageY) + "px") |
99 | 97 | }) |
100 | 98 | .on("mouseleave", function(d) { |
101 | 99 | console.log("leave") |
102 | 100 | tooltip.text("") |
103 | | - .style("visibility", "hidden"); |
104 | | - d.style("fill-opacity", 1); |
105 | | - }); |
| 101 | + .style("visibility", "hidden") |
| 102 | + d.style("fill-opacity", 1) |
| 103 | + }) |
106 | 104 | } |
0 commit comments