{"version":3,"sources":["webpack:///users.43910384fa25a53a993b.bundle.js","webpack:///./activities.js","webpack:///./pager.js","webpack:///./users/activity_calendar.js","webpack:///./users/index.js","webpack:///./users/user_tabs.js"],"names":["webpackJsonp","./activities.js","module","__webpack_exports__","__webpack_require__","$","_classCallCheck","instance","Constructor","TypeError","__WEBPACK_IMPORTED_MODULE_0_js_cookie__","__WEBPACK_IMPORTED_MODULE_0_js_cookie___default","n","__WEBPACK_IMPORTED_MODULE_1__pager__","__WEBPACK_IMPORTED_MODULE_2__lib_utils_datetime_utility__","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","Activities","_this","this","init","data","updateTooltips","on","e","preventDefault","toggleFilter","currentTarget","reloadActivities","value","html","sender","$sender","filter","attr","split","removeClass","a","set","closest","toggleClass","call","./pager.js","__WEBPACK_IMPORTED_MODULE_0__lib_utils_common_utils__","__WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__","__WEBPACK_IMPORTED_MODULE_2__lib_utils_url_utility__","limit","arguments","undefined","preload","disable","prepareData","noop","callback","url","offset","parseInt","loading","first","getOld","initLoadMore","show","get","params","then","_ref","append","count","isScrollable","hide","catch","$w","window","document","height","scrollTop","_this2","unbind","endlessScroll","bottomPixels","fireDelay","fireOnce","ceaseFire","is","./users/activity_calendar.js","getSystemDate","systemUtcOffsetSeconds","date","Date","localUtcOffsetMinutes","getTimezoneOffset","systemUtcOffsetMinutes","setMinutes","getMinutes","formatTooltipText","dateObject","dateDayName","__WEBPACK_IMPORTED_MODULE_3__lib_utils_datetime_utility__","dateText","format","contribText","__WEBPACK_IMPORTED_MODULE_0_underscore__","__WEBPACK_IMPORTED_MODULE_0_underscore___default","__WEBPACK_IMPORTED_MODULE_1_d3_scale__","__WEBPACK_IMPORTED_MODULE_2_d3_selection__","__WEBPACK_IMPORTED_MODULE_4__lib_utils_axios_utils__","__WEBPACK_IMPORTED_MODULE_5__flash__","__WEBPACK_IMPORTED_MODULE_6__locale__","d3","select","scaleLinear","scaleThreshold","initColorKey","range","domain","ActivityCalendar","container","timestamps","calendarActivitiesPath","utcOffset","clickDay","bind","currentSelectedDate","daySpace","daySize","daySizeWithSpace","monthNames","months","timestampsTmp","group","today","setHours","oneYearAgo","setFullYear","getFullYear","days","setDate","getDate","day","getDay","push","colorKey","color","initColor","svg","renderSvg","renderDays","renderMonths","renderDayTitles","renderKey","tooltip","extraWidthPadding","getMonth","width","getExtraWidthPadding","selectAll","enter","each","stamp","month","x","lastMonth","last","Math","min","text","y","_this3","keyValues","keyColors","colorRange","join","LOADING_HTML","responseType","_ref2","./users/index.js","initUserProfile","action","placement","__WEBPACK_IMPORTED_MODULE_1__user_tabs__","parentEl","parents","remove","addEventListener","./users/user_tabs.js","__WEBPACK_IMPORTED_MODULE_0__lib_utils_axios_utils__","__WEBPACK_IMPORTED_MODULE_1__activities__","__WEBPACK_IMPORTED_MODULE_2__activity_calendar__","__WEBPACK_IMPORTED_MODULE_4__locale__","UserTabs","defaultAction","loaded","$parentEl","windowLocation","location","find","navLink","actions","keys","bindEvents","activateTab","off","event","tabShown","changeProjectsPage","empty","endpoint","loadTab","getCurrentAction","$target","source","setTab","setCurrentAction","tab","loadActivities","indexOf","toggleLoading","tabSelector","activity","$calendarWrap","calendarPath","utcFormatted","_ref3","CALENDAR_TEMPLATE","status","toggle","newState","replace","search","hash","history","replaceState","title"],"mappings":"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","file":"users.43910384fa25a53a993b.bundle.js","sourcesContent":["webpackJsonp([\"users\"],{\n\n/***/ \"./activities.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\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__pager__ = __webpack_require__(\"./pager.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_utils_datetime_utility__ = __webpack_require__(\"./lib/utils/datetime_utility.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/* eslint-disable no-param-reassign, class-methods-use-this */\n\n\n\n\n\nvar Activities = function () {\n function Activities() {\n var _this = this;\n\n _classCallCheck(this, Activities);\n\n __WEBPACK_IMPORTED_MODULE_1__pager__[\"a\" /* default */].init(20, true, false, function (data) {\n return data;\n }, this.updateTooltips);\n\n $('.event-filter-link').on('click', function (e) {\n e.preventDefault();\n _this.toggleFilter(e.currentTarget);\n _this.reloadActivities();\n });\n }\n\n _createClass(Activities, [{\n key: 'updateTooltips',\n value: function updateTooltips() {\n Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_datetime_utility__[\"e\" /* localTimeAgo */])($('.js-timeago', '.content_list'));\n }\n }, {\n key: 'reloadActivities',\n value: function reloadActivities() {\n $('.content_list').html('');\n __WEBPACK_IMPORTED_MODULE_1__pager__[\"a\" /* default */].init(20, true, false, function (data) {\n return data;\n }, this.updateTooltips);\n }\n }, {\n key: 'toggleFilter',\n value: function toggleFilter(sender) {\n var $sender = $(sender);\n var filter = $sender.attr('id').split('_')[0];\n\n $('.event-filter .active').removeClass('active');\n __WEBPACK_IMPORTED_MODULE_0_js_cookie___default.a.set('event_filter', filter);\n\n $sender.closest('li').toggleClass('active');\n }\n }]);\n\n return Activities;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Activities);\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\n\n/***/ \"./pager.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__lib_utils_common_utils__ = __webpack_require__(\"./lib/utils/common_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_utils_url_utility__ = __webpack_require__(\"./lib/utils/url_utility.js\");\n\n\n\n\nvar ENDLESS_SCROLL_BOTTOM_PX = 400;\nvar ENDLESS_SCROLL_FIRE_DELAY_MS = 1000;\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n init: function init() {\n var limit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var preload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var disable = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var prepareData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : $.noop;\n var callback = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : $.noop;\n\n this.url = $('.content_list').data('href') || Object(__WEBPACK_IMPORTED_MODULE_2__lib_utils_url_utility__[\"f\" /* removeParams */])(['limit', 'offset']);\n this.limit = limit;\n this.offset = parseInt(Object(__WEBPACK_IMPORTED_MODULE_0__lib_utils_common_utils__[\"g\" /* getParameterByName */])('offset'), 10) || this.limit;\n this.disable = disable;\n this.prepareData = prepareData;\n this.callback = callback;\n this.loading = $('.loading').first();\n if (preload) {\n this.offset = 0;\n this.getOld();\n }\n this.initLoadMore();\n },\n getOld: function getOld() {\n var _this = this;\n\n this.loading.show();\n __WEBPACK_IMPORTED_MODULE_1__lib_utils_axios_utils__[\"a\" /* default */].get(this.url, {\n params: {\n limit: this.limit,\n offset: this.offset\n }\n }).then(function (_ref) {\n var data = _ref.data;\n\n _this.append(data.count, _this.prepareData(data.html));\n _this.callback();\n\n // keep loading until we've filled the viewport height\n if (!_this.disable && !_this.isScrollable()) {\n _this.getOld();\n } else {\n _this.loading.hide();\n }\n }).catch(function () {\n return _this.loading.hide();\n });\n },\n append: function append(count, html) {\n $('.content_list').append(html);\n if (count > 0) {\n this.offset += count;\n } else {\n this.disable = true;\n }\n },\n isScrollable: function isScrollable() {\n var $w = $(window);\n return $(document).height() > $w.height() + $w.scrollTop() + ENDLESS_SCROLL_BOTTOM_PX;\n },\n initLoadMore: function initLoadMore() {\n var _this2 = this;\n\n $(document).unbind('scroll');\n $(document).endlessScroll({\n bottomPixels: ENDLESS_SCROLL_BOTTOM_PX,\n fireDelay: ENDLESS_SCROLL_FIRE_DELAY_MS,\n fireOnce: true,\n ceaseFire: function ceaseFire() {\n return _this2.disable === true;\n },\n callback: function callback() {\n if (!_this2.loading.is(':visible')) {\n _this2.loading.show();\n _this2.getOld();\n }\n }\n });\n }\n});\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(\"../../../node_modules/jquery/dist/jquery.js\")))\n\n/***/ }),\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_scale__ = __webpack_require__(\"../../../node_modules/d3-scale/index.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_d3_selection__ = __webpack_require__(\"../../../node_modules/d3-selection/index.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lib_utils_datetime_utility__ = __webpack_require__(\"./lib/utils/datetime_utility.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__lib_utils_axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__flash__ = __webpack_require__(\"./flash.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__locale__ = __webpack_require__(\"./locale/index.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\n\n\n\n\nvar d3 = { select: __WEBPACK_IMPORTED_MODULE_2_d3_selection__[\"f\" /* select */], scaleLinear: __WEBPACK_IMPORTED_MODULE_1_d3_scale__[\"a\" /* scaleLinear */], scaleThreshold: __WEBPACK_IMPORTED_MODULE_1_d3_scale__[\"b\" /* scaleThreshold */] };\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 = Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_datetime_utility__[\"c\" /* 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 d3.scaleLinear().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 = Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_datetime_utility__[\"b\" /* 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 = 6;\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 d3.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 d3.scaleThreshold().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 $('.user-calendar-activities').html(LOADING_HTML);\n\n __WEBPACK_IMPORTED_MODULE_4__lib_utils_axios_utils__[\"a\" /* default */].get(this.calendarActivitiesPath, {\n params: {\n date: date\n },\n responseType: 'text'\n }).then(function (_ref2) {\n var data = _ref2.data;\n return $('.user-calendar-activities').html(data);\n }).catch(function () {\n return Object(__WEBPACK_IMPORTED_MODULE_5__flash__[\"a\" /* default */])(Object(__WEBPACK_IMPORTED_MODULE_6__locale__[\"__\"])('An error occurred while retrieving calendar activity'));\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__lib_utils_axios_utils__ = __webpack_require__(\"./lib/utils/axios_utils.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__activities__ = __webpack_require__(\"./activities.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__activity_calendar__ = __webpack_require__(\"./users/activity_calendar.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__lib_utils_datetime_utility__ = __webpack_require__(\"./lib/utils/datetime_utility.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__locale__ = __webpack_require__(\"./locale/index.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__flash__ = __webpack_require__(\"./flash.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\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 this.toggleLoading(true);\n\n return __WEBPACK_IMPORTED_MODULE_0__lib_utils_axios_utils__[\"a\" /* default */].get(endpoint).then(function (_ref2) {\n var data = _ref2.data;\n\n var tabSelector = 'div#' + action;\n _this3.$parentEl.find(tabSelector).html(data.html);\n _this3.loaded[action] = true;\n Object(__WEBPACK_IMPORTED_MODULE_3__lib_utils_datetime_utility__[\"e\" /* localTimeAgo */])($('.js-timeago', tabSelector));\n\n _this3.toggleLoading(false);\n }).catch(function () {\n _this3.toggleLoading(false);\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 __WEBPACK_IMPORTED_MODULE_0__lib_utils_axios_utils__[\"a\" /* default */].get(calendarPath).then(function (_ref3) {\n var data = _ref3.data;\n\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_2__activity_calendar__[\"a\" /* default */]('.js-contrib-calendar', data, calendarActivitiesPath, utcOffset);\n }).catch(function () {\n return Object(__WEBPACK_IMPORTED_MODULE_5__flash__[\"a\" /* default */])(Object(__WEBPACK_IMPORTED_MODULE_4__locale__[\"__\"])('There was an error loading users activity calendar.'));\n });\n\n // eslint-disable-next-line no-new\n new __WEBPACK_IMPORTED_MODULE_1__activities__[\"a\" /* default */]();\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.43910384fa25a53a993b.bundle.js","/* eslint-disable no-param-reassign, class-methods-use-this */\n\nimport Cookies from 'js-cookie';\nimport Pager from './pager';\nimport { localTimeAgo } from './lib/utils/datetime_utility';\n\nexport default class Activities {\n constructor() {\n Pager.init(20, true, false, data => data, this.updateTooltips);\n\n $('.event-filter-link').on('click', (e) => {\n e.preventDefault();\n this.toggleFilter(e.currentTarget);\n this.reloadActivities();\n });\n }\n\n updateTooltips() {\n localTimeAgo($('.js-timeago', '.content_list'));\n }\n\n reloadActivities() {\n $('.content_list').html('');\n Pager.init(20, true, false, data => data, this.updateTooltips);\n }\n\n toggleFilter(sender) {\n const $sender = $(sender);\n const filter = $sender.attr('id').split('_')[0];\n\n $('.event-filter .active').removeClass('active');\n Cookies.set('event_filter', filter);\n\n $sender.closest('li').toggleClass('active');\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./activities.js","import { getParameterByName } from '~/lib/utils/common_utils';\nimport axios from './lib/utils/axios_utils';\nimport { removeParams } from './lib/utils/url_utility';\n\nconst ENDLESS_SCROLL_BOTTOM_PX = 400;\nconst ENDLESS_SCROLL_FIRE_DELAY_MS = 1000;\n\nexport default {\n init(limit = 0, preload = false, disable = false, prepareData = $.noop, callback = $.noop) {\n this.url = $('.content_list').data('href') || removeParams(['limit', 'offset']);\n this.limit = limit;\n this.offset = parseInt(getParameterByName('offset'), 10) || this.limit;\n this.disable = disable;\n this.prepareData = prepareData;\n this.callback = callback;\n this.loading = $('.loading').first();\n if (preload) {\n this.offset = 0;\n this.getOld();\n }\n this.initLoadMore();\n },\n\n getOld() {\n this.loading.show();\n axios.get(this.url, {\n params: {\n limit: this.limit,\n offset: this.offset,\n },\n }).then(({ data }) => {\n this.append(data.count, this.prepareData(data.html));\n this.callback();\n\n // keep loading until we've filled the viewport height\n if (!this.disable && !this.isScrollable()) {\n this.getOld();\n } else {\n this.loading.hide();\n }\n }).catch(() => this.loading.hide());\n },\n\n append(count, html) {\n $('.content_list').append(html);\n if (count > 0) {\n this.offset += count;\n } else {\n this.disable = true;\n }\n },\n\n isScrollable() {\n const $w = $(window);\n return $(document).height() > $w.height() + $w.scrollTop() + ENDLESS_SCROLL_BOTTOM_PX;\n },\n\n initLoadMore() {\n $(document).unbind('scroll');\n $(document).endlessScroll({\n bottomPixels: ENDLESS_SCROLL_BOTTOM_PX,\n fireDelay: ENDLESS_SCROLL_FIRE_DELAY_MS,\n fireOnce: true,\n ceaseFire: () => this.disable === true,\n callback: () => {\n if (!this.loading.is(':visible')) {\n this.loading.show();\n this.getOld();\n }\n },\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./pager.js","import _ from 'underscore';\nimport { scaleLinear, scaleThreshold } from 'd3-scale';\nimport { select } from 'd3-selection';\nimport { getDayName, getDayDifference } from '~/lib/utils/datetime_utility';\nimport axios from '~/lib/utils/axios_utils';\nimport flash from '~/flash';\nimport { __ } from '~/locale';\n\nconst d3 = { select, scaleLinear, scaleThreshold };\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 = 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.scaleLinear().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 = 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 = 6;\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.scaleThreshold().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 $('.user-calendar-activities').html(LOADING_HTML);\n\n axios.get(this.calendarActivitiesPath, {\n params: {\n date,\n },\n responseType: 'text',\n })\n .then(({ data }) => $('.user-calendar-activities').html(data))\n .catch(() => flash(__('An error occurred while retrieving calendar activity')));\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 axios from '../lib/utils/axios_utils';\nimport Activities from '../activities';\nimport ActivityCalendar from './activity_calendar';\nimport { localTimeAgo } from '../lib/utils/datetime_utility';\nimport { __ } from '../locale';\nimport flash from '../flash';\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 this.toggleLoading(true);\n\n return axios.get(endpoint)\n .then(({ data }) => {\n const tabSelector = `div#${action}`;\n this.$parentEl.find(tabSelector).html(data.html);\n this.loaded[action] = true;\n localTimeAgo($('.js-timeago', tabSelector));\n\n this.toggleLoading(false);\n })\n .catch(() => {\n this.toggleLoading(false);\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 axios.get(calendarPath)\n .then(({ data }) => {\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', data, calendarActivitiesPath, utcOffset);\n })\n .catch(() => flash(__('There was an error loading users activity calendar.')));\n\n // eslint-disable-next-line no-new\n new 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":""}