{"version":3,"sources":["webpack:///./pager.js","webpack:///./activities.js","webpack:///./user_callout.js","webpack:///./pages/users/activity_calendar.js","webpack:///./pages/users/user_tabs.js","webpack:///./pages/users/index.js"],"names":["__webpack_exports__","init","limit","arguments","length","undefined","preload","disable","prepareData","jquery__WEBPACK_IMPORTED_MODULE_0___default","a","noop","callback","this","url","data","Object","_lib_utils_url_utility__WEBPACK_IMPORTED_MODULE_3__","offset","parseInt","_lib_utils_common_utils__WEBPACK_IMPORTED_MODULE_1__","loading","first","getOld","initLoadMore","_this","show","_lib_utils_axios_utils__WEBPACK_IMPORTED_MODULE_2__","get","params","then","_ref","append","count","html","isScrollable","hide","catch","$w","window","document","height","scrollTop","_this2","off","endlessScroll","bottomPixels","fireDelay","fireOnce","ceaseFire","is","Activities","_classCallCheck","_pager__WEBPACK_IMPORTED_MODULE_2__","updateTooltips","on","e","preventDefault","toggleFilter","currentTarget","reloadActivities","_lib_utils_datetime_utility__WEBPACK_IMPORTED_MODULE_3__","sender","$sender","filter","attr","split","removeClass","js_cookie__WEBPACK_IMPORTED_MODULE_1___default","set","closest","toggleClass","UserCallout","options","className","userCalloutBody","$","cookieName","isCalloutDismissed","find","dismissCallout","$currentTarget","setCalloutPerProject","expires","path","hasClass","remove","d3","select","d3_selection","scaleLinear","d3_scale","scaleThreshold","initColorKey","range","domain","ActivityCalendar","container","timestamps","calendarActivitiesPath","utcOffset","firstDayOfWeek","clickDay","bind","currentSelectedDate","daySpace","daySize","daySizeWithSpace","monthNames","months","timestampsTmp","group","today","systemUtcOffsetSeconds","date","Date","localUtcOffsetMinutes","getTimezoneOffset","systemUtcOffsetMinutes","setMinutes","getMinutes","getSystemDate","setHours","oneYearAgo","setFullYear","getFullYear","days","datetime_utility","i","setDate","getDate","day","getDay","dateformat_default","push","colorKey","color","initColor","svg","renderSvg","renderDays","renderMonths","renderDayTitles","renderKey","jquery_default","tooltip","extraWidthPadding","getMonth","width","getExtraWidthPadding","selectAll","enter","underscore_default","each","stamp","month","x","lastMonth","last","dayYPos","Math","min","dateObject","dateDayName","dateText","contribText","text","y","_this3","keyValues","keyColors","colorRange","join","LOADING_HTML","axios_utils","responseType","_ref2","flash","locale","UserTabs","defaultAction","action","parentEl","user_tabs_classCallCheck","loaded","$parentEl","windowLocation","location","navLink","actions","keys","bindEvents","activateTab","event","tabShown","changeProjectsPage","empty","endpoint","target","loadTab","getCurrentAction","$target","source","setTab","setCurrentAction","tab","loadActivities","indexOf","toggleLoading","tabSelector","activity","$calendarWrap","calendarPath","utcFormatted","_ref3","CALENDAR_TEMPLATE","activity_calendar","activities","status","newState","replace","search","hash","history","replaceState","title","addEventListener","placement","user_tabs","js_cookie_default","parents","initUserProfile","user_callout"],"mappings":"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","file":"pages.users.eb4b9761.chunk.js","sourcesContent":["import $ from 'jquery';\nimport { 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).off('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","/* eslint-disable class-methods-use-this */\n\nimport $ from 'jquery';\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","import $ from 'jquery';\nimport Cookies from 'js-cookie';\n\nexport default class UserCallout {\n constructor(options = {}) {\n this.options = options;\n\n const className = this.options.className || 'user-callout';\n\n this.userCalloutBody = $(`.${className}`);\n this.cookieName = this.userCalloutBody.data('uid');\n this.isCalloutDismissed = Cookies.get(this.cookieName);\n this.init();\n }\n\n init() {\n if (!this.isCalloutDismissed || this.isCalloutDismissed === 'false') {\n this.userCalloutBody.find('.js-close-callout').on('click', e => this.dismissCallout(e));\n }\n }\n\n dismissCallout(e) {\n const $currentTarget = $(e.currentTarget);\n\n if (this.options.setCalloutPerProject) {\n Cookies.set(this.cookieName, 'true', {\n expires: 365,\n path: this.userCalloutBody.data('projectPath'),\n });\n } else {\n Cookies.set(this.cookieName, 'true', { expires: 365 });\n }\n\n if ($currentTarget.hasClass('close') || $currentTarget.hasClass('js-close')) {\n this.userCalloutBody.remove();\n }\n }\n}\n","import $ from 'jquery';\nimport _ from 'underscore';\nimport { scaleLinear, scaleThreshold } from 'd3-scale';\nimport { select } from 'd3-selection';\nimport dateFormat from 'dateformat';\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 = dateFormat(dateObject, 'mmm d, yyyy');\n\n let contribText = '没有贡献';\n if (count > 0) {\n contribText = `${count} 次贡献`;\n }\n return `${contribText}
${dateDayName} ${dateText}`;\n}\n\nconst initColorKey = () =>\n d3\n .scaleLinear()\n .range(['#acd5f2', '#254e77'])\n .domain([0, 3]);\n\nexport default class ActivityCalendar {\n constructor(container, timestamps, calendarActivitiesPath, utcOffset = 0, firstDayOfWeek = 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 = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n ];\n this.months = [];\n this.firstDayOfWeek = firstDayOfWeek;\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[dateFormat(date, '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 === this.firstDayOfWeek && 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\n .select(container)\n .append('svg')\n .attr('width', width)\n .attr('height', 167)\n .attr('class', 'contrib-calendar');\n }\n\n dayYPos(day) {\n return this.daySizeWithSpace * ((day + 7 - this.firstDayOfWeek) % 7);\n }\n\n renderDays() {\n this.svg\n .selectAll('g')\n .data(this.timestampsTmp)\n .enter()\n .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.dayYPos(stamp.day))\n .attr('width', this.daySize)\n .attr('height', this.daySize)\n .attr(\n 'fill',\n stamp => (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.dayYPos(1),\n },\n {\n text: 'W',\n y: 29 + this.dayYPos(3),\n },\n {\n text: 'F',\n y: 29 + this.dayYPos(5),\n },\n ];\n this.svg\n .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\n .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 = [\n 'no contributions',\n '1-9 contributions',\n '10-19 contributions',\n '20-29 contributions',\n '30+ contributions',\n ];\n const keyColors = [\n '#ededed',\n this.colorKey(0),\n this.colorKey(1),\n this.colorKey(2),\n this.colorKey(3),\n ];\n\n this.svg\n .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 = [\n '#ededed',\n this.colorKey(0),\n this.colorKey(1),\n this.colorKey(2),\n this.colorKey(3),\n ];\n return d3\n .scaleThreshold()\n .domain([0, 10, 20, 30])\n .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\n .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","import $ from 'jquery';\nimport axios from '~/lib/utils/axios_utils';\nimport Activities from '~/activities';\nimport { localTimeAgo } from '~/lib/utils/datetime_utility';\nimport { __ } from '~/locale';\nimport flash from '~/flash';\nimport 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').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`).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\n .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\n .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').toggleClass('hide', !status);\n }\n\n setCurrentAction(source) {\n let newState = source;\n newState = newState.replace(/\\/+$/, '');\n newState += this.windowLocation.search + this.windowLocation.hash;\n window.history.replaceState(\n {\n url: newState,\n },\n document.title,\n newState,\n );\n return newState;\n }\n\n getCurrentAction() {\n return this.$parentEl.find('.nav-links a.active').data('action');\n }\n}\n","import $ from 'jquery';\nimport UserCallout from '~/user_callout';\nimport 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 new UserCallout(); // eslint-disable-line no-new\n});\n"],"sourceRoot":""}