Commit 1bf2fe27 authored by Jacob Schatz's avatar Jacob Schatz

Merge branch 'reduce-contributions-calendar-payload' into 'master'

Reduce contributions calendar data payload

## What does this MR do?
Reduces the contributions calendar data payload by only passing contribution dates and counts

## Are there points in the code the reviewer needs to double check?
Please double check my javascript code 😃 

## Why was this MR needed?

Reduce user's bandwidth and decrease website loading time

## What are the relevant issue numbers?
Closes #20862 

## Screenshots (if relevant)
Before:
![Screen_Shot_2016-08-11_at_3.55.55_PM](/uploads/382842b3c889978bb302bd9057701ec3/Screen_Shot_2016-08-11_at_3.55.55_PM.png)
```
new Calendar(
  {"1439269200":0,"1439355600":0,"1439442000":0,"1439528400":0,"1439614800":0,"1439701200":0,"1439787600":0,"1439874000":0,"1439960400":0,"1440046800":0,"1440133200":0,"1440219600":0,"1440306000":0,"1440392400":0,"1440478800":0,"1440565200":0,"1440651600":0,"1440738000":0,"1440824400":0,"1440910800":0,"1440997200":0,"1441083600":0,"1441170000":0,"1441256400":0,"1441342800":0,"1441429200":0,"1441515600":0,"1441602000":0,"1441688400":0,"1441774800":0,"1441861200":0,"1441947600":0,"1442034000":0,"1442120400":0,"1442206800":0,"1442293200":0,"1442379600":0,"1442466000":0,"1442552400":0,"1442638800":0,"1442725200":0,"1442811600":0,"1442898000":0,"1442984400":0,"1443070800":0,"1443157200":0,"1443243600":0,"1443330000":0,"1443416400":0,"1443502800":0,"1443589200":0,"1443675600":0,"1443762000":0,"1443848400":0,"1443934800":0,"1444021200":0,"1444107600":0,"1444194000":0,"1444280400":0,"1444366800":0,"1444453200":0,"1444539600":0,"1444626000":0,"1444712400":0,"1444798800":0,"1444885200":0,"1444971600":0,"1445058000":0,"1445144400":0,"1445230800":0,"1445317200":0,"1445403600":0,"1445490000":0,"1445576400":0,"1445662800":0,"1445749200":0,"1445835600":0,"1445922000":0,"1446008400":0,"1446094800":0,"1446181200":0,"1446267600":0,"1446354000":0,"1446444000":0,"1446530400":0,"1446616800":0,"1446703200":0,"1446789600":0,"1446876000":0,"1446962400":0,"1447048800":0,"1447135200":0,"1447221600":0,"1447308000":0,"1447394400":0,"1447480800":0,"1447567200":0,"1447653600":0,"1447740000":0,"1447826400":0,"1447912800":0,"1447999200":0,"1448085600":0,"1448172000":0,"1448258400":0,"1448344800":0,"1448431200":0,"1448517600":0,"1448604000":0,"1448690400":0,"1448776800":0,"1448863200":0,"1448949600":0,"1449036000":0,"1449122400":0,"1449208800":0,"1449295200":0,"1449381600":0,"1449468000":0,"1449554400":0,"1449640800":0,"1449727200":0,"1449813600":0,"1449900000":0,"1449986400":0,"1450072800":0,"1450159200":0,"1450245600":0,"1450332000":0,"1450418400":0,"1450504800":0,"1450591200":0,"1450677600":0,"1450764000":0,"1450850400":0,"1450936800":0,"1451023200":0,"1451109600":0,"1451196000":0,"1451282400":0,"1451368800":0,"1451455200":0,"1451541600":0,"1451628000":0,"1451714400":0,"1451800800":0,"1451887200":0,"1451973600":0,"1452060000":0,"1452146400":0,"1452232800":0,"1452319200":0,"1452405600":0,"1452492000":0,"1452578400":0,"1452664800":0,"1452751200":0,"1452837600":0,"1452924000":0,"1453010400":0,"1453096800":0,"1453183200":0,"1453269600":0,"1453356000":0,"1453442400":0,"1453528800":0,"1453615200":0,"1453701600":0,"1453788000":0,"1453874400":0,"1453960800":0,"1454047200":0,"1454133600":0,"1454220000":0,"1454306400":0,"1454392800":0,"1454479200":0,"1454565600":0,"1454652000":0,"1454738400":0,"1454824800":0,"1454911200":0,"1454997600":0,"1455084000":0,"1455170400":0,"1455256800":0,"1455343200":0,"1455429600":0,"1455516000":0,"1455602400":0,"1455688800":0,"1455775200":0,"1455861600":0,"1455948000":0,"1456034400":0,"1456120800":0,"1456207200":0,"1456293600":0,"1456380000":0,"1456466400":0,"1456552800":0,"1456639200":0,"1456725600":0,"1456812000":0,"1456898400":0,"1456984800":0,"1457071200":0,"1457157600":0,"1457244000":0,"1457330400":0,"1457416800":0,"1457503200":0,"1457589600":0,"1457676000":0,"1457762400":0,"1457848800":0,"1457931600":0,"1458018000":0,"1458104400":0,"1458190800":0,"1458277200":0,"1458363600":0,"1458450000":0,"1458536400":0,"1458622800":0,"1458709200":0,"1458795600":0,"1458882000":0,"1458968400":0,"1459054800":0,"1459141200":0,"1459227600":0,"1459314000":0,"1459400400":0,"1459486800":0,"1459573200":0,"1459659600":0,"1459746000":0,"1459832400":0,"1459918800":0,"1460005200":0,"1460091600":0,"1460178000":0,"1460264400":0,"1460350800":0,"1460437200":0,"1460523600":0,"1460610000":0,"1460696400":0,"1460782800":0,"1460869200":0,"1460955600":0,"1461042000":0,"1461128400":0,"1461214800":0,"1461301200":0,"1461387600":0,"1461474000":0,"1461560400":0,"1461646800":0,"1461733200":0,"1461819600":0,"1461906000":0,"1461992400":0,"1462078800":0,"1462165200":0,"1462251600":0,"1462338000":0,"1462424400":0,"1462510800":0,"1462597200":0,"1462683600":0,"1462770000":0,"1462856400":0,"1462942800":0,"1463029200":0,"1463115600":0,"1463202000":0,"1463288400":0,"1463374800":0,"1463461200":0,"1463547600":0,"1463634000":0,"1463720400":0,"1463806800":0,"1463893200":0,"1463979600":0,"1464066000":0,"1464152400":0,"1464238800":0,"1464325200":0,"1464411600":0,"1464498000":0,"1464584400":0,"1464670800":0,"1464757200":0,"1464843600":0,"1464930000":0,"1465016400":0,"1465102800":0,"1465189200":0,"1465275600":0,"1465362000":0,"1465448400":0,"1465534800":0,"1465621200":0,"1465707600":0,"1465794000":0,"1465880400":0,"1465966800":0,"1466053200":0,"1466139600":0,"1466226000":0,"1466312400":0,"1466398800":0,"1466485200":0,"1466571600":0,"1466658000":0,"1466744400":0,"1466830800":0,"1466917200":0,"1467003600":0,"1467090000":0,"1467176400":0,"1467262800":0,"1467349200":0,"1467435600":0,"1467522000":0,"1467608400":0,"1467694800":0,"1467781200":0,"1467867600":0,"1467954000":0,"1468040400":0,"1468126800":0,"1468213200":0,"1468299600":0,"1468386000":0,"1468472400":0,"1468558800":0,"1468645200":0,"1468731600":0,"1468818000":0,"1468904400":0,"1468990800":0,"1469077200":0,"1469163600":17,"1469250000":0,"1469336400":0,"1469422800":3,"1469509200":14,"1469595600":54,"1469682000":0,"1469768400":4,"1469854800":1,"1469941200":0,"1470027600":0,"1470114000":0,"1470200400":1,"1470286800":0,"1470373200":1,"1470459600":0,"1470546000":0,"1470632400":0,"1470718800":0,"1470805200":0,"1470891600":2},
  '/u/root/calendar_activities'
);
```


After:
![Screen_Shot_2016-08-11_at_3.56.36_PM](/uploads/9325cdb8c0271075abee2a838c1a0787/Screen_Shot_2016-08-11_at_3.56.36_PM.png)

```
new Calendar(
  {"1469163600":17,"1469422800":3,"1469509200":14,"1469595600":54,"1469768400":4,"1469854800":1,"1470200400":1,"1470373200":1,"1470891600":2},
  '/u/root/calendar_activities'
);
```
## Does this MR meet the acceptance criteria?

- [x] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added
- Tests
  - [x] All builds are passing
- [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides)
- [x] Branch has no merge conflicts with `master` (if you do - rebase it please)
- [x] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)

See merge request !5784
parents f2df4c68 a15e9f02
......@@ -3,6 +3,7 @@ Please view this file on the master branch, on stable branches it's out of date.
v 8.12.0 (unreleased)
- Add two-factor recovery endpoint to internal API !5510
- Change merge_error column from string to text type
- Reduce contributions calendar data payload (ClemMakesApps)
- Add `web_url` field to issue, merge request, and snippet API objects (Ben Boeckel)
- Set path for all JavaScript cookies to honor GitLab's subdirectory setting !5627 (Mike Greiling)
- Add hover color to emoji icon (ClemMakesApps)
......
......@@ -67,6 +67,14 @@
$.timeago.settings.strings = tmpLocale;
};
w.gl.utils.getDayDifference = function(a, b) {
var millisecondsPerDay = 1000 * 60 * 60 * 24;
var date1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
var date2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
return Math.floor((date2 - date1) / millisecondsPerDay);
}
})(window);
}).call(this);
......@@ -3,7 +3,6 @@
this.Calendar = (function() {
function Calendar(timestamps, calendar_activities_path) {
var group, i;
this.calendar_activities_path = calendar_activities_path;
this.clickDay = bind(this.clickDay, this);
this.currentSelectedDate = '';
......@@ -13,26 +12,36 @@
this.monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
this.months = [];
this.timestampsTmp = [];
i = 0;
group = 0;
_.each(timestamps, (function(_this) {
return function(count, date) {
var day, innerArray, newDate;
newDate = new Date(parseInt(date) * 1000);
day = newDate.getDay();
if ((day === 0 && i !== 0) || i === 0) {
_this.timestampsTmp.push([]);
group++;
}
innerArray = _this.timestampsTmp[group - 1];
innerArray.push({
count: count,
date: newDate,
day: day
});
return i++;
};
})(this));
var group = 0;
var today = new Date()
today.setHours(0, 0, 0, 0, 0);
var oneYearAgo = new Date(today);
oneYearAgo.setFullYear(today.getFullYear() - 1);
var days = gl.utils.getDayDifference(oneYearAgo, today);
for(var i = 0; i <= days; i++) {
var date = new Date(oneYearAgo);
date.setDate(date.getDate() + i);
var day = date.getDay();
var count = timestamps[date.getTime() * 0.001];
if ((day === 0 && i !== 0) || i === 0) {
this.timestampsTmp.push([]);
group++;
}
var innerArray = this.timestampsTmp[group - 1];
innerArray.push({
count: count || 0,
date: date,
day: day
});
}
this.colorKey = this.initColorKey();
this.color = this.initColor();
this.renderSvg(group);
......
......@@ -23,7 +23,6 @@ module Gitlab
dates.each do |date|
date_id = date.to_time.to_i.to_s
@timestamps[date_id] = 0
day_events = events.find { |day_events| day_events["date"] == date }
if day_events
......
......@@ -29,3 +29,22 @@ describe 'Date time utils', ->
it 'should return Saturday', ->
day = gl.utils.getDayName(new Date('07/23/2016'))
expect(day).toBe('Saturday')
describe 'get day difference', ->
it 'should return 7', ->
firstDay = new Date('07/01/2016')
secondDay = new Date('07/08/2016')
difference = gl.utils.getDayDifference(firstDay, secondDay)
expect(difference).toBe(7)
it 'should return 31', ->
firstDay = new Date('07/01/2016')
secondDay = new Date('08/01/2016')
difference = gl.utils.getDayDifference(firstDay, secondDay)
expect(difference).toBe(31)
it 'should return 365', ->
firstDay = new Date('07/02/2015')
secondDay = new Date('07/01/2016')
difference = gl.utils.getDayDifference(firstDay, secondDay)
expect(difference).toBe(365)
\ No newline at end of file
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