summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/users
diff options
context:
space:
mode:
authorFatih Acet <acetfatih@gmail.com>2016-07-24 23:45:11 +0300
committerFatih Acet <acetfatih@gmail.com>2016-07-24 23:45:11 +0300
commitaaa9509d120524573085e94af9de5cdde83e3271 (patch)
tree3824cffd4cdd132ee9cf75a00a7624f5ccc0dabd /app/assets/javascripts/users
parent56b79181adc0bd6e9abef97ea075c14be971a01a (diff)
downloadgitlab-ce-aaa9509d120524573085e94af9de5cdde83e3271.tar.gz
ES6ify all the things!
Diffstat (limited to 'app/assets/javascripts/users')
-rw-r--r--app/assets/javascripts/users/calendar.js192
-rw-r--r--app/assets/javascripts/users/calendar.js.coffee194
-rw-r--r--app/assets/javascripts/users/users_bundle.js7
-rw-r--r--app/assets/javascripts/users/users_bundle.js.coffee2
4 files changed, 199 insertions, 196 deletions
diff --git a/app/assets/javascripts/users/calendar.js b/app/assets/javascripts/users/calendar.js
new file mode 100644
index 00000000000..8b3dbf5f5ae
--- /dev/null
+++ b/app/assets/javascripts/users/calendar.js
@@ -0,0 +1,192 @@
+(function() {
+ var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+ 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 = '';
+ this.daySpace = 1;
+ this.daySize = 15;
+ this.daySizeWithSpace = this.daySize + (this.daySpace * 2);
+ 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));
+ this.colorKey = this.initColorKey();
+ this.color = this.initColor();
+ this.renderSvg(group);
+ this.renderDays();
+ this.renderMonths();
+ this.renderDayTitles();
+ this.renderKey();
+ this.initTooltips();
+ }
+
+ Calendar.prototype.renderSvg = function(group) {
+ return this.svg = d3.select('.js-contrib-calendar').append('svg').attr('width', (group + 1) * this.daySizeWithSpace).attr('height', 167).attr('class', 'contrib-calendar');
+ };
+
+ Calendar.prototype.renderDays = function() {
+ return this.svg.selectAll('g').data(this.timestampsTmp).enter().append('g').attr('transform', (function(_this) {
+ return function(group, i) {
+ _.each(group, function(stamp, a) {
+ var lastMonth, lastMonthX, month, x;
+ if (a === 0 && stamp.day === 0) {
+ month = stamp.date.getMonth();
+ x = (_this.daySizeWithSpace * i + 1) + _this.daySizeWithSpace;
+ lastMonth = _.last(_this.months);
+ if (lastMonth != null) {
+ lastMonthX = lastMonth.x;
+ }
+ if (lastMonth == null) {
+ return _this.months.push({
+ month: month,
+ x: x
+ });
+ } else if (month !== lastMonth.month && x - _this.daySizeWithSpace !== lastMonthX) {
+ return _this.months.push({
+ month: month,
+ x: x
+ });
+ }
+ }
+ });
+ return "translate(" + ((_this.daySizeWithSpace * i + 1) + _this.daySizeWithSpace) + ", 18)";
+ };
+ })(this)).selectAll('rect').data(function(stamp) {
+ return stamp;
+ }).enter().append('rect').attr('x', '0').attr('y', (function(_this) {
+ return function(stamp, i) {
+ return _this.daySizeWithSpace * stamp.day;
+ };
+ })(this)).attr('width', this.daySize).attr('height', this.daySize).attr('title', (function(_this) {
+ return function(stamp) {
+ var contribText, date, dateText;
+ date = new Date(stamp.date);
+ contribText = 'No contributions';
+ if (stamp.count > 0) {
+ contribText = stamp.count + " contribution" + (stamp.count > 1 ? 's' : '');
+ }
+ dateText = dateFormat(date, 'mmm d, yyyy');
+ return contribText + "<br />" + (gl.utils.getDayName(date)) + " " + dateText;
+ };
+ })(this)).attr('class', 'user-contrib-cell js-tooltip').attr('fill', (function(_this) {
+ return function(stamp) {
+ if (stamp.count !== 0) {
+ return _this.color(Math.min(stamp.count, 40));
+ } else {
+ return '#ededed';
+ }
+ };
+ })(this)).attr('data-container', 'body').on('click', this.clickDay);
+ };
+
+ Calendar.prototype.renderDayTitles = function() {
+ var days;
+ days = [
+ {
+ text: 'M',
+ y: 29 + (this.daySizeWithSpace * 1)
+ }, {
+ text: 'W',
+ y: 29 + (this.daySizeWithSpace * 3)
+ }, {
+ text: 'F',
+ y: 29 + (this.daySizeWithSpace * 5)
+ }
+ ];
+ return this.svg.append('g').selectAll('text').data(days).enter().append('text').attr('text-anchor', 'middle').attr('x', 8).attr('y', function(day) {
+ return day.y;
+ }).text(function(day) {
+ return day.text;
+ }).attr('class', 'user-contrib-text');
+ };
+
+ Calendar.prototype.renderMonths = function() {
+ return this.svg.append('g').selectAll('text').data(this.months).enter().append('text').attr('x', function(date) {
+ return date.x;
+ }).attr('y', 10).attr('class', 'user-contrib-text').text((function(_this) {
+ return function(date) {
+ return _this.monthNames[date.month];
+ };
+ })(this));
+ };
+
+ Calendar.prototype.renderKey = function() {
+ var keyColors;
+ keyColors = ['#ededed', this.colorKey(0), this.colorKey(1), this.colorKey(2), this.colorKey(3)];
+ return this.svg.append('g').attr('transform', "translate(18, " + (this.daySizeWithSpace * 8 + 16) + ")").selectAll('rect').data(keyColors).enter().append('rect').attr('width', this.daySize).attr('height', this.daySize).attr('x', (function(_this) {
+ return function(color, i) {
+ return _this.daySizeWithSpace * i;
+ };
+ })(this)).attr('y', 0).attr('fill', function(color) {
+ return color;
+ });
+ };
+
+ Calendar.prototype.initColor = function() {
+ var colorRange;
+ 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);
+ };
+
+ Calendar.prototype.initColorKey = function() {
+ return d3.scale.linear().range(['#acd5f2', '#254e77']).domain([0, 3]);
+ };
+
+ Calendar.prototype.clickDay = function(stamp) {
+ var formatted_date;
+ if (this.currentSelectedDate !== stamp.date) {
+ this.currentSelectedDate = stamp.date;
+ formatted_date = this.currentSelectedDate.getFullYear() + "-" + (this.currentSelectedDate.getMonth() + 1) + "-" + this.currentSelectedDate.getDate();
+ return $.ajax({
+ url: this.calendar_activities_path,
+ data: {
+ date: formatted_date
+ },
+ cache: false,
+ dataType: 'html',
+ beforeSend: function() {
+ return $('.user-calendar-activities').html('<div class="text-center"><i class="fa fa-spinner fa-spin user-calendar-activities-loading"></i></div>');
+ },
+ success: function(data) {
+ return $('.user-calendar-activities').html(data);
+ }
+ });
+ } else {
+ return $('.user-calendar-activities').html('');
+ }
+ };
+
+ Calendar.prototype.initTooltips = function() {
+ return $('.js-contrib-calendar .js-tooltip').tooltip({
+ html: true
+ });
+ };
+
+ return Calendar;
+
+ })();
+
+}).call(this);
diff --git a/app/assets/javascripts/users/calendar.js.coffee b/app/assets/javascripts/users/calendar.js.coffee
deleted file mode 100644
index c49ba5186f2..00000000000
--- a/app/assets/javascripts/users/calendar.js.coffee
+++ /dev/null
@@ -1,194 +0,0 @@
-class @Calendar
- constructor: (timestamps, @calendar_activities_path) ->
- @currentSelectedDate = ''
- @daySpace = 1
- @daySize = 15
- @daySizeWithSpace = @daySize + (@daySpace * 2)
- @monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
- @months = []
-
- # 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
- @timestampsTmp = []
- i = 0
- group = 0
- _.each timestamps, (count, date) =>
- newDate = new Date parseInt(date) * 1000
- day = newDate.getDay()
-
- # Create a new group array if this is the first day of the week
- # or if is first object
- if (day is 0 and i isnt 0) or i is 0
- @timestampsTmp.push []
- group++
-
- innerArray = @timestampsTmp[group-1]
-
- # Push to the inner array the values that will be used to render map
- innerArray.push
- count: count
- date: newDate
- day: day
-
- i++
-
- # Init color functions
- @colorKey = @initColorKey()
- @color = @initColor()
-
- # Init the svg element
- @renderSvg(group)
- @renderDays()
- @renderMonths()
- @renderDayTitles()
- @renderKey()
-
- @initTooltips()
-
- renderSvg: (group) ->
- @svg = d3.select '.js-contrib-calendar'
- .append 'svg'
- .attr 'width', (group + 1) * @daySizeWithSpace
- .attr 'height', 167
- .attr 'class', 'contrib-calendar'
-
- renderDays: ->
- @svg.selectAll 'g'
- .data @timestampsTmp
- .enter()
- .append 'g'
- .attr 'transform', (group, i) =>
- _.each group, (stamp, a) =>
- if a is 0 and stamp.day is 0
- month = stamp.date.getMonth()
- x = (@daySizeWithSpace * i + 1) + @daySizeWithSpace
- lastMonth = _.last(@months)
- if lastMonth?
- lastMonthX = lastMonth.x
-
- if !lastMonth?
- @months.push
- month: month
- x: x
- else if month isnt lastMonth.month and x - @daySizeWithSpace isnt lastMonthX
- @months.push
- month: month
- x: x
-
- "translate(#{(@daySizeWithSpace * i + 1) + @daySizeWithSpace}, 18)"
- .selectAll 'rect'
- .data (stamp) ->
- stamp
- .enter()
- .append 'rect'
- .attr 'x', '0'
- .attr 'y', (stamp, i) =>
- (@daySizeWithSpace * stamp.day)
- .attr 'width', @daySize
- .attr 'height', @daySize
- .attr 'title', (stamp) =>
- date = new Date(stamp.date)
- contribText = 'No contributions'
-
- if stamp.count > 0
- contribText = "#{stamp.count} contribution#{if stamp.count > 1 then 's' else ''}"
-
- dateText = dateFormat(date, 'mmm d, yyyy')
-
- "#{contribText}<br />#{gl.utils.getDayName(date)} #{dateText}"
- .attr 'class', 'user-contrib-cell js-tooltip'
- .attr 'fill', (stamp) =>
- if stamp.count isnt 0
- @color(Math.min(stamp.count, 40))
- else
- '#ededed'
- .attr 'data-container', 'body'
- .on 'click', @clickDay
-
- renderDayTitles: ->
- days = [{
- text: 'M'
- y: 29 + (@daySizeWithSpace * 1)
- }, {
- text: 'W'
- y: 29 + (@daySizeWithSpace * 3)
- }, {
- text: 'F'
- y: 29 + (@daySizeWithSpace * 5)
- }]
- @svg.append 'g'
- .selectAll 'text'
- .data days
- .enter()
- .append 'text'
- .attr 'text-anchor', 'middle'
- .attr 'x', 8
- .attr 'y', (day) ->
- day.y
- .text (day) ->
- day.text
- .attr 'class', 'user-contrib-text'
-
- renderMonths: ->
- @svg.append 'g'
- .selectAll 'text'
- .data @months
- .enter()
- .append 'text'
- .attr 'x', (date) ->
- date.x
- .attr 'y', 10
- .attr 'class', 'user-contrib-text'
- .text (date) =>
- @monthNames[date.month]
-
- renderKey: ->
- keyColors = ['#ededed', @colorKey(0), @colorKey(1), @colorKey(2), @colorKey(3)]
- @svg.append 'g'
- .attr 'transform', "translate(18, #{@daySizeWithSpace * 8 + 16})"
- .selectAll 'rect'
- .data keyColors
- .enter()
- .append 'rect'
- .attr 'width', @daySize
- .attr 'height', @daySize
- .attr 'x', (color, i) =>
- @daySizeWithSpace * i
- .attr 'y', 0
- .attr 'fill', (color) ->
- color
-
- initColor: ->
- colorRange = ['#ededed', @colorKey(0), @colorKey(1), @colorKey(2), @colorKey(3)]
- d3.scale
- .threshold()
- .domain([0, 10, 20, 30])
- .range(colorRange)
-
- initColorKey: ->
- d3.scale
- .linear()
- .range(['#acd5f2', '#254e77'])
- .domain([0, 3])
-
- clickDay: (stamp) =>
- if @currentSelectedDate isnt stamp.date
- @currentSelectedDate = stamp.date
- formatted_date = @currentSelectedDate.getFullYear() + "-" + (@currentSelectedDate.getMonth()+1) + "-" + @currentSelectedDate.getDate()
-
- $.ajax
- url: @calendar_activities_path
- data:
- date: formatted_date
- cache: false
- dataType: 'html'
- beforeSend: ->
- $('.user-calendar-activities').html '<div class="text-center"><i class="fa fa-spinner fa-spin user-calendar-activities-loading"></i></div>'
- success: (data) ->
- $('.user-calendar-activities').html data
- else
- $('.user-calendar-activities').html ''
-
- initTooltips: ->
- $('.js-contrib-calendar .js-tooltip').tooltip
- html: true
diff --git a/app/assets/javascripts/users/users_bundle.js b/app/assets/javascripts/users/users_bundle.js
new file mode 100644
index 00000000000..b95faadc8e7
--- /dev/null
+++ b/app/assets/javascripts/users/users_bundle.js
@@ -0,0 +1,7 @@
+
+/*= require_tree . */
+
+(function() {
+
+
+}).call(this);
diff --git a/app/assets/javascripts/users/users_bundle.js.coffee b/app/assets/javascripts/users/users_bundle.js.coffee
deleted file mode 100644
index 91cacfece46..00000000000
--- a/app/assets/javascripts/users/users_bundle.js.coffee
+++ /dev/null
@@ -1,2 +0,0 @@
-#
-#= require_tree .