{"version":3,"sources":["webpack:///users.6ff182ca0242cd12112f.bundle.js","webpack:///./users/activity_calendar.js","webpack:///./users/index.js","webpack:///./users/user_tabs.js"],"names":["webpackJsonp","./users/activity_calendar.js","module","__webpack_exports__","__webpack_require__","$","_classCallCheck","instance","Constructor","TypeError","getSystemDate","systemUtcOffsetSeconds","date","Date","localUtcOffsetMinutes","getTimezoneOffset","systemUtcOffsetMinutes","setMinutes","getMinutes","formatTooltipText","_ref","count","dateObject","dateDayName","gl","utils","getDayName","dateText","format","contribText","__WEBPACK_IMPORTED_MODULE_0_underscore__","__WEBPACK_IMPORTED_MODULE_0_underscore___default","n","__WEBPACK_IMPORTED_MODULE_1_d3__","__WEBPACK_IMPORTED_MODULE_1_d3___default","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","initColorKey","a","scale","linear","range","domain","ActivityCalendar","container","timestamps","calendarActivitiesPath","utcOffset","arguments","undefined","this","clickDay","bind","currentSelectedDate","daySpace","daySize","daySizeWithSpace","monthNames","months","timestampsTmp","group","today","setHours","oneYearAgo","setFullYear","getFullYear","days","getDayDifference","setDate","getDate","day","getDay","push","colorKey","color","initColor","svg","renderSvg","renderDays","renderMonths","renderDayTitles","renderKey","tooltip","html","value","extraWidthPadding","getMonth","width","getExtraWidthPadding","select","append","attr","_this","selectAll","data","enter","each","stamp","month","x","lastMonth","last","Math","min","on","text","y","_this2","_this3","keyValues","keyColors","colorRange","threshold","join","ajax","url","cache","dataType","beforeSend","LOADING_HTML","success","call","./users/index.js","initUserProfile","action","placement","__WEBPACK_IMPORTED_MODULE_1__user_tabs__","parentEl","e","preventDefault","__WEBPACK_IMPORTED_MODULE_0_js_cookie___default","set","parents","remove","__WEBPACK_IMPORTED_MODULE_0_js_cookie__","document","addEventListener","split","./users/user_tabs.js","__WEBPACK_IMPORTED_MODULE_0__activity_calendar__","UserTabs","defaultAction","loaded","$parentEl","windowLocation","window","location","find","navLink","actions","keys","bindEvents","activateTab","off","event","tabShown","changeProjectsPage","empty","endpoint","loadTab","getCurrentAction","$target","source","setTab","setCurrentAction","tab","loadActivities","indexOf","toggleLoading","complete","tabSelector","localTimeAgo","activity","$calendarWrap","calendarPath","utcFormatted","activityData","CALENDAR_TEMPLATE","Activities","status","toggle","newState","replace","search","hash","history","replaceState","title"],"mappings":"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","file":"users.6ff182ca0242cd12112f.bundle.js","sourcesContent":["webpackJsonp([\"users\"],{\n\n/***/ \"./users/activity_calendar.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_underscore__ = __webpack_require__(\"../../../node_modules/underscore/underscore.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_underscore___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_underscore__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3__ = __webpack_require__(\"../../../node_modules/d3/d3.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_d3__);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar LOADING_HTML = '\\n
\\n \\n
\\n';\n\nfunction getSystemDate(systemUtcOffsetSeconds) {\n var date = new Date();\n var localUtcOffsetMinutes = 0 - date.getTimezoneOffset();\n var systemUtcOffsetMinutes = systemUtcOffsetSeconds / 60;\n date.setMinutes(date.getMinutes() - localUtcOffsetMinutes + systemUtcOffsetMinutes);\n return date;\n}\n\nfunction formatTooltipText(_ref) {\n var date = _ref.date,\n count = _ref.count;\n\n var dateObject = new Date(date);\n var dateDayName = gl.utils.getDayName(dateObject);\n var dateText = dateObject.format('mmm d, yyyy');\n\n var contribText = '没有贡献';\n if (count > 0) {\n contribText = count + ' \\u6B21\\u8D21\\u732E';\n }\n return contribText + '
' + dateDayName + ' ' + dateText;\n}\n\nvar initColorKey = function initColorKey() {\n return __WEBPACK_IMPORTED_MODULE_1_d3___default.a.scale.linear().range(['#acd5f2', '#254e77']).domain([0, 3]);\n};\n\nvar ActivityCalendar = function () {\n function ActivityCalendar(container, timestamps, calendarActivitiesPath) {\n var utcOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n\n _classCallCheck(this, ActivityCalendar);\n\n this.calendarActivitiesPath = calendarActivitiesPath;\n this.clickDay = this.clickDay.bind(this);\n this.currentSelectedDate = '';\n this.daySpace = 1;\n this.daySize = 15;\n this.daySizeWithSpace = this.daySize + this.daySpace * 2;\n this.monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n this.months = [];\n\n // Loop through the timestamps to create a group of objects\n // The group of objects will be grouped based on the day of the week they are\n this.timestampsTmp = [];\n var group = 0;\n\n var today = getSystemDate(utcOffset);\n today.setHours(0, 0, 0, 0, 0);\n\n var oneYearAgo = new Date(today);\n oneYearAgo.setFullYear(today.getFullYear() - 1);\n\n var days = gl.utils.getDayDifference(oneYearAgo, today);\n\n for (var i = 0; i <= days; i += 1) {\n var date = new Date(oneYearAgo);\n date.setDate(date.getDate() + i);\n\n var day = date.getDay();\n var count = timestamps[date.format('yyyy-mm-dd')] || 0;\n\n // Create a new group array if this is the first day of the week\n // or if is first object\n if (day === 0 && i !== 0 || i === 0) {\n this.timestampsTmp.push([]);\n group += 1;\n }\n\n // Push to the inner array the values that will be used to render map\n var innerArray = this.timestampsTmp[group - 1];\n innerArray.push({ count: count, date: date, day: day });\n }\n\n // Init color functions\n this.colorKey = initColorKey();\n this.color = this.initColor();\n\n // Init the svg element\n this.svg = this.renderSvg(container, group);\n this.renderDays();\n this.renderMonths();\n this.renderDayTitles();\n this.renderKey();\n\n // Init tooltips\n $(container + ' .js-tooltip').tooltip({ html: true });\n }\n\n // Add extra padding for the last month label if it is also the last column\n\n\n _createClass(ActivityCalendar, [{\n key: 'getExtraWidthPadding',\n value: function getExtraWidthPadding(group) {\n var extraWidthPadding = 0;\n var lastColMonth = this.timestampsTmp[group - 1][0].date.getMonth();\n var secondLastColMonth = this.timestampsTmp[group - 2][0].date.getMonth();\n\n if (lastColMonth !== secondLastColMonth) {\n extraWidthPadding = 3;\n }\n\n return extraWidthPadding;\n }\n }, {\n key: 'renderSvg',\n value: function renderSvg(container, group) {\n var width = (group + 1) * this.daySizeWithSpace + this.getExtraWidthPadding(group);\n return __WEBPACK_IMPORTED_MODULE_1_d3___default.a.select(container).append('svg').attr('width', width).attr('height', 167).attr('class', 'contrib-calendar');\n }\n }, {\n key: 'renderDays',\n value: function renderDays() {\n var _this = this;\n\n this.svg.selectAll('g').data(this.timestampsTmp).enter().append('g').attr('transform', function (group, i) {\n __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.each(group, function (stamp, a) {\n if (a === 0 && stamp.day === 0) {\n var month = stamp.date.getMonth();\n var x = _this.daySizeWithSpace * i + 1 + _this.daySizeWithSpace;\n var lastMonth = __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.last(_this.months);\n if (lastMonth == null || month !== lastMonth.month && x - _this.daySizeWithSpace !== lastMonth.x) {\n _this.months.push({ month: month, x: x });\n }\n }\n });\n return 'translate(' + (_this.daySizeWithSpace * i + 1 + _this.daySizeWithSpace) + ', 18)';\n }).selectAll('rect').data(function (stamp) {\n return stamp;\n }).enter().append('rect').attr('x', '0').attr('y', function (stamp) {\n return _this.daySizeWithSpace * stamp.day;\n }).attr('width', this.daySize).attr('height', this.daySize).attr('fill', function (stamp) {\n return stamp.count !== 0 ? _this.color(Math.min(stamp.count, 40)) : '#ededed';\n }).attr('title', function (stamp) {\n return formatTooltipText(stamp);\n }).attr('class', 'user-contrib-cell js-tooltip').attr('data-container', 'body').on('click', this.clickDay);\n }\n }, {\n key: 'renderDayTitles',\n value: function renderDayTitles() {\n var days = [{\n text: 'M',\n y: 29 + this.daySizeWithSpace * 1\n }, {\n text: 'W',\n y: 29 + this.daySizeWithSpace * 3\n }, {\n text: 'F',\n y: 29 + this.daySizeWithSpace * 5\n }];\n this.svg.append('g').selectAll('text').data(days).enter().append('text').attr('text-anchor', 'middle').attr('x', 8).attr('y', function (day) {\n return day.y;\n }).text(function (day) {\n return day.text;\n }).attr('class', 'user-contrib-text');\n }\n }, {\n key: 'renderMonths',\n value: function renderMonths() {\n var _this2 = this;\n\n this.svg.append('g').attr('direction', 'ltr').selectAll('text').data(this.months).enter().append('text').attr('x', function (date) {\n return date.x;\n }).attr('y', 10).attr('class', 'user-contrib-text').text(function (date) {\n return _this2.monthNames[date.month];\n });\n }\n }, {\n key: 'renderKey',\n value: function renderKey() {\n var _this3 = this;\n\n var keyValues = ['no contributions', '1-9 contributions', '10-19 contributions', '20-29 contributions', '30+ contributions'];\n var keyColors = ['#ededed', this.colorKey(0), this.colorKey(1), this.colorKey(2), this.colorKey(3)];\n\n 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 (color, i) {\n return _this3.daySizeWithSpace * i;\n }).attr('y', 0).attr('fill', function (color) {\n return color;\n }).attr('class', 'js-tooltip').attr('title', function (color, i) {\n return keyValues[i];\n }).attr('data-container', 'body');\n }\n }, {\n key: 'initColor',\n value: function initColor() {\n var colorRange = ['#ededed', this.colorKey(0), this.colorKey(1), this.colorKey(2), this.colorKey(3)];\n return __WEBPACK_IMPORTED_MODULE_1_d3___default.a.scale.threshold().domain([0, 10, 20, 30]).range(colorRange);\n }\n }, {\n key: 'clickDay',\n value: function clickDay(stamp) {\n if (this.currentSelectedDate !== stamp.date) {\n this.currentSelectedDate = stamp.date;\n\n var date = [this.currentSelectedDate.getFullYear(), this.currentSelectedDate.getMonth() + 1, this.currentSelectedDate.getDate()].join('-');\n\n $.ajax({\n url: this.calendarActivitiesPath,\n data: { date: date },\n cache: false,\n dataType: 'html',\n beforeSend: function beforeSend() {\n return $('.user-calendar-activities').html(LOADING_HTML);\n },\n success: function success(data) {\n return $('.user-calendar-activities').html(data);\n }\n });\n } else {\n this.currentSelectedDate = '';\n $('.user-calendar-activities').html('');\n }\n }\n }]);\n\n return ActivityCalendar;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ActivityCalendar);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./users/index.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_js_cookie__ = __webpack_require__(\"../../../node_modules/js-cookie/src/js.cookie.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_js_cookie___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_js_cookie__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__user_tabs__ = __webpack_require__(\"./users/user_tabs.js\");\n\n\n\nfunction initUserProfile(action) {\n var _this = this;\n\n // place profile avatars to top\n $('.profile-groups-avatars').tooltip({\n placement: 'top'\n });\n\n // eslint-disable-next-line no-new\n new __WEBPACK_IMPORTED_MODULE_1__user_tabs__[\"a\" /* default */]({ parentEl: '.user-profile', action: action });\n\n // hide project limit message\n $('.hide-project-limit-message').on('click', function (e) {\n e.preventDefault();\n __WEBPACK_IMPORTED_MODULE_0_js_cookie___default.a.set('hide_project_limit_message', 'false');\n $(_this).parents('.project-limit-message').remove();\n });\n}\n\ndocument.addEventListener('DOMContentLoaded', function () {\n var page = $('body').attr('data-page');\n var action = page.split(':')[1];\n initUserProfile(action);\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./users/user_tabs.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__activity_calendar__ = __webpack_require__(\"./users/activity_calendar.js\");\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n/**\n * UserTabs\n *\n * Handles persisting and restoring the current tab selection and lazily-loading\n * content on the Users#show page.\n *\n * ### Example Markup\n *\n * \n *\n *
\n *
\n * Activity Content\n *
\n *
\n * Groups Content\n *
\n *
\n * Contributed projects content\n *
\n *
\n * Projects content\n *
\n *
\n * Snippets content\n *
\n *
\n *\n *
\n *
\n * Loading Animation\n *
\n *
\n */\n\nvar CALENDAR_TEMPLATE = '\\n
\\n
\\n
\\n \\u95EE\\u9898\\u3001\\u5408\\u5E76\\u8BF7\\u6C42\\u3001\\u63A8\\u9001\\u4E8B\\u4EF6\\u548C\\u8BC4\\u8BBA\\u6458\\u8981\\n
\\n
\\n';\n\nvar UserTabs = function () {\n function UserTabs(_ref) {\n var _this = this;\n\n var defaultAction = _ref.defaultAction,\n action = _ref.action,\n parentEl = _ref.parentEl;\n\n _classCallCheck(this, UserTabs);\n\n this.loaded = {};\n this.defaultAction = defaultAction || 'activity';\n this.action = action || this.defaultAction;\n this.$parentEl = $(parentEl) || $(document);\n this.windowLocation = window.location;\n this.$parentEl.find('.nav-links a').each(function (i, navLink) {\n _this.loaded[$(navLink).attr('data-action')] = false;\n });\n this.actions = Object.keys(this.loaded);\n this.bindEvents();\n\n if (this.action === 'show') {\n this.action = this.defaultAction;\n }\n\n this.activateTab(this.action);\n }\n\n _createClass(UserTabs, [{\n key: 'bindEvents',\n value: function bindEvents() {\n var _this2 = this;\n\n this.$parentEl.off('shown.bs.tab', '.nav-links a[data-toggle=\"tab\"]').on('shown.bs.tab', '.nav-links a[data-toggle=\"tab\"]', function (event) {\n return _this2.tabShown(event);\n }).on('click', '.gl-pagination a', function (event) {\n return _this2.changeProjectsPage(event);\n });\n }\n }, {\n key: 'changeProjectsPage',\n value: function changeProjectsPage(e) {\n e.preventDefault();\n\n $('.tab-pane.active').empty();\n var endpoint = $(e.target).attr('href');\n this.loadTab(this.getCurrentAction(), endpoint);\n }\n }, {\n key: 'tabShown',\n value: function tabShown(event) {\n var $target = $(event.target);\n var action = $target.data('action');\n var source = $target.attr('href');\n var endpoint = $target.data('endpoint');\n this.setTab(action, endpoint);\n return this.setCurrentAction(source);\n }\n }, {\n key: 'activateTab',\n value: function activateTab(action) {\n return this.$parentEl.find('.nav-links .js-' + action + '-tab a').tab('show');\n }\n }, {\n key: 'setTab',\n value: function setTab(action, endpoint) {\n if (this.loaded[action]) {\n return;\n }\n if (action === 'activity') {\n this.loadActivities();\n }\n\n var loadableActions = ['groups', 'contributed', 'projects', 'snippets'];\n if (loadableActions.indexOf(action) > -1) {\n this.loadTab(action, endpoint);\n }\n }\n }, {\n key: 'loadTab',\n value: function loadTab(action, endpoint) {\n var _this3 = this;\n\n return $.ajax({\n beforeSend: function beforeSend() {\n return _this3.toggleLoading(true);\n },\n complete: function complete() {\n return _this3.toggleLoading(false);\n },\n dataType: 'json',\n url: endpoint,\n success: function success(data) {\n var tabSelector = 'div#' + action;\n _this3.$parentEl.find(tabSelector).html(data.html);\n _this3.loaded[action] = true;\n gl.utils.localTimeAgo($('.js-timeago', tabSelector));\n }\n });\n }\n }, {\n key: 'loadActivities',\n value: function loadActivities() {\n if (this.loaded.activity) {\n return;\n }\n var $calendarWrap = this.$parentEl.find('.user-calendar');\n var calendarPath = $calendarWrap.data('calendarPath');\n var calendarActivitiesPath = $calendarWrap.data('calendarActivitiesPath');\n var utcOffset = $calendarWrap.data('utcOffset');\n var utcFormatted = 'UTC';\n if (utcOffset !== 0) {\n utcFormatted = 'UTC' + (utcOffset > 0 ? '+' : '') + utcOffset / 3600;\n }\n\n $.ajax({\n dataType: 'json',\n url: calendarPath,\n success: function success(activityData) {\n $calendarWrap.html(CALENDAR_TEMPLATE);\n $calendarWrap.find('.calendar-hint').append('(Timezone: ' + utcFormatted + ')');\n\n // eslint-disable-next-line no-new\n new __WEBPACK_IMPORTED_MODULE_0__activity_calendar__[\"a\" /* default */]('.js-contrib-calendar', activityData, calendarActivitiesPath, utcOffset);\n }\n });\n\n // eslint-disable-next-line no-new\n new gl.Activities();\n this.loaded.activity = true;\n }\n }, {\n key: 'toggleLoading',\n value: function toggleLoading(status) {\n return this.$parentEl.find('.loading-status .loading').toggle(status);\n }\n }, {\n key: 'setCurrentAction',\n value: function setCurrentAction(source) {\n var newState = source;\n newState = newState.replace(/\\/+$/, '');\n newState += this.windowLocation.search + this.windowLocation.hash;\n history.replaceState({\n url: newState\n }, document.title, newState);\n return newState;\n }\n }, {\n key: 'getCurrentAction',\n value: function getCurrentAction() {\n return this.$parentEl.find('.nav-links .active a').data('action');\n }\n }]);\n\n return UserTabs;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (UserTabs);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ })\n\n},[\"./users/index.js\"]);\n\n\n// WEBPACK FOOTER //\n// users.6ff182ca0242cd12112f.bundle.js","import _ from 'underscore';\nimport d3 from 'd3';\n\nconst LOADING_HTML = `\n
\n \n
\n`;\n\nfunction getSystemDate(systemUtcOffsetSeconds) {\n const date = new Date();\n const localUtcOffsetMinutes = 0 - date.getTimezoneOffset();\n const systemUtcOffsetMinutes = systemUtcOffsetSeconds / 60;\n date.setMinutes((date.getMinutes() - localUtcOffsetMinutes) + systemUtcOffsetMinutes);\n return date;\n}\n\nfunction formatTooltipText({ date, count }) {\n const dateObject = new Date(date);\n const dateDayName = gl.utils.getDayName(dateObject);\n const dateText = dateObject.format('mmm d, yyyy');\n\n let contribText = '没有贡献';\n if (count > 0) {\n contribText = `${count} 次贡献`;\n }\n return `${contribText}
${dateDayName} ${dateText}`;\n}\n\nconst initColorKey = () => d3.scale.linear().range(['#acd5f2', '#254e77']).domain([0, 3]);\n\nexport default class ActivityCalendar {\n constructor(container, timestamps, calendarActivitiesPath, utcOffset = 0) {\n this.calendarActivitiesPath = calendarActivitiesPath;\n this.clickDay = this.clickDay.bind(this);\n this.currentSelectedDate = '';\n this.daySpace = 1;\n this.daySize = 15;\n this.daySizeWithSpace = this.daySize + (this.daySpace * 2);\n this.monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n this.months = [];\n\n // Loop through the timestamps to create a group of objects\n // The group of objects will be grouped based on the day of the week they are\n this.timestampsTmp = [];\n let group = 0;\n\n const today = getSystemDate(utcOffset);\n today.setHours(0, 0, 0, 0, 0);\n\n const oneYearAgo = new Date(today);\n oneYearAgo.setFullYear(today.getFullYear() - 1);\n\n const days = gl.utils.getDayDifference(oneYearAgo, today);\n\n for (let i = 0; i <= days; i += 1) {\n const date = new Date(oneYearAgo);\n date.setDate(date.getDate() + i);\n\n const day = date.getDay();\n const count = timestamps[date.format('yyyy-mm-dd')] || 0;\n\n // Create a new group array if this is the first day of the week\n // or if is first object\n if ((day === 0 && i !== 0) || i === 0) {\n this.timestampsTmp.push([]);\n group += 1;\n }\n\n // Push to the inner array the values that will be used to render map\n const innerArray = this.timestampsTmp[group - 1];\n innerArray.push({ count, date, day });\n }\n\n // Init color functions\n this.colorKey = initColorKey();\n this.color = this.initColor();\n\n // Init the svg element\n this.svg = this.renderSvg(container, group);\n this.renderDays();\n this.renderMonths();\n this.renderDayTitles();\n this.renderKey();\n\n // Init tooltips\n $(`${container} .js-tooltip`).tooltip({ html: true });\n }\n\n // Add extra padding for the last month label if it is also the last column\n getExtraWidthPadding(group) {\n let extraWidthPadding = 0;\n const lastColMonth = this.timestampsTmp[group - 1][0].date.getMonth();\n const secondLastColMonth = this.timestampsTmp[group - 2][0].date.getMonth();\n\n if (lastColMonth !== secondLastColMonth) {\n extraWidthPadding = 3;\n }\n\n return extraWidthPadding;\n }\n\n renderSvg(container, group) {\n const width = ((group + 1) * this.daySizeWithSpace) + this.getExtraWidthPadding(group);\n return d3.select(container)\n .append('svg')\n .attr('width', width)\n .attr('height', 167)\n .attr('class', 'contrib-calendar');\n }\n\n renderDays() {\n this.svg.selectAll('g').data(this.timestampsTmp).enter().append('g')\n .attr('transform', (group, i) => {\n _.each(group, (stamp, a) => {\n if (a === 0 && stamp.day === 0) {\n const month = stamp.date.getMonth();\n const x = (this.daySizeWithSpace * i) + 1 + this.daySizeWithSpace;\n const lastMonth = _.last(this.months);\n if (\n lastMonth == null ||\n (month !== lastMonth.month && x - this.daySizeWithSpace !== lastMonth.x)\n ) {\n this.months.push({ month, x });\n }\n }\n });\n return `translate(${(this.daySizeWithSpace * i) + 1 + this.daySizeWithSpace}, 18)`;\n })\n .selectAll('rect')\n .data(stamp => stamp)\n .enter()\n .append('rect')\n .attr('x', '0')\n .attr('y', stamp => this.daySizeWithSpace * stamp.day)\n .attr('width', this.daySize)\n .attr('height', this.daySize)\n .attr('fill', stamp => (\n stamp.count !== 0 ? this.color(Math.min(stamp.count, 40)) : '#ededed'\n ))\n .attr('title', stamp => formatTooltipText(stamp))\n .attr('class', 'user-contrib-cell js-tooltip')\n .attr('data-container', 'body')\n .on('click', this.clickDay);\n }\n\n renderDayTitles() {\n const days = [\n {\n text: 'M',\n y: 29 + (this.daySizeWithSpace * 1),\n }, {\n text: 'W',\n y: 29 + (this.daySizeWithSpace * 3),\n }, {\n text: 'F',\n y: 29 + (this.daySizeWithSpace * 5),\n },\n ];\n this.svg.append('g')\n .selectAll('text')\n .data(days)\n .enter()\n .append('text')\n .attr('text-anchor', 'middle')\n .attr('x', 8)\n .attr('y', day => day.y)\n .text(day => day.text)\n .attr('class', 'user-contrib-text');\n }\n\n renderMonths() {\n this.svg.append('g')\n .attr('direction', 'ltr')\n .selectAll('text')\n .data(this.months)\n .enter()\n .append('text')\n .attr('x', date => date.x)\n .attr('y', 10)\n .attr('class', 'user-contrib-text')\n .text(date => this.monthNames[date.month]);\n }\n\n renderKey() {\n const keyValues = ['no contributions', '1-9 contributions', '10-19 contributions', '20-29 contributions', '30+ contributions'];\n const keyColors = ['#ededed', this.colorKey(0), this.colorKey(1), this.colorKey(2), this.colorKey(3)];\n\n this.svg.append('g')\n .attr('transform', `translate(18, ${(this.daySizeWithSpace * 8) + 16})`)\n .selectAll('rect')\n .data(keyColors)\n .enter()\n .append('rect')\n .attr('width', this.daySize)\n .attr('height', this.daySize)\n .attr('x', (color, i) => this.daySizeWithSpace * i)\n .attr('y', 0)\n .attr('fill', color => color)\n .attr('class', 'js-tooltip')\n .attr('title', (color, i) => keyValues[i])\n .attr('data-container', 'body');\n }\n\n initColor() {\n const colorRange = ['#ededed', this.colorKey(0), this.colorKey(1), this.colorKey(2), this.colorKey(3)];\n return d3.scale.threshold().domain([0, 10, 20, 30]).range(colorRange);\n }\n\n clickDay(stamp) {\n if (this.currentSelectedDate !== stamp.date) {\n this.currentSelectedDate = stamp.date;\n\n const date = [\n this.currentSelectedDate.getFullYear(),\n this.currentSelectedDate.getMonth() + 1,\n this.currentSelectedDate.getDate(),\n ].join('-');\n\n $.ajax({\n url: this.calendarActivitiesPath,\n data: { date },\n cache: false,\n dataType: 'html',\n beforeSend: () => $('.user-calendar-activities').html(LOADING_HTML),\n success: data => $('.user-calendar-activities').html(data),\n });\n } else {\n this.currentSelectedDate = '';\n $('.user-calendar-activities').html('');\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./users/activity_calendar.js","import Cookies from 'js-cookie';\nimport UserTabs from './user_tabs';\n\nfunction initUserProfile(action) {\n // place profile avatars to top\n $('.profile-groups-avatars').tooltip({\n placement: 'top',\n });\n\n // eslint-disable-next-line no-new\n new UserTabs({ parentEl: '.user-profile', action });\n\n // hide project limit message\n $('.hide-project-limit-message').on('click', (e) => {\n e.preventDefault();\n Cookies.set('hide_project_limit_message', 'false');\n $(this).parents('.project-limit-message').remove();\n });\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const page = $('body').attr('data-page');\n const action = page.split(':')[1];\n initUserProfile(action);\n});\n\n\n\n// WEBPACK FOOTER //\n// ./users/index.js","import ActivityCalendar from './activity_calendar';\n\n/**\n * UserTabs\n *\n * Handles persisting and restoring the current tab selection and lazily-loading\n * content on the Users#show page.\n *\n * ### Example Markup\n *\n * \n *\n *
\n *
\n * Activity Content\n *
\n *
\n * Groups Content\n *
\n *
\n * Contributed projects content\n *
\n *
\n * Projects content\n *
\n *
\n * Snippets content\n *
\n *
\n *\n *
\n *
\n * Loading Animation\n *
\n *
\n */\n\nconst CALENDAR_TEMPLATE = `\n
\n
\n
\n 问题、合并请求、推送事件和评论摘要\n
\n
\n`;\n\nexport default class UserTabs {\n constructor({ defaultAction, action, parentEl }) {\n this.loaded = {};\n this.defaultAction = defaultAction || 'activity';\n this.action = action || this.defaultAction;\n this.$parentEl = $(parentEl) || $(document);\n this.windowLocation = window.location;\n this.$parentEl.find('.nav-links a')\n .each((i, navLink) => {\n this.loaded[$(navLink).attr('data-action')] = false;\n });\n this.actions = Object.keys(this.loaded);\n this.bindEvents();\n\n if (this.action === 'show') {\n this.action = this.defaultAction;\n }\n\n this.activateTab(this.action);\n }\n\n bindEvents() {\n this.$parentEl\n .off('shown.bs.tab', '.nav-links a[data-toggle=\"tab\"]')\n .on('shown.bs.tab', '.nav-links a[data-toggle=\"tab\"]', event => this.tabShown(event))\n .on('click', '.gl-pagination a', event => this.changeProjectsPage(event));\n }\n\n changeProjectsPage(e) {\n e.preventDefault();\n\n $('.tab-pane.active').empty();\n const endpoint = $(e.target).attr('href');\n this.loadTab(this.getCurrentAction(), endpoint);\n }\n\n tabShown(event) {\n const $target = $(event.target);\n const action = $target.data('action');\n const source = $target.attr('href');\n const endpoint = $target.data('endpoint');\n this.setTab(action, endpoint);\n return this.setCurrentAction(source);\n }\n\n activateTab(action) {\n return this.$parentEl.find(`.nav-links .js-${action}-tab a`)\n .tab('show');\n }\n\n setTab(action, endpoint) {\n if (this.loaded[action]) {\n return;\n }\n if (action === 'activity') {\n this.loadActivities();\n }\n\n const loadableActions = ['groups', 'contributed', 'projects', 'snippets'];\n if (loadableActions.indexOf(action) > -1) {\n this.loadTab(action, endpoint);\n }\n }\n\n loadTab(action, endpoint) {\n return $.ajax({\n beforeSend: () => this.toggleLoading(true),\n complete: () => this.toggleLoading(false),\n dataType: 'json',\n url: endpoint,\n success: (data) => {\n const tabSelector = `div#${action}`;\n this.$parentEl.find(tabSelector).html(data.html);\n this.loaded[action] = true;\n gl.utils.localTimeAgo($('.js-timeago', tabSelector));\n },\n });\n }\n\n loadActivities() {\n if (this.loaded.activity) {\n return;\n }\n const $calendarWrap = this.$parentEl.find('.user-calendar');\n const calendarPath = $calendarWrap.data('calendarPath');\n const calendarActivitiesPath = $calendarWrap.data('calendarActivitiesPath');\n const utcOffset = $calendarWrap.data('utcOffset');\n let utcFormatted = 'UTC';\n if (utcOffset !== 0) {\n utcFormatted = `UTC${utcOffset > 0 ? '+' : ''}${(utcOffset / 3600)}`;\n }\n\n $.ajax({\n dataType: 'json',\n url: calendarPath,\n success: (activityData) => {\n $calendarWrap.html(CALENDAR_TEMPLATE);\n $calendarWrap.find('.calendar-hint').append(`(Timezone: ${utcFormatted})`);\n\n // eslint-disable-next-line no-new\n new ActivityCalendar('.js-contrib-calendar', activityData, calendarActivitiesPath, utcOffset);\n },\n });\n\n // eslint-disable-next-line no-new\n new gl.Activities();\n this.loaded.activity = true;\n }\n\n toggleLoading(status) {\n return this.$parentEl.find('.loading-status .loading')\n .toggle(status);\n }\n\n setCurrentAction(source) {\n let newState = source;\n newState = newState.replace(/\\/+$/, '');\n newState += this.windowLocation.search + this.windowLocation.hash;\n history.replaceState({\n url: newState,\n }, document.title, newState);\n return newState;\n }\n\n getCurrentAction() {\n return this.$parentEl.find('.nav-links .active a').data('action');\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./users/user_tabs.js"],"sourceRoot":""}