Skip to content

Instantly share code, notes, and snippets.

@saevarom
Forked from mbostock/.block
Last active May 2, 2019 10:52
Show Gist options
  • Save saevarom/05ec04bd343079843987a2d39cafc8e0 to your computer and use it in GitHub Desktop.
Save saevarom/05ec04bd343079843987a2d39cafc8e0 to your computer and use it in GitHub Desktop.
Exercise calendar
license: gpl-3.0
height: 435
border: no
Date Description Q
2016-01-06 Crossfit 1
2016-01-08 Crossfit 1
2016-01-13 Crossfit 1
2016-01-15 Crossfit 1
2016-01-16 Run 5km 1
2016-01-18 Crossfit 1
2016-01-22 Crossfit 1
2016-01-24 Run 5km 1
2016-01-25 Crossfit 1
2016-02-01 Crossfit 1
2016-02-08 Crossfit 1
2016-02-10 Crossfit 1
2016-02-12 Crossfit 1
2016-02-17 Crossfit 1
2016-02-19 Crossfit 1
2016-02-22 Crossfit 1
2016-02-29 Crossfit 1
2016-03-07 Run 5km 1
2016-03-09 Crossfit 1
2016-03-10 Run 10km 1
2016-03-14 Crossfit 1
2016-03-16 Crossfit 1
2016-03-20 Run 10km 1
2016-03-21 Crossfit 1
2016-03-24 Crossfit 1
2016-03-30 Crossfit 1
2016-04-02 Run 4km 1
2016-04-04 Crossfit 1
2016-04-08 Crossfit 1
2016-04-13 Crossfit 1
2016-04-15 Crossfit 1
2016-04-18 Crossfit 1
2016-04-25 Bike 18km 1
2016-04-27 Crossfit 1
2016-05-06 Crossfit 1
2016-05-14 Crossfit 1
2016-05-15 Run 11km 1
2016-05-18 Crossfit 1
2016-05-20 Crossfit 1
2016-05-26 Run 10km 1
2016-05-30 Crossfit 1
2016-06-01 Crossfit, bike 2
2016-06-13 Crossfit 1
2016-06-16 Crossfit 1
2016-06-27 Run 5km 1
2016-08-03 Crossfit 1
2016-08-05 Crossfit 1
2016-08-06 Run 10km 1
2016-08-08 Crossfit 1
2016-08-10 Crossfit 1
2016-11-07 Crossfit 1
2016-11-09 Crossfit 1
2016-11-10 Run 10km 1
2016-11-14 Crossfit 1
2016-11-16 Crossfit 1
2016-11-18 Crossfit 1
2016-11-21 Crossfit 1
2016-11-23 Crossfit 1
2016-11-30 Crossfit 1
2016-12-05 Crossfit 1
2016-12-12 Crossfit 1
2016-12-17 Crossfit 1
2016-12-19 Crossfit 1
2016-12-29 Crossfit 1
2017-01-06 Crossfit 1
2017-01-09 Crossfit 1
2017-01-13 Crossfit 1
2017-01-15 Run 1
2017-01-16 Crossfit 1
2017-01-20 Crossfit 1
2017-01-23 Crossfit 1
2017-01-25 Crossfit 1
2017-01-30 Crossfit 1
2017-02-01 Crossfit 1
2017-02-03 Crossfit 1
2017-02-06 Crossfit 1
2017-02-08 Crossfit 1
2017-02-13 Crossfit 1
2017-02-15 Crossfit 1
2017-02-17 Crossfit 1
2017-02-22 Crossfit 1
2017-02-24 Crossfit 1
2017-02-27 Crossfit 1
2017-03-01 Crossfit 1
2017-03-03 Crossfit 1
2017-03-06 Crossfit 1
2017-03-08 Crossfit 1
2017-03-13 Crossfit 1
2017-03-15 Crossfit 1
2017-03-17 Crossfit 1
2017-03-22 Crossfit 1
2017-03-24 Crossfit 1
2017-03-27 Crossfit 1
2017-03-31 Crossfit 1
2017-04-03 Crossfit 1
2017-04-05 Crossfit 1
2017-04-07 Crossfit 1
2017-04-10 Crossfit 1
2017-04-19 Crossfit 1
2017-04-21 Crossfit 1
2017-04-26 Crossfit 1
2017-05-05 Bike 1
2017-05-06 Bike 1
2017-05-15 Crossfit 1
2017-05-19 Crossfit 1
2017-05-22 Crossfit 1
2017-05-24 Crossfit 1
2017-05-25 jump-n-rope 1
2017-05-28 Run, bike 2
2017-05-29 Crossfit 1
2017-05-31 Crossfit 1
2017-06-07 Crossfit 1
2017-06-09 Bike 1
2017-06-12 Crossfit 1
2017-06-14 Crossfit 1
2017-06-16 Crossfit 1
2017-06-19 Bike & Crossfit 2
2017-06-23 Run 10km, Bike 2
2017-07-10 Crossfit 1
2017-07-17 Run 6.26km 1
2017-07-20 Run 4.89km 1
2017-07-27 Run 3.67km 1
2017-08-11 Bike & Crossfit 2
2017-08-14 Crossfit 1
2017-08-16 Crossfit 1
2017-08-19 Run 10km 1
2017-08-21 Crossfit 1
2017-08-26 Run Tindar 12KM 1
2017-08-30 Crossfit 1
2017-09-01 Crossfit 1
2017-09-06 Crossfit 1
2017-09-08 Crossfit 1
2017-09-11 Crossfit 1
2017-09-13 Crossfit 1
2017-09-18 Crossfit 1
2017-09-20 Crossfit 1
2017-09-22 Crossfit 1
2017-09-25 Crossfit 1
2017-09-27 Crossfit, Bike 10.3km 2
2017-09-29 Crossfit 1
2017-10-02 Crossfit 1
2017-10-04 Crossfit 1
2017-10-06 Crossfit 1
2017-10-11 Crossfit 1
2017-10-13 Crossfit 1
2017-10-16 Crossfit 1
2017-10-19 5K run central park 1
2017-11-01 Crossfit 1
2017-11-03 Crossfit 1
2017-11-06 Crossfit 1
2017-11-08 Crossfit 1
2017-11-10 Crossfit 1
2017-11-20 Crossfit 1
2017-12-06 Crossfit 1
2017-12-11 Crossfit 1
2017-12-15 Crossfit 1
2017-12-18 Crossfit 1
2017-12-30 Run 10km 1
2018-01-03 Crossfit 1
2018-01-08 Crossfit 1
2018-01-10 Crossfit 1
2018-01-12 Crossfit 1
2018-01-15 Crossfit 1
2018-01-17 Crossfit 1
2018-01-19 Crossfit 1
2018-01-22 Crossfit 1
2018-01-24 Crossfit 1
2018-01-26 Crossfit 1
2018-01-29 Crossfit 1
2018-01-31 Crossfit 1
2018-02-02 Crossfit 1
2018-02-05 Crossfit 1
2018-02-07 Crossfit 1
2018-02-09 Crossfit 1
2018-02-12 Crossfit 1
2018-02-19 Crossfit 1
2018-02-22 Crossfit 1
2018-02-23 Crossfit Open 18.1 1
2018-02-26 Crossfit Open 18.1 1
2018-02-28 Crossfit 1
2018-03-02 Crossfit Open 18.2 1
2018-03-05 Run 5km 1
2018-03-12 Crossfit 1
2018-03-14 Crossfit 1
2018-03-16 Crossfit 1
2018-03-20 Crossfit 1
2018-03-22 Crossfit 1
2018-03-28 Crossfit 1
2018-04-04 Crossfit 1
2018-04-06 Crossfit 1
2018-04-09 Crossfit 1
2018-04-11 Crossfit 1
2018-04-13 Crossfit 1
2018-04-16 Crossfit 1
2018-04-17 Bike 12.5km 1
2018-04-18 Crossfit 1
2018-04-20 Crossfit 1
2018-04-18 Crossfit 1
2018-04-23 Crossfit 1
2018-04-27 Crossfit 1
2018-04-29 5km Run 1
2018-05-03 Crossfit 1
2018-05-07 Crossfit-11km cycling 2
2018-05-09 Crossfit-Hiking 2
2018-05-11 Crossfit 1
2018-05-14 Crossfit 1
2018-05-16 Crossfit 1
2018-05-18 Crossfit 1
2018-05-23 11km Run 1
2018-05-26 5km Run 1
2018-05-28 Crossfit 1
2018-05-30 Crossfit 1
2018-06-01 Crossfit 1
2018-06-02 8km Hike 1
2018-06-04 Crossfit 1
2018-06-08 Crossfit 1
2018-06-11 Crossfit 1
2018-06-15 Crossfit 1
2018-06-18 Crossfit 1
2018-06-20 Cycling 10km 1
2018-06-26 Crossfit + Cycling 10km 2
2018-06-28 Run 5.8k 1
2018-06-29 Crossfit 1
2018-06-30 Run 11k 1
2018-07-04 Crossfit 1
2018-07-06 Crossfit 1
2018-07-14 Run 5k 1
2018-07-17 Run 5k 1
2018-07-18 Fjölskylduganga 1
2018-07-26 Crossfit 1
2018-07-27 Fjörður ganga 1
2018-07-28 Fjörður ganga 1
2018-07-29 Fjörður ganga 1
2018-07-30 Fjörður ganga 1
2018-08-03 Crossfit 1
2018-08-09 Crossfit 1
2018-08-10 Cycling 10km 1
2018-08-13 Crossfit 1
2018-08-14 Crossfit 1
2018-08-16 Row 5km 1
2018-08-18 Row 10km 1
2018-08-22 Bryanston 1
2018-08-31 Crossfit 1
2018-09-03 Crossfit 1
2018-09-07 Crossfit 1
2018-09-10 Crossfit 1
2018-09-15 Crossfit 1
2018-09-17 Crossfit 1
2018-09-19 Crossfit 1
2018-09-21 Crossfit 1
2018-09-22 5km Row 1
2018-09-24 Crossfit 1
2018-09-26 Crossfit 1
2018-09-27 12km bike 1
2018-09-28 Crossfit 1
2018-10-01 Crossfit 1
2018-10-03 Crossfit 1
2018-10-05 Crossfit 1
2018-10-11 Crossfit 1
2018-10-12 Crossfit 1
2018-10-15 Crossfit 1
2018-10-24 Crossfit 1
2018-10-26 Crossfit 1
2018-10-29 Crossfit 1
2018-10-31 Crossfit 1
2018-11-01 10km run 1
2018-11-05 Crossfit 1
2018-11-10 Crossfit 1
2018-11-12 Crossfit 1
2018-11-13 5km row 1
2018-11-19 Crossfit 1
2018-11-26 Crossfit 1
2018-11-28 Crossfit 1
2018-12-01 Crossfit 1
2018-12-08 Row 1.5km 1
2018-12-10 Crossfit 1
2018-12-12 Crossfit 1
2018-12-14 Crossfit 1
2018-12-15 Crossfit 1
2018-12-17 Crossfit 1
2018-12-19 Crossfit 1
2018-12-28 Crossfit 1
2018-12-31 Crossfit 1
2019-01-03 Crossfit 1
2019-01-07 Crossfit 1
2019-01-09 Crossfit 1
2019-01-11 Crossfit 1
2019-01-12 Crossfit-heima 1
2019-01-14 Crossfit 1
2019-01-16 Crossfit 1
2019-01-18 Crossfit 1
2019-01-19 Crossfit-heima 1
2019-01-21 Crossfit 1
2019-01-23 Endurance 1
2019-01-25 Row 30m 1
2019-01-26 Endurance 1
2019-01-29 Endurance 1
2019-01-31 Endurance 1
2019-02-01 Crossfit 1
2019-02-03 Endurance 1
2019-02-04 Endurance 1
2019-02-06 Endurance 1
2019-02-08 Crossfit 1
2019-02-10 Endurance 1
2019-02-11 Endurance 1
2019-02-14 Endurance 1
2019-02-15 Crossfit 1
2019-02-16 Crossfit 1
2019-02-18 Endurance 1
2019-02-20 Endurance 1
2019-02-21 Endurance 1
2019-02-22 Crossfit 1
2019-02-26 Endurance 1
2019-02-27 Endurance 1
2019-02-28 Endurance 1
2019-03-01 Crossfit 1
2019-03-04 Crossfit 1
2019-03-05 Endurance 1
2019-03-06 Endurance 1
2019-03-11 Crossfit 1
2019-03-14 Endurance 1
2019-03-16 Crossfit 1
2019-03-18 Crossfit 1
2019-03-20 Endurance 1
2019-03-22 Crossfit 1
2019-03-28 Crossfit 1
2019-03-30 Crossfit-heima 1
2019-04-01 Crossfit 1
2019-04-03 Crossfit 1
2019-04-11 Crossfit 1
2019-04-12 Crossfit 1
2019-04-17 Crossfit 1
2019-04-18 Crossfit 1
2019-04-19 Crossfit 1
2019-04-25 Row 10km 1
2019-04-26 Crossfit 1
2019-04-29 Crossfit 1
2019-05-01 Bike 26km 1
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
.future {
fill: #eee;
}
</style>
</head>
<body>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
<script>
var monthNames = ["Jan", "Feb", "Mar", "Apr", "Maí", "Jún", "Júl", "Ágú", "Sep", "Okt", "Nóv", "Des"]
var weeksInMonth = function(month){
var m = d3.timeMonth.floor(month)
return d3.timeWeeks(d3.timeWeek.floor(m), d3.timeMonth.offset(m,1)).length;
}
var width = 960,
height = 136,
cellSize = 17,
now = new Date();
var formatPercent = d3.format(".1%");
var color = d3.scaleQuantize()
.domain([1, 3])
.range(["#e5f5e0", "#a1d99b", "#31a354"]);
var svg = d3.select("body")
.selectAll("svg")
.data(d3.range(2016, 2020))
.enter().append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + ((width - cellSize * 53) / 2) + "," + (height - cellSize * 7 - 1) + ")");
svg.append("text")
.attr("transform", "translate(-6," + cellSize * 3.5 + ")rotate(-90)")
.attr("font-family", "sans-serif")
.attr("font-size", 10)
.attr("text-anchor", "middle")
.text(function(d) { return d; });
window.inActiveWeeks = {}
var rect = svg.append("g")
.attr("fill", "none")
.attr("stroke", "#ccc")
.selectAll("rect")
.data(function(d) { return d3.timeDays(new Date(d, 0, 1), new Date(d + 1, 0, 1)); })
.enter().append("rect")
.attr("width", cellSize)
.attr("height", cellSize)
.attr("x", function(d) { return d3.timeWeek.count(d3.timeYear(d), d) * cellSize; })
.attr("y", function(d) { return d.getDay() * cellSize; })
.attr("class", function(d) {
var str = moment(d).format("YYYY-w");
str += (d < now ? " past" : " future");
return str
})
.datum(d3.timeFormat("%Y-%m-%d"))
svg.append("g")
.attr("fill", "none")
.attr("stroke", "#000")
.selectAll("path")
.data(function(d) { return d3.timeMonths(new Date(d, 0, 1), new Date(d + 1, 0, 1)); })
.enter().append("path")
.attr("d", pathMonth);
svg.append("g")
.selectAll("text")
.data(function(d) { return d3.timeMonths(new Date(d, 0, 1), new Date(d + 1, 0, 1)) })
.enter().append("text")
.attr("x", function(d) {
column = moment(d).isoWeek()
if (d.getMonth() === 0 && column > 50) {
column -= 52
}
return column*cellSize + 1.5*cellSize;
})
.attr("y", "-6")
.attr("font-family", "sans-serif")
.attr("font-size", 10)
.attr("text-anchor", "middle")
.text(function(d) { return monthNames[d.getMonth()]; })
var weekdaynames = ["S", "M", "Þ", "M", "F", "F", "L"]
svg.append("g")
.selectAll("text")
.data([0, 1, 2, 3, 4, 5, 6])
.enter().append("text")
.attr("x", "910")
.attr("y", function(d) { return (d+0.75)*cellSize})
.attr("font-family", "sans-serif")
.attr("font-size", 10)
.attr("text-anchor", "middle")
.text(function(d) { return weekdaynames[d] })
d3.csv("data.csv", function(error, csv) {
if (error) throw error;
var data = d3.nest()
.key(function(d) { return d.Date; })
.rollup(function(d) { return d[0].Q; })
.object(csv);
var texts = d3.nest()
.key(function(d) { return d.Date; })
.rollup(function(d) { return d[0].Description; })
.object(csv);
window.weekData = d3.nest()
.key(function(d) { return ""+moment(d.Date).get('year')+"-"+moment(d.Date).week(); })
.rollup(function(d) { return d[0].Q; })
.object(csv);
rect.filter(function(d) { return true; })
.attr("fill", function(d) {
if (data[d] !== undefined) {
return color(data[d]);
} else {
var str = moment(d).format("YYYY-w");
if (window.weekData && window.weekData[str] === undefined) {
return "#FF9090"
}
}
})
.append("title")
.text(function(d) {
if (data[d] !== undefined) {
return "" + d + ": " + texts[d] + " (" + data[d] +")";
}
return ""
});
});
function pathMonth(t0) {
var t1 = new Date(t0.getFullYear(), t0.getMonth() + 1, 0),
d0 = t0.getDay(), w0 = d3.timeWeek.count(d3.timeYear(t0), t0),
d1 = t1.getDay(), w1 = d3.timeWeek.count(d3.timeYear(t1), t1);
return "M" + (w0 + 1) * cellSize + "," + d0 * cellSize
+ "H" + w0 * cellSize + "V" + 7 * cellSize
+ "H" + w1 * cellSize + "V" + (d1 + 1) * cellSize
+ "H" + (w1 + 1) * cellSize + "V" + 0
+ "H" + (w0 + 1) * cellSize + "Z";
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment