d3.select('#main')
.selectAll('div')
.data(d3.timeMonth.range(
d3.timeYear.floor(new Date()),
d3.timeYear.ceil(new Date()))
)
.enter().append('div')
.attr('class', 'monthBox')
.append('div')
.attr('class', 'monthLabel')
.text(d => monthNames[d.getMonth()])
.data().forEach(currentMonth => {
let weeks = d3.selectAll('.monthBox').filter(d => d == currentMonth)
.append('div')
.selectAll('div')
.data( d => d3.timeWeek.range(
d3.timeWeek.offset(d,d.getDay()==0 ? 0:-1),
d3.timeMonth.offset(d,1)
)
)
.enter().append('div')
.attr('class', 'weekBox')
.style('background-color', (d,i,a) => i % 2 == 0 ? "#FFF" : "#EFF");
weeks.data().forEach((currentWeek,weekIndex) => {
let days = d3.selectAll('.weekBox').filter(d => d == currentWeek)
.selectAll('div')
.data( datum => d3.timeDay.range(
datum,
d3.timeDay.offset(datum,7)
)
)
.enter().append('div')
.attr('class', 'dateBox')
.style('background-color', datum => {
let bgColor;
if( currentMonth.getMonth() == datum.getMonth() )
if( datum.toDateString() === new Date().toDateString() )
bgColor = "#FF5"
else
bgColor = datum.backgroundColor
else
bgColor = "#EEE"
return bgColor
});
days.text( datum => {
let dateString;
if( currentMonth.getMonth() == datum.getMonth() ) {
dateString = datum.getDate();
}
return dateString
});
})
});