Commit 288e8ea1 authored by Mike Greiling's avatar Mike Greiling

resolve remaining eslint violations

parent 17b43cd4
/* eslint-disable no-var, vars-on-top, one-var, one-var-declaration-per-line, max-len, class-methods-use-this */
import d3 from 'd3'; import d3 from 'd3';
const LOADING_HTML = ` const LOADING_HTML = `
...@@ -8,8 +6,22 @@ const LOADING_HTML = ` ...@@ -8,8 +6,22 @@ const LOADING_HTML = `
</div> </div>
`; `;
function formatTooltipText({ date, count }) {
const dateObject = new Date(date);
const dateDayName = gl.utils.getDayName(dateObject);
const dateText = dateObject.format('mmm d, yyyy');
let contribText = 'No contributions';
if (count > 0) {
contribText = `${count} contribution${count > 1 ? 's' : ''}`;
}
return `${contribText}<br />${dateDayName} ${dateText}`;
}
const initColorKey = () => d3.scale.linear().range(['#acd5f2', '#254e77']).domain([0, 3]);
export default class ActivityCalendar { export default class ActivityCalendar {
constructor(timestamps, calendarActivitiesPath) { constructor(container, timestamps, calendarActivitiesPath) {
this.calendarActivitiesPath = calendarActivitiesPath; this.calendarActivitiesPath = calendarActivitiesPath;
this.clickDay = this.clickDay.bind(this); this.clickDay = this.clickDay.bind(this);
this.currentSelectedDate = ''; this.currentSelectedDate = '';
...@@ -22,22 +34,22 @@ export default class ActivityCalendar { ...@@ -22,22 +34,22 @@ export default class ActivityCalendar {
// Loop through the timestamps to create a group of objects // Loop through the timestamps to create a group of objects
// The group of objects will be grouped based on the day of the week they are // The group of objects will be grouped based on the day of the week they are
this.timestampsTmp = []; this.timestampsTmp = [];
var group = 0; let group = 0;
var today = new Date(); const today = new Date();
today.setHours(0, 0, 0, 0, 0); today.setHours(0, 0, 0, 0, 0);
var oneYearAgo = new Date(today); const oneYearAgo = new Date(today);
oneYearAgo.setFullYear(today.getFullYear() - 1); oneYearAgo.setFullYear(today.getFullYear() - 1);
var days = gl.utils.getDayDifference(oneYearAgo, today); const days = gl.utils.getDayDifference(oneYearAgo, today);
for (var i = 0; i <= days; i += 1) { for (let i = 0; i <= days; i += 1) {
var date = new Date(oneYearAgo); const date = new Date(oneYearAgo);
date.setDate(date.getDate() + i); date.setDate(date.getDate() + i);
var day = date.getDay(); const day = date.getDay();
var count = timestamps[date.format('yyyy-mm-dd')] || 0; const count = timestamps[date.format('yyyy-mm-dd')] || 0;
// Create a new group array if this is the first day of the week // Create a new group array if this is the first day of the week
// or if is first object // or if is first object
...@@ -47,28 +59,30 @@ export default class ActivityCalendar { ...@@ -47,28 +59,30 @@ export default class ActivityCalendar {
} }
// Push to the inner array the values that will be used to render map // Push to the inner array the values that will be used to render map
var innerArray = this.timestampsTmp[group - 1]; const innerArray = this.timestampsTmp[group - 1];
innerArray.push({ count, date, day }); innerArray.push({ count, date, day });
} }
// Init color functions // Init color functions
this.colorKey = this.initColorKey(); this.colorKey = initColorKey();
this.color = this.initColor(); this.color = this.initColor();
// Init the svg element // Init the svg element
this.renderSvg(group); this.svg = this.renderSvg(container, group);
this.renderDays(); this.renderDays();
this.renderMonths(); this.renderMonths();
this.renderDayTitles(); this.renderDayTitles();
this.renderKey(); this.renderKey();
this.initTooltips();
// Init tooltips
$(`${container} .js-tooltip`).tooltip({ html: true });
} }
// Add extra padding for the last month label if it is also the last column // Add extra padding for the last month label if it is also the last column
getExtraWidthPadding(group) { getExtraWidthPadding(group) {
var extraWidthPadding = 0; let extraWidthPadding = 0;
var lastColMonth = this.timestampsTmp[group - 1][0].date.getMonth(); const lastColMonth = this.timestampsTmp[group - 1][0].date.getMonth();
var secondLastColMonth = this.timestampsTmp[group - 2][0].date.getMonth(); const secondLastColMonth = this.timestampsTmp[group - 2][0].date.getMonth();
if (lastColMonth !== secondLastColMonth) { if (lastColMonth !== secondLastColMonth) {
extraWidthPadding = 3; extraWidthPadding = 3;
...@@ -77,9 +91,9 @@ export default class ActivityCalendar { ...@@ -77,9 +91,9 @@ export default class ActivityCalendar {
return extraWidthPadding; return extraWidthPadding;
} }
renderSvg(group) { renderSvg(container, group) {
var width = ((group + 1) * this.daySizeWithSpace) + this.getExtraWidthPadding(group); const width = ((group + 1) * this.daySizeWithSpace) + this.getExtraWidthPadding(group);
this.svg = d3.select('.js-contrib-calendar') return d3.select(container)
.append('svg') .append('svg')
.attr('width', width) .attr('width', width)
.attr('height', 167) .attr('height', 167)
...@@ -90,15 +104,14 @@ export default class ActivityCalendar { ...@@ -90,15 +104,14 @@ export default class ActivityCalendar {
this.svg.selectAll('g').data(this.timestampsTmp).enter().append('g') this.svg.selectAll('g').data(this.timestampsTmp).enter().append('g')
.attr('transform', (group, i) => { .attr('transform', (group, i) => {
_.each(group, (stamp, a) => { _.each(group, (stamp, a) => {
var lastMonth, lastMonthX, month, x;
if (a === 0 && stamp.day === 0) { if (a === 0 && stamp.day === 0) {
month = stamp.date.getMonth(); const month = stamp.date.getMonth();
x = (this.daySizeWithSpace * i) + 1 + this.daySizeWithSpace; const x = (this.daySizeWithSpace * i) + 1 + this.daySizeWithSpace;
lastMonth = _.last(this.months); const lastMonth = _.last(this.months);
if (lastMonth != null) { if (
lastMonthX = lastMonth.x; lastMonth == null ||
} (month !== lastMonth.month && x - this.daySizeWithSpace !== lastMonth.x)
if (lastMonth == null || (month !== lastMonth.month && x - this.daySizeWithSpace !== lastMonthX)) { ) {
this.months.push({ month, x }); this.months.push({ month, x });
} }
} }
...@@ -106,29 +119,20 @@ export default class ActivityCalendar { ...@@ -106,29 +119,20 @@ export default class ActivityCalendar {
return `translate(${(this.daySizeWithSpace * i) + 1 + this.daySizeWithSpace}, 18)`; return `translate(${(this.daySizeWithSpace * i) + 1 + this.daySizeWithSpace}, 18)`;
}) })
.selectAll('rect') .selectAll('rect')
.data(stamp => stamp) .data(stamp => stamp)
.enter() .enter()
.append('rect') .append('rect')
.attr('x', '0') .attr('x', '0')
.attr('y', stamp => this.daySizeWithSpace * stamp.day) .attr('y', stamp => this.daySizeWithSpace * stamp.day)
.attr('width', this.daySize) .attr('width', this.daySize)
.attr('height', this.daySize) .attr('height', this.daySize)
.attr('title', (stamp) => { .attr('fill', stamp => (
var contribText, date, dateText; stamp.count !== 0 ? this.color(Math.min(stamp.count, 40)) : '#ededed'
date = new Date(stamp.date); ))
contribText = 'No contributions'; .attr('title', stamp => formatTooltipText(stamp))
if (stamp.count > 0) { .attr('class', 'user-contrib-cell js-tooltip')
contribText = `${stamp.count} contribution${stamp.count > 1 ? 's' : ''}`; .attr('data-container', 'body')
} .on('click', this.clickDay);
dateText = date.format('mmm d, yyyy');
return `${contribText}<br />${gl.utils.getDayName(date)} ${dateText}`;
})
.attr('class', 'user-contrib-cell js-tooltip')
.attr('fill', stamp => (
stamp.count !== 0 ? this.color(Math.min(stamp.count, 40)) : '#ededed'
))
.attr('data-container', 'body')
.on('click', this.clickDay);
} }
renderDayTitles() { renderDayTitles() {
...@@ -190,15 +194,10 @@ export default class ActivityCalendar { ...@@ -190,15 +194,10 @@ export default class ActivityCalendar {
} }
initColor() { initColor() {
var colorRange; const colorRange = ['#ededed', this.colorKey(0), this.colorKey(1), this.colorKey(2), this.colorKey(3)];
colorRange = ['#ededed', this.colorKey(0), this.colorKey(1), this.colorKey(2), this.colorKey(3)];
return d3.scale.threshold().domain([0, 10, 20, 30]).range(colorRange); return d3.scale.threshold().domain([0, 10, 20, 30]).range(colorRange);
} }
initColorKey() {
return d3.scale.linear().range(['#acd5f2', '#254e77']).domain([0, 3]);
}
clickDay(stamp) { clickDay(stamp) {
if (this.currentSelectedDate !== stamp.date) { if (this.currentSelectedDate !== stamp.date) {
this.currentSelectedDate = stamp.date; this.currentSelectedDate = stamp.date;
...@@ -222,8 +221,4 @@ export default class ActivityCalendar { ...@@ -222,8 +221,4 @@ export default class ActivityCalendar {
$('.user-calendar-activities').html(''); $('.user-calendar-activities').html('');
} }
} }
initTooltips() {
$('.js-contrib-calendar .js-tooltip').tooltip({ html: true });
}
} }
...@@ -158,7 +158,7 @@ export default class UserTabs { ...@@ -158,7 +158,7 @@ export default class UserTabs {
$calendarWrap.html(CALENDAR_TEMPLATE); $calendarWrap.html(CALENDAR_TEMPLATE);
// eslint-disable-next-line no-new // eslint-disable-next-line no-new
new ActivityCalendar(activityData, calendarActivitiesPath); new ActivityCalendar('.js-contrib-calendar', activityData, calendarActivitiesPath);
}, },
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment