\\n
\\n ' + __WEBPACK_IMPORTED_MODULE_0_underscore___default.a.escape(message) + '\\n
\\n
\\n';\n};\n\nvar removeFlashClickListener = function removeFlashClickListener(flashEl, fadeTransition) {\n flashEl.addEventListener('click', function () {\n return hideFlash(flashEl, fadeTransition);\n });\n};\n\n/*\n * Flash banner supports different types of Flash configurations\n * along with ability to provide actionConfig which can be used to show\n * additional action or link on banner next to message\n *\n * @param {String} message Flash message text\n * @param {String} type Type of Flash, it can be `notice` or `alert` (default)\n * @param {Object} parent Reference to parent element under which Flash needs to appear\n * @param {Object} actonConfig Map of config to show action on banner\n * @param {String} href URL to which action config should point to (default: '#')\n * @param {String} title Title of action\n * @param {Function} clickHandler Method to call when action is clicked on\n * @param {Boolean} fadeTransition Boolean to determine whether to fade the alert out\n */\nvar createFlash = function createFlash(message) {\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'alert';\n var parent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document;\n var actionConfig = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var fadeTransition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n var addBodyClass = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n\n var flashContainer = parent.querySelector('.flash-container');\n\n if (!flashContainer) return null;\n\n var isInContentWrapper = flashContainer.parentNode.classList.contains('content-wrapper');\n\n flashContainer.innerHTML = createFlashEl(message, type, isInContentWrapper);\n\n var flashEl = flashContainer.querySelector('.flash-' + type);\n removeFlashClickListener(flashEl, fadeTransition);\n\n if (actionConfig) {\n flashEl.innerHTML += createAction(actionConfig);\n\n if (actionConfig.clickHandler) {\n flashEl.querySelector('.flash-action').addEventListener('click', function (e) {\n return actionConfig.clickHandler(e);\n });\n }\n }\n\n flashContainer.style.display = 'block';\n\n if (addBodyClass) document.body.classList.add('flash-shown');\n\n return flashContainer;\n};\n\n\nwindow.Flash = createFlash;\n\n/***/ }),\n\n/***/ \"./fly_out_nav.js\":\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export mousePos */\n/* unused harmony export setSidebar */\n/* unused harmony export getOpenMenu */\n/* unused harmony export setOpenMenu */\n/* unused harmony export slope */\n/* unused harmony export getHeaderHeight */\n/* unused harmony export isSidebarCollapsed */\n/* unused harmony export canShowActiveSubItems */\n/* unused harmony export canShowSubItems */\n/* unused harmony export getHideSubItemsInterval */\n/* unused harmony export calculateTop */\n/* unused harmony export hideMenu */\n/* unused harmony export moveSubItemsToPosition */\n/* unused harmony export showSubLevelItems */\n/* unused harmony export mouseEnterTopItems */\n/* unused harmony export mouseLeaveTopItem */\n/* unused harmony export documentMouseMove */\n/* unused harmony export subItemsMouseLeave */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__breakpoints__ = __webpack_require__(\"./breakpoints.js\");\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n\n\nvar HIDE_INTERVAL_TIMEOUT = 300;\nvar IS_OVER_CLASS = 'is-over';\nvar IS_ABOVE_CLASS = 'is-above';\nvar IS_SHOWING_FLY_OUT_CLASS = 'is-showing-fly-out';\nvar currentOpenMenu = null;\nvar menuCornerLocs = void 0;\nvar timeoutId = void 0;\nvar sidebar = void 0;\n\nvar mousePos = [];\n\nvar setSidebar = function setSidebar(el) {\n sidebar = el;\n};\nvar getOpenMenu = function getOpenMenu() {\n return currentOpenMenu;\n};\nvar setOpenMenu = function setOpenMenu() {\n var menu = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n currentOpenMenu = menu;\n};\n\nvar slope = function slope(a, b) {\n return (b.y - a.y) / (b.x - a.x);\n};\n\nvar headerHeight = 50;\n\nvar getHeaderHeight = function getHeaderHeight() {\n return headerHeight;\n};\n\nvar isSidebarCollapsed = function isSidebarCollapsed() {\n return sidebar && sidebar.classList.contains('sidebar-collapsed-desktop');\n};\n\nvar canShowActiveSubItems = function canShowActiveSubItems(el) {\n if (el.classList.contains('active') && !isSidebarCollapsed()) {\n return false;\n }\n\n return true;\n};\n\nvar canShowSubItems = function canShowSubItems() {\n return __WEBPACK_IMPORTED_MODULE_0__breakpoints__[\"a\" /* default */].getBreakpointSize() === 'sm' || __WEBPACK_IMPORTED_MODULE_0__breakpoints__[\"a\" /* default */].getBreakpointSize() === 'md' || __WEBPACK_IMPORTED_MODULE_0__breakpoints__[\"a\" /* default */].getBreakpointSize() === 'lg';\n};\n\nvar getHideSubItemsInterval = function getHideSubItemsInterval() {\n if (!currentOpenMenu || !mousePos.length) return 0;\n\n var currentMousePos = mousePos[mousePos.length - 1];\n var prevMousePos = mousePos[0];\n var currentMousePosY = currentMousePos.y;\n\n var _menuCornerLocs = menuCornerLocs,\n _menuCornerLocs2 = _slicedToArray(_menuCornerLocs, 2),\n menuTop = _menuCornerLocs2[0],\n menuBottom = _menuCornerLocs2[1];\n\n if (currentMousePosY < menuTop.y || currentMousePosY > menuBottom.y) return 0;\n\n if (slope(prevMousePos, menuBottom) < slope(currentMousePos, menuBottom) && slope(prevMousePos, menuTop) > slope(currentMousePos, menuTop)) {\n return HIDE_INTERVAL_TIMEOUT;\n }\n\n return 0;\n};\n\nvar calculateTop = function calculateTop(boundingRect, outerHeight) {\n var windowHeight = window.innerHeight;\n var bottomOverflow = windowHeight - (boundingRect.top + outerHeight);\n\n return bottomOverflow < 0 ? boundingRect.top - outerHeight + boundingRect.height : boundingRect.top;\n};\n\nvar hideMenu = function hideMenu(el) {\n if (!el) return;\n\n var parentEl = el.parentNode;\n\n el.style.display = ''; // eslint-disable-line no-param-reassign\n el.style.transform = ''; // eslint-disable-line no-param-reassign\n el.classList.remove(IS_ABOVE_CLASS);\n parentEl.classList.remove(IS_OVER_CLASS);\n parentEl.classList.remove(IS_SHOWING_FLY_OUT_CLASS);\n\n setOpenMenu();\n};\n\nvar moveSubItemsToPosition = function moveSubItemsToPosition(el, subItems) {\n var boundingRect = el.getBoundingClientRect();\n var top = calculateTop(boundingRect, subItems.offsetHeight);\n var left = sidebar ? sidebar.offsetWidth : 50;\n var isAbove = top < boundingRect.top;\n\n subItems.classList.add('fly-out-list');\n subItems.style.transform = 'translate3d(' + left + 'px, ' + (Math.floor(top) - headerHeight) + 'px, 0)'; // eslint-disable-line no-param-reassign\n\n var subItemsRect = subItems.getBoundingClientRect();\n\n menuCornerLocs = [{\n x: subItemsRect.left, // left position of the sub items\n y: subItemsRect.top // top position of the sub items\n }, {\n x: subItemsRect.left, // left position of the sub items\n y: subItemsRect.top + subItemsRect.height // bottom position of the sub items\n }];\n\n if (isAbove) {\n subItems.classList.add(IS_ABOVE_CLASS);\n }\n};\n\nvar showSubLevelItems = function showSubLevelItems(el) {\n var subItems = el.querySelector('.sidebar-sub-level-items');\n var isIconOnly = subItems && subItems.classList.contains('is-fly-out-only');\n\n if (!canShowSubItems() || !canShowActiveSubItems(el)) return;\n\n el.classList.add(IS_OVER_CLASS);\n\n if (!subItems || !isSidebarCollapsed() && isIconOnly) return;\n\n subItems.style.display = 'block';\n el.classList.add(IS_SHOWING_FLY_OUT_CLASS);\n\n setOpenMenu(subItems);\n moveSubItemsToPosition(el, subItems);\n};\n\nvar mouseEnterTopItems = function mouseEnterTopItems(el) {\n var timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getHideSubItemsInterval();\n\n clearTimeout(timeoutId);\n\n timeoutId = setTimeout(function () {\n if (currentOpenMenu) hideMenu(currentOpenMenu);\n\n showSubLevelItems(el);\n }, timeout);\n};\n\nvar mouseLeaveTopItem = function mouseLeaveTopItem(el) {\n var subItems = el.querySelector('.sidebar-sub-level-items');\n\n if (!canShowSubItems() || !canShowActiveSubItems(el) || subItems && subItems === currentOpenMenu) return;\n\n el.classList.remove(IS_OVER_CLASS);\n};\n\nvar documentMouseMove = function documentMouseMove(e) {\n mousePos.push({\n x: e.clientX,\n y: e.clientY\n });\n\n if (mousePos.length > 6) mousePos.shift();\n};\n\nvar subItemsMouseLeave = function subItemsMouseLeave(relatedTarget) {\n clearTimeout(timeoutId);\n\n if (relatedTarget && !relatedTarget.closest('.' + IS_OVER_CLASS)) {\n hideMenu(currentOpenMenu);\n }\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function () {\n sidebar = document.querySelector('.nav-sidebar');\n\n if (!sidebar) return;\n\n var items = [].concat(_toConsumableArray(sidebar.querySelectorAll('.sidebar-top-level-items > li')));\n\n var topItems = sidebar.querySelector('.sidebar-top-level-items');\n if (topItems) {\n sidebar.querySelector('.sidebar-top-level-items').addEventListener('mouseleave', function () {\n clearTimeout(timeoutId);\n\n timeoutId = setTimeout(function () {\n if (currentOpenMenu) hideMenu(currentOpenMenu);\n }, getHideSubItemsInterval());\n });\n }\n\n headerHeight = document.querySelector('.nav-sidebar').offsetTop;\n\n items.forEach(function (el) {\n var subItems = el.querySelector('.sidebar-sub-level-items');\n\n if (subItems) {\n subItems.addEventListener('mouseleave', function (e) {\n return subItemsMouseLeave(e.relatedTarget);\n });\n }\n\n el.addEventListener('mouseenter', function (e) {\n return mouseEnterTopItems(e.currentTarget);\n });\n el.addEventListener('mouseleave', function (e) {\n return mouseLeaveTopItem(e.currentTarget);\n });\n });\n\n document.addEventListener('mousemove', documentMouseMove);\n});\n\n/***/ }),\n\n/***/ \"./gfm_auto_complete.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__lib_utils_regexp__ = __webpack_require__(\"./lib/utils/regexp.js\");\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_utils_ajax_cache__ = __webpack_require__(\"./lib/utils/ajax_cache.js\");\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\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\nfunction sanitize(str) {\n return str.replace(/<(?:.|\\n)*?>/gm, '');\n}\n\nvar GfmAutoComplete = function () {\n function GfmAutoComplete(dataSources) {\n _classCallCheck(this, GfmAutoComplete);\n\n this.dataSources = dataSources || {};\n this.cachedData = {};\n this.isLoadingData = {};\n }\n\n _createClass(GfmAutoComplete, [{\n key: 'setup',\n value: function setup(input) {\n var enableMap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n emojis: true,\n members: true,\n issues: true,\n milestones: true,\n mergeRequests: true,\n labels: true\n };\n\n // Add GFM auto-completion to all input fields, that accept GFM input.\n this.input = input || $('.js-gfm-input');\n this.enableMap = enableMap;\n this.setupLifecycle();\n }\n }, {\n key: 'setupLifecycle',\n value: function setupLifecycle() {\n var _this = this;\n\n this.input.each(function (i, input) {\n var $input = $(input);\n $input.off('focus.setupAtWho').on('focus.setupAtWho', _this.setupAtWho.bind(_this, $input));\n $input.on('change.atwho', function () {\n return input.dispatchEvent(new Event('input'));\n });\n // This triggers at.js again\n // Needed for quick actions with suffixes (ex: /label ~)\n $input.on('inserted-commands.atwho', $input.trigger.bind($input, 'keyup'));\n $input.on('clear-commands-cache.atwho', function () {\n return _this.clearCache();\n });\n });\n }\n }, {\n key: 'setupAtWho',\n value: function setupAtWho($input) {\n if (this.enableMap.emojis) this.setupEmoji($input);\n if (this.enableMap.members) this.setupMembers($input);\n if (this.enableMap.issues) this.setupIssues($input);\n if (this.enableMap.milestones) this.setupMilestones($input);\n if (this.enableMap.mergeRequests) this.setupMergeRequests($input);\n if (this.enableMap.labels) this.setupLabels($input);\n\n // We don't instantiate the quick actions autocomplete for note and issue/MR edit forms\n $input.filter('[data-supports-quick-actions=\"true\"]').atwho({\n at: '/',\n alias: 'commands',\n searchKey: 'search',\n skipSpecialCharacterTest: true,\n data: GfmAutoComplete.defaultLoadingData,\n displayTpl: function displayTpl(value) {\n if (GfmAutoComplete.isLoading(value)) return GfmAutoComplete.Loading.template;\n // eslint-disable-next-line no-template-curly-in-string\n var tpl = '